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值以及希望值保持不变的地方总是使用只读。
目前我有以下表格:
<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值以及希望值保持不变的地方总是使用只读。