4

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

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

5 回答 5

1

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

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

于 2013-10-10T15:31:35.673 回答
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>
于 2013-10-10T15:31:57.943 回答
1

使用issetphp.net/isset

如果未设置,您还可以使用 tenary 来实现默认值(空白字符串):

$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/

于 2013-10-10T15:32:44.307 回答
0

很简单,修改您的 html 输入以包含isset()

<td><input type="text" name="firstname" size="28" value="<?php if (isset($_POSTp;firstname'])){ echo $_POST['firstname']; }?>"></td>
    </tr>
于 2013-10-10T15:29:42.850 回答
0

正如其他答案所建议的那样,您应该首先检查密钥是否存在于$_POSTusing 中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 代码之前正确传递任何用户提供的值来保护您免受XSS攻击。htmlspecialchars()

于 2013-10-10T16:39:59.550 回答