PHP提交表格|带有echo值的输入字段给出了未定义的索引

时间:2015-06-19 11:44:34

标签: php submit

目前我有以下表格:

<form id="new_account_form" action="php/new-account.php" method="post">
    <span>name</span>
    </br>
    <input type="text" name="main_name" required></input>
    <br><br>

    <span>email adres</span>
    </br>
    <input type="text" name="main_email" required value="<?php echo $email; ?>" disabled></input>
    <br><br>

    <span>user</span>
    </br>
    <input type="text" name="main_username" required value="<?php echo $username; ?>" disabled></input>
    <br><br>
</form>

正如您所看到的,电子邮件输入字段和用户名输入中都包含回显的PHP值。输入字段不为空。

我现在面临的问题是,当我提交表单并尝试$_POST其他页面中的输入字段时,我不断收到以下错误:

  

注意:未定义的索引:main_email

     

注意:未定义的索引:main_username

我是否在错误的地方回应变量?

new-account.php文件包含以下代码:

<?php
    //get data from form
    $main_name = $_POST['main_name'];
    $main_email = $_POST['main_email'];
    $main_username = $_POST['main_username'];

    echo $main_name;
    echo "</br>";
    echo $main_email;
    echo "</br>";
    echo $main_username;
    echo "</br>";
?>

4 个答案:

答案 0 :(得分:6)

经过一番谷歌搜索后,disabled表格不会发布到操作页面。将disabled替换为readonly,您应该没问题。

答案 1 :(得分:3)

原始答案: <击> 您收到这些通知的原因是因为未在表单的输入值中设置变量。 我50%正确,50%错误。

(请参阅下面的编辑)

  • 使用三元运算符

更改:value="<?php echo $email; ?>"

value="<?php $email=!empty($_POST['main_email']) ? $_POST['main_email'] : ''; ?>"

value="<?php echo !empty($_POST['main_email']) ? $_POST['main_email'] : ''; ?>"

并为其他输入执行相同操作。

对另一个文件中的其他输入也使用条件!empty()

旁注:</input>是无效的结束标记。 </br>也无效,应该显示为<br/>

编辑 - 这是一个补充答案:

看到关于disabled的{​​{3}}我同意这一点并且他们是对的。

但是, 您将在表单输入中获得未定义的索引通知,因为这些变量尚未设置/定义。

查看您的HTML源代码(启用了错误报告),您将看到类似于以下内容的内容:

<input type="text" name="main_email" required value="<br />
<b>Notice</b>:  Undefined variable: email in <b>/path/to/your/file.php</b> on line <b>xxx</b><br />
" disabled></input>

和其他输入的类似通知。

  • 通知将显示在输入中。

  • 即使输入字段被禁用,PHP仍会为变量抛出未定义的通知。

其他编辑

您还可以在提交后获得Notice: Undefined variable: email in...和用户名。至少,这就是我的测试所揭示的。再次;使用三元运算符作为输入,它将完全解决问题。

目前还不知道为什么要回显输入的值。如果这些是从其他地方填充的(数据库,文件,其他),请删除变量,使用我已经说过的三元运算符,或使用“Email”和“Username”作为默认值。

http://php.net/manual/en/language.operators.comparison.php添加到文件的顶部,这将指示错误(如果有)。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。

答案 2 :(得分:2)

替换:

    <input type="text" name="main_email" required value="<?php echo $email; ?>" disabled></input>


用:

 <input type="text" name="main_email" required value="<?php echo $email; ?>" readonly></input>

表单的已禁用字段值未发布。因此,始终只使用readonly发布值,并希望值保持不变。

答案 3 :(得分:-1)

if(isset($main_email))
{ 
    echo $main_email;
}

你可以使用isset()函数... http://php.net/manual/en/function.isset.php