PHP 提交表格 |其中带有回显值的输入字段给出未定义的索引

PHP Submit Form | Input field with echo'd value in it gives undefined index

目前我有以下表格:

<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 其他页面中的输入字段时,我不断收到以下错误:

Notice: Undefined index: main_email

Notice: Undefined index: main_username

我是不是在错误的地方回显了变量?

新的-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>";
?>

经过一些谷歌搜索后,disabled 表单没有 post 到操作页面。将 disabled 替换为 readonly,你应该没问题。

原回答: 您收到这些通知的原因是,变量尚未在表单的输入值中设置 我 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 我同意这一点,他们是对的。

但是, 您将在表单输入中收到未定义的索引通知,因为这些变量尚未 set/defined .

查看您的 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" 作为默认值。

error reporting 添加到您的文件的顶部,这将指示错误(如果有)。

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

// rest of your code

旁注:错误报告只应在试运行中进行,绝不能在生产中进行。

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

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

替换:

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

表单的禁用字段值不是posted.So在您想要post值以及希望值保持不变的地方总是使用只读。