我试图在我的表单中重新填充一个字段但是当我进入我的网站时,它会在这个字段中显示一些奇怪的警告或代码:
注意:未定义的索引:firstname in 第24行/home/int322_133a31/apache/htdocs/lab5/forms-part3.php
这是我的表格
代码的一部分<body>
<form method="post" action="forms-part3.php">
<table>
<tr>
<th colspan="2">FSOSS Registration</th>
</tr>
<tr>
<td><br /></td>
</tr>
<tr>
<td class="right text">Title:</td>
<td><input type="radio" name="sex" value="male">Mr.</td></tr>
<tr><td></td><td><input type="radio" name="sex" value="female">Mrs.</td></tr>
<tr><td></td><td><input type="radio" name="sex" value="female">Ms.</td>
</tr>
<tr>
<td class="right text">First Name:</td>
<td><input type="text" name="firstname" size="28" value="<?php echo $_POST['firstname'];?>"></td>
</tr>
</table>
这是用于获取用户输入的内容
<?php
if ($_POST){
$sex=$_POST['sex'];
$firstName=$_POST['firstname'];
$lastName=$_POST['lastname'];
$organization=$_POST['organization'];
$email=$_POST['emailaddress'];
$phone=$_POST['phonenumber'];
$selection=$_POST['selection'];
?>
答案 0 :(得分:1)
我建议您在尝试访问之前检查if $_POST[*] exist
。第一次不会设置,所以使用默认值。
答案 1 :(得分:1)
由于$_POST
尚未设置,因此您第一次访问该页面时可能会显示该警告。
更改,
<td><input type="text" name="firstname" size="28" value="<?php echo $_POST['firstname'];?>"></td>
要,
<td><input type="text" name="firstname" size="28" value="<?php if(isset($_POST['firstname'])){echo $_POST['firstname'];} ?>"></td>
答案 2 :(得分:1)
使用isset
:php.net/isset
如果未设置:
,您还可以使用三元来实现默认值(空白字符串)$sex = isset($_POST['sex']) ? $_POST['sex'] : '';
$firstName = isset($_POST['firstname']) ? $_POST['firstname'] : '';
$lastName = isset($_POST['lastname']) ? $_POST['lastname'] : '';
$organization = isset($_POST['organization']) ? $_POST['organization'] : '';
$email = isset($_POST['emailaddress']) ? $_POST['emailaddress'] : '';
$phone = isset($_POST['phonenumber']) ? $_POST['phonenumber'] : '';
$selection = isset($_POST['selection']) ? $_POST['selection'] : '';
有关三元运算符的更多信息:http://www.sitepoint.com/using-the-ternary-operator/
答案 3 :(得分:0)
很简单,修改您的html输入以包含isset()
<td><input type="text" name="firstname" size="28" value="<?php if (isset($_POSTp;firstname'])){ echo $_POST['firstname']; }?>"></td>
</tr>
答案 4 :(得分:0)
正如其他答案所示,您应首先使用$_POST
检查isset()
中的密钥是否存在。为了避免让你的代码变得混乱,我建议你定义一个辅助函数来完成它,例如像这样:
function repopulate ( $field ) {
if ( isset( $_POST[$field] ) ) {
echo htmlspecialchars( $_POST[$field] );
}
}
可以让你写下你的表单字段:
<input type="text" name="firstname" value="<?php repopulate('firstname') ?>">
您甚至可以扩展该函数以输出name
属性(因此您不必重新键入它),并且可能接受可选的默认值,例如:像这样:
function form_name_value ( $field, $value = "" ) {
if ( isset( $_POST[$field] ) ) {
$value = $_POST[$field];
}
$field = htmlspecialchars( $field );
$value = htmlspecialchars( $value );
echo "name=\"$field\" value=\"$value\"";
}
这可以让你写下你的表单字段:
<input type="text" <?php form_name_value( 'firstname', '' ) ?>>
您还可以编写类似的功能,为复选框和选择菜单设置checked
/ selected
属性。
作为奖励,上述两个功能都可以确保在嵌入HTML代码之前确保任何用户提供的值正确传递htmlspecialchars()
,从而保护您免受XSS攻击。