提交PHP时未定义的索引错误

时间:2014-11-22 17:28:46

标签: php variables indexing undefined

我正在为餐馆网站设计一个表格,允许用户预订晚餐预订,每个字段都经过验证(除了复选框),如果用户在所有字段中输入了正确的信息,他们会被发送给谢谢显示其预订详情的页面。

我的代码中存在与我网站上的复选框有关的问题,如果用户点击提交而未填写必填字段,则会在屏幕顶部显示以下错误:

"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>' ;
?>

3 个答案:

答案 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 {
    ...
}