2012-03-21 102 views
3
<html> 
<body> 

<form action="http://localhost/index1.php" method="post"> 
     Type your name: <input type="text" name="name" value="<?php echo $_POST['name'];?>"> 
       <input type="submit" value="Submit"> 
</form> 

</body> 
</html> 

我想要做的就是在用户输入一个值并按下提交按钮后,保持输入的数据在文本框中。在html中嵌入php以便在用户提交值后在文本框中保留文本

当我按下提交按钮,它会在文本框中发出一个通知,说这个名字是 一个未定义的索引,我明白为什么。 $ _POST ['name']没有值。

我只是想知道是否有办法做到这一点。 我是初学PHP和HTML。

+0

大家请阅读 - http://blog.astrumfutura.com/2012/03/a-hitchhikers-guide-to-cross-site-scripting-xss-in-php-part-1-how-not- to-use-htmlspecialchars-for-output-escaping/ – Phil 2012-03-21 05:07:56

回答

0

@达拉斯

你在正确的轨道上;这里是一个(非常粗糙和肮脏的)例子显示在其原来的文本提交的POST字段的值形式

<form action="thispage.php" method="post"> 
    <input type="text" name="mytext" value="<?php echo isset($_POST['mytext'])?$_POST['mytext']:''?>" /> 
    <input type="submit" value="submit"/> 
</form> 

这样做是检查POST场,mytext,定义和(如果所以)把这个值放回到文本框中。如果没有定义,它只是一个空白值。

如果它不适合你,我会重新检查文本框的name属性是否与你在$ _POST中搜索的关键值匹配。

+0

这仍然会抛出相同的'E_NOTICE'错误 – Phil 2012-03-21 04:56:31

+0

是的,只是注意到我忘记了POST周围的isset。固定 – jonathanl 2012-03-21 04:57:16

+0

我认为反对是因为你的建议暴露了一个非常简单和天真的注入攻击。重新创建此表单,然后发布内容为''让我们知道发生了什么。 – 2012-03-21 04:57:56

0

当你的表单action属性指向index1.php那么我想给定的HTML代码在同index1.php给出,在这种情况下,那么你必须要做到这一点

<html> 
<body> 

<form action="http://localhost/index1.php" method="post"> 
    Type your name: input type="text" name="name" value="<?php if(isset($_POST['name'])){echo $_POST['name'];}?> 
        input type="submit" value="Submit"> 
</form> 

</body> 
</html> 

<?php echo isset($_POST['name'])?$_POST['name']:''?>是在另一种方式,使属性值条件

3

试试这个(假设这是index1.php和你使用UTF-8为您的内容类型)

<?php 
$name = isset($_POST['name']) ? $_POST['name'] : null; 
?> 

<!-- your HTML, form, etc --> 

<input type="text" name="name" 
    value="<?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8') ?>"> 
+0

isset不是正确的做法,你必须检查'name'键是否在$ _POST数组中。 – AsTeR 2012-03-21 17:28:19

+0

@AsTeR也许你不知道'isset()'做了什么。对于XSS漏洞,我建议您[阅读手册](http://php.net/manual/en/function.isset.php#example-4825) – Phil 2012-03-21 23:34:15

6
<?php 
//check whether the variable $_POST['name'] exists 
//this condition will be false for the loading 
if(isset($_POST['name']){ 
    $name = $_POST['name']; 
} 
else{ 
    //if the $_POST['name'] is not set 
    $name = ''; 
} 


?> 

<html> 
<body> 

<form action="http://localhost/index1.php" method="post"> 
    Type your name: <input type="text" name="name" value="<?php echo $name;?>"> 
        <input type="submit" value="Submit"> 
</form> 

</body> 
</html> 
+1

-1 – Phil 2012-03-21 05:25:57

1

从@菲尔的回答考虑目前正使用“isset”不是解决办法(编辑:我错了,就这点看评论),右边的功能是测试$ _POST的“名称”项的试图访问:

<?php 
$name = null; 
if (array_key_exists('name', $_POST)) { 
    $name = $_POST['name']; 
} 
//more condensed : $name = array_key_exists('name', $_POST) ? $_POST['name'] : null; 
?> 

<!-- your HTML, form, etc --> 

<input type="text" name="name" 
    value="<?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8') ?>"> 

出现的消息是一个PHP警告,阅读your environment error_reporting in PHP可能是一个好主意。

相关问题