为什么在需要的数据丢失时提交此PHP表单?

时间:2014-07-06 18:19:11

标签: php forms

这是我创建的表单。我想要所有的输入字段。但是,当我只选择其中一个复选框时,它会在返回错误消息时返回打印的验证消息。如果我将复选框留空,则返回错误消息。我是PHP的新手,想知道为什么我的代码中的复选框在他们应该给出错误消息时如果其他输入字段留空则验证整个表单。

<?php

// Check for form submission:
if($_SERVER['REQUEST_METHOD'] == 'POST'){

//minimal form validation:
if (isset($_POST['food_quality'], $_POST['name'], $_POST['email'], $_POST['comment'])){


// Print out message
echo '<p>Thank you <b>' . $_POST['name'] . '</b> for filling out this form. We will 
contact you at <b>' . $_POST['email'] . ' </b>in regards to the following food rating of 
<b>' . $_POST['food_quality'] .'</b> and your comments:<br /> <b>' . $_POST['comment'] 
.'</b></br /> <br /> Have a great day!</p>';

    } else { // Invalid submitted values.
        echo '<h1>Error!</h1> <p class="error">Please ender a valid information!</p>';
    } 
}

//Leave PHP and create HTML form

?>

<h1> Bob's Bar and Grill Feedback form:</h1>

<form action="feedback.php" method="post">

<p>Name:<input type="text" name="name" value="<?php if(isset($_POST['name'])){ echo 
$_POST['name'];} ?>" /><br /> Email:<input type="text" name="email" value="<?php 
if(isset($_POST['email'])){ echo $_POST['email'];}?>" /><br />
</p>

<p>The food was:</p>    
<p><input type="checkbox" name="food_quality" value="excellent" 
<?php if(isset($_POST['food_quality']) && ($_POST['food_quality'] == 'excellent') ) {echo 
'checked="checked"';}?> /> excellent!
<input type="checkbox" name="food_quality" value="okay"
<?php if(isset($_POST['food_quality']) && ($_POST['food_quality'] == 'okay')) {echo 
'checked="checked"';}?> /> okay
<input type="checkbox" name="food_quality" value="poor"
<?php if(isset($_POST['food_quality']) && ($_POST['food_quality'] == 'poor')) {echo 
'checked="checked"';}?> /> poor <br /> </p> 
<p>Comments:<br />
<textarea name="comment" rows="5" cols="40" ><?php if(isset($_POST['comment'])){echo 
$_POST['comment'];}?></textarea></p>
<p><input type="submit" name="submit" value="Submit" /></p>

</form>

4 个答案:

答案 0 :(得分:1)

您正在使用isset来确定数据是否已发送到表单。 isset检查变量是否为NULL,但您的表单将发送空字符串值。您需要检查每个值是否为empty

例如,替换

if (isset($_POST['food_quality'], $_POST['name'], $_POST['email'], $_POST['comment'])){

if (isset($_POST['food_quality'], $_POST['name'], $_POST['email'], $_POST['comment'])
    && !empty($_POST['food_quality'])
    && !empty($_POST['name'])
    && !empty($_POST['email'])
    && !empty($_POST['comment'])
){

答案 1 :(得分:0)

这是因为设置了变量。空,但设置。

您需要检查它们是否已设置,而不是empty

对于复选框,如果未选中则不设置变量。如果您也想发送它们,请在具有相同名称的复选框之前创建一个隐藏字段。这将是未选中复选框的默认值。

答案 2 :(得分:0)

由于值在您的表单中,因此无论它们是否为空,都会设置它们。而不是isset(),请使用!empty()。 (!使它如果有数据则返回true,如果为空则返回false。

答案 3 :(得分:0)

您已使用相同的名称调用所有复选框,因此所有复选框都引用相同的名称。这是一个错误,您需要为不同的复选框指定不同的名称(这与无线电输入相反)。

另外最好检查$ _POST [&#39; xxx&#39;]是否也是真的(如亚历山大所说)