我正在为餐馆网站设计一个表格,允许用户预订晚餐预订,每个字段都经过验证(除了复选框),如果用户在所有字段中输入了正确的信息,他们会被发送给谢谢显示其预订详情的页面。
我的代码中存在与我网站上的复选框有关的问题,如果用户点击提交而未填写必填字段,则会在屏幕顶部显示以下错误:
"Notice: Undefined index: vege in /home/users/2014/xxx/public_html/xxx/index.php on line 17
Notice: Undefined index: vegan in /home/users/2014/xxx/public_html/xxx/index.php on line 20
Notice: Undefined index: peanut in /home/users/2014/xxx/public_html/xxx/index.php on line 23
Notice: Undefined index: gluten in /home/users/2014/xxx/public_html/xxx/index.php on line 26"
以下是我的预订页面的代码:
<?php
session_start();
if ( isset($_POST['vege']))
$_SESSION['vege'] = $_POST['vege'];
if ( isset($_POST['vegan']))
$_SESSION['vegan'] = $_POST['vegan'];
if ( isset($_POST['peanut']))
$_SESSION['peanut'] = $_POST['peanut'];
if ( isset($_POST['gluten']))
$_SESSION['gluten'] = $_POST['gluten'];
?>
...
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
...
<strong>Dietary Requirements:</strong>
<br><br>
Vegetarian <input type="checkbox" name="vege" value="Vegetarian" <?php if(isset($_POST['vege'])) echo "checked='checked'"; ?>>
<br><br>
Vegan <input type="checkbox" name="vegan" value="Vegan" <?php if(isset($_POST['vegan'])) echo "checked='checked'"; ?>>
<br><br>
Peanut Allergy <input type="checkbox" name="peanut" value="Peanut Allergy" <?php if(isset($_POST['peanut'])) echo "checked='checked'"; ?>>
<br><br>
Gluten Allergy <input type="checkbox" name="gluten" value="Gluten Allergy" <?php if(isset($_POST['gluten'])) echo "checked='checked'"; ?>>
<br><br><br>
<input type="submit" id="submit" name="submit" value="Submit">
即使显示了这些错误,代码也会履行应有的职责。有谁知道如何修复我的代码以防止错误消息显示?如果我需要显示更多代码以便清楚,我可以为您更新我的问题。谢谢!
现在删除了错误,但是感谢页面上的复选框没有被正确回显,因为无论用户选择什么,所有的饮食要求都得到了回应:(有没有办法我可以在下面更改我的代码,以便只有选中的复选框才会被回显?
<b>Dietary Requirements: </b>
<br><br>
<?php
if(isset($_SESSION['vege']))
echo $_SESSION['vege'] . '<br>' ;
if(isset($_SESSION['vegan']))
echo $_SESSION['vegan'] . '<br>' ;
if(isset($_SESSION['peanut']))
echo $_SESSION['peanut'] . '<br>' ;
if(isset($_SESSION['gluten']))
echo $_SESSION['gluten'] . '<br>' ;
?>
答案 0 :(得分:5)
你在第二页的标题之前输出,这会抛出类似于:
的东西警告:session_start():无法发送会话缓存限制器 - 已在第9行的/path/to/file.php中发送的标头(在/path/to/file.php:4处开始输出)
任何内容都不应高于<?php
- 没有HTML,空格等
你也需要session_start();
。
session_start();
必须位于使用会话的所有文件中。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
session_start();
if(isset($_SESSION['vege']))
echo $_SESSION['vege'] . '<br>' ;
if(isset($_SESSION['vegan']))
echo $_SESSION['vegan'] . '<br>' ;
if(isset($_SESSION['peanut']))
echo $_SESSION['peanut'] . '<br>' ;
if(isset($_SESSION['gluten']))
echo $_SESSION['gluten'] . '<br>' ;
?>
<b>Dietary Requirements: </b>
<br><br>
答案 1 :(得分:2)
您有两种选择方式:
1-确保用户填写您需要的所有输入,除非他/她无法提交表单或提交,但您可以阻止通过javascript提交并确保填写所有字段
您可以通过在输入中添加必需属性来实现此目的,但这在某些浏览器中可能不起作用(可能是IE)
或者您可以使用Javascript检查所有这些内容。
2-您可以像这样更改代码:
if ( isset($_POST['gluten']))
$_SESSION['gluten'] = $_POST['gluten'];
注意:
当你使用空时,PHP会假设有一个例如$ _POST ['gluten'],然后检查它的值是否为空
但是如果没有设置该变量,它将抛出错误,因此您必须首先检查是否已设置(isset)。
编辑的回复中的:
假设您要显示一个检查或未检查的复选框,是吗?
例如:
if(myCondition){
$checkeck = "checked='checked'";
}else{
$checked = "";
}
然后您可以像这样使用此变量:
<input type="checkbox" <?php echo $checked?> />
答案 2 :(得分:0)
您还可以在html中为输入提供必需的属性:
<input type="..." required />
风格提示:
if ( isset($_POST['submit'])) {
$_SESSION['vege'] = $_POST['vege'];
$_SESSION['vegan'] = $_POST['vegan'];
$_SESSION['peanut'] = $_POST['peanut'];
$_SESSION['gluten'] = $_POST['gluten'];
} else {
...
}