重新填充表单字段

时间:2013-10-10 15:27:09

标签: php

我试图在我的表单中重新填充一个字段但是当我进入我的网站时,它会在这个字段中显示一些奇怪的警告或代码:

  

注意:未定义的索引: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'];
?>

5 个答案:

答案 0 :(得分:1)

我建议您在尝试访问之前检查if $_POST[*] exist。第一次不会设置,所以使用默认值。

http://php.net/manual/en/function.isset.php

答案 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)

使用issetphp.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攻击。