【问题标题】:PHP $_POST Form validation and PostbackPHP $_POST 表单验证和回发
【发布时间】:2014-10-28 04:03:49
【问题描述】:

我正在为我的 PHP1 课程分配作业,我们正在处理粘性表格,我的作业是编写一个订单表格,验证输入了姓名和选择了电话型号,如果两者都已填写,则数据返回到页面,如果缺少一个或两个,则会将错误消息发送回页面。附件是可选的。目前,如果没有选择电话并且在表单中输入了姓名,脚本将发布错误,如果两者都缺失,它将发布错误,但如果姓名缺失并且选择了电话,则它不会标记为错误并继续将脚本处理回页面。我试图纠正一个函数来验证用户名文本字段和电话单选按钮是否被选中为真,或者如果为假则显示错误消息。谁能告诉我为什么我的表单在只选择手机型号并且名称字段为空白时处理数据?

脚本(订单):

<!DOCTYPE html>
<html>
<head>
    <title>Order Form</title>
</head>
<body>
<h1>Order Your Smartphone</h1>
<?php
/**
 * Created by PhpStorm.
 * User: Daniel Vermillion
 * Date: 10/27/2014
 * Time: 7:59 PM
 */

$isValid = false;

//function totalAcc() {
//    foreach($_POST['acc'] as $item) {
//        $accPrice[] = $item;
//    }
//    array_sum($accPrice);
//    return $accPrice;
//}

//function totalCost() {
//    $subtotal = $phonePrice + $accPrice;
//    $tax = 0.08;
//    $taxTotal = $subtotal * $tax;
//    $total = $subtotal + $taxTotal;
//    return $subtotal;
//    return $taxTotal;
//    return $total;
//}

function validData() {
    if(isset($_POST['userName']) && isset($_POST['phones'])) {
        return true;
    }
    else {
        return false;
    }
}

function calcResults() {
    $isValid = validData();
    if($isValid) {
        echo "Full Name: {$_POST['userName']} <br />";
        echo "Phone Model: {$_POST['phones']} <br />";
        echo "Accessories: {$_POST['acc']} <br />";
//        echo "Subtotal: $subtotal <br />";
//        echo "Tax: '$taxTotal' <br />";
//        echo "Total Cost: $total <br />";
    }
    else {
        echo "Please enter your name and select a phone model.";
    }
}

?>
<form method="post" action="index.php">
    Full Name: <input type="text" name="userName" value="<?php if(isset($_POST['userName'])) echo $_POST['userName']; ?>" /><br />
    <h4>Add Smartphone</h4>
    <table cellspacing="4" cellpadding="4" border="1">
        <tr>
            <td></td>
            <td>Phone</td>
            <td>Model</td>
            <td>Storage</td>
            <td>Price</td>
        </tr>
        <tr>
            <td><input type="radio" name="phones" value="SP8" <?php if(isset($_POST['phones']) && $_POST['phones'] == "SP8") echo 'checked'; ?> /></td>
            <td>SuperPhone</td>
            <td>SP8</td>
            <td>8 GB</td>
            <td>$400</td>
        </tr>
        <tr>
            <td><input type="radio" name="phones" value="SP16" <?php if(isset($_POST['phones']) && $_POST['phones'] == "SP16") echo 'checked'; ?> /></td>
            <td>SuperPhone</td>
            <td>SP16</td>
            <td>16 GB</td>
            <td>$450</td>
        </tr>
        <tr>
            <td><input type="radio" name="phones" value="MP8" <?php if(isset($_POST['phones']) && $_POST['phones'] == "MP8") echo 'checked'; ?> /></td>
            <td>MegaPhone</td>
            <td>MP8</td>
            <td>8 GB</td>
            <td>$500</td>
        </tr>
        <tr>
            <td><input type="radio" name="phones" value="MP16" <?php if(isset($_POST['phones']) && $_POST['phones'] == "MP16") echo 'checked'; ?> /></td>
            <td>MegaPhone</td>
            <td>MP16</td>
            <td>16 GB</td>
            <td>$550</td>
        </tr>
    </table>
    <h4>Add Accessories</h4>
    <table cellspacing="4" cellpadding="4" border="1">
        <tr>
            <td></td>
            <td>Accessory</td>
            <td>Price</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="acc[]" value="handstrap" <?php if(isset($_POST['acc']) && in_array('handstrap', $_POST['acc'])) echo ' checked'; ?> /></td>
            <td>Hand Strap</td>
            <td>$6.25</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="acc[]" value="leathercase" <?php if(isset($_POST['acc']) && in_array('leathercase', $_POST['acc'])) echo ' checked'; ?> /></td>
            <td>Leather Case</td>
            <td>$14.50</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="acc[]" value="headphones" <?php if(isset($_POST['acc']) && in_array('headphones', $_POST['acc'])) echo ' checked'; ?> /></td>
            <td>Headphones</td>
            <td>$18.75</td>
        </tr>

    </table>
    <br />
    <input type="submit" name="submit" value="Click to Finalize Order" /><br /><br />
</form>
<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    calcResults();
}

?>
</body>
</html>

【问题讨论】:

  • 试试!empty() 而不是isset

标签: php forms validation post


【解决方案1】:

isset() 对于字符串,对于空字符串返回 true。 https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/

试试 Empty()

edit:请注意,如果字段中有空格,则不会被视为空。您可能应该在结果上使用 Trim() 以确保没有空格。

【讨论】:

  • 好吧 isEmpty() 不起作用,但 empty() 起作用!非常感谢汤姆!你的回答成功了!
  • 啊,是的,我的意思是 Empty()。多么愚蠢的错字。我将对其进行编辑,以免看到该帖子的任何人感到困惑。还好我放了参考。很高兴我能帮上忙。
【解决方案2】:

你需要回显结果..

替换

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    calcResults();
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo calcResults();
}

更新:

<!DOCTYPE html>
<html>
<head>
    <title>Order Form</title>
</head>
<body>
<h1>Order Your Smartphone</h1>
<?php
/**
 * Created by PhpStorm.
 * User: Daniel Vermillion
 * Date: 10/27/2014
 * Time: 7:59 PM
 */

$isValid = false;

//function totalAcc() {
//    foreach($_POST['acc'] as $item) {
//        $accPrice[] = $item;
//    }
//    array_sum($accPrice);
//    return $accPrice;
//}

//function totalCost() {
//    $subtotal = $phonePrice + $accPrice;
//    $tax = 0.08;
//    $taxTotal = $subtotal * $tax;
//    $total = $subtotal + $taxTotal;
//    return $subtotal;
//    return $taxTotal;
//    return $total;
//}

function validData() {
    if(isset($_POST['userName']) && !empty($_POST['userName'])) {
        if(isset($_POST['phones']) && !empty($_POST['phones'])) {
            $acc = (isset($_POST['acc']) && !empty($_POST['acc'])) ? " <br />Accessories:  " . implode(" and ",$_POST['acc']) . " <br />" : "";
            return "Full Name: " . $_POST['userName'] . " <br />Phone Model:  " . $_POST['phones'] . $acc;
        } else {
            return "Please enter the phone model.";
        }
    } else {
        return "Please enter your name and select a phone model.";
    }
}

function calcResults() {
    $isValid = validData();
    return $isValid;
}

?>
<form method="post" action="form.php">
    Full Name: <input type="text" name="userName" value="<?php if(isset($_POST['userName'])) echo $_POST['userName']; ?>" /><br />
    <h4>Add Smartphone</h4>
    <table cellspacing="4" cellpadding="4" border="1">
        <tr>
            <td></td>
            <td>Phone</td>
            <td>Model</td>
            <td>Storage</td>
            <td>Price</td>
        </tr>
        <tr>
            <td><input type="radio" name="phones" value="SP8" <?php if(isset($_POST['phones']) && $_POST['phones'] == "SP8") echo 'checked'; ?> /></td>
            <td>SuperPhone</td>
            <td>SP8</td>
            <td>8 GB</td>
            <td>$400</td>
        </tr>
        <tr>
            <td><input type="radio" name="phones" value="SP16" <?php if(isset($_POST['phones']) && $_POST['phones'] == "SP16") echo 'checked'; ?> /></td>
            <td>SuperPhone</td>
            <td>SP16</td>
            <td>16 GB</td>
            <td>$450</td>
        </tr>
        <tr>
            <td><input type="radio" name="phones" value="MP8" <?php if(isset($_POST['phones']) && $_POST['phones'] == "MP8") echo 'checked'; ?> /></td>
            <td>MegaPhone</td>
            <td>MP8</td>
            <td>8 GB</td>
            <td>$500</td>
        </tr>
        <tr>
            <td><input type="radio" name="phones" value="MP16" <?php if(isset($_POST['phones']) && $_POST['phones'] == "MP16") echo 'checked'; ?> /></td>
            <td>MegaPhone</td>
            <td>MP16</td>
            <td>16 GB</td>
            <td>$550</td>
        </tr>
    </table>
    <h4>Add Accessories</h4>
    <table cellspacing="4" cellpadding="4" border="1">
        <tr>
            <td></td>
            <td>Accessory</td>
            <td>Price</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="acc[]" value="handstrap" <?php if(isset($_POST['acc']) && in_array('handstrap', $_POST['acc'])) echo ' checked'; ?> /></td>
            <td>Hand Strap</td>
            <td>$6.25</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="acc[]" value="leathercase" <?php if(isset($_POST['acc']) && in_array('leathercase', $_POST['acc'])) echo ' checked'; ?> /></td>
            <td>Leather Case</td>
            <td>$14.50</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="acc[]" value="headphones" <?php if(isset($_POST['acc']) && in_array('headphones', $_POST['acc'])) echo ' checked'; ?> /></td>
            <td>Headphones</td>
            <td>$18.75</td>
        </tr>

    </table>
    <br />
    <input type="submit" name="submit" value="Click to Finalize Order" /><br /><br />
</form>
<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo calcResults();
}

?>
</body>
</html>

【讨论】:

  • 我尝试了您推荐的方法,但没有任何改变,仍然遇到同样的问题。谢谢你!
  • 回显 calcResults() 无济于事,因为 CalcResults 已经回显了结果。
  • isset($_POST['userName']) &amp;&amp; !empty($_POST['userName']) 是多余的。 !empty() 就够了。
  • @blo 您的选择确实解决了我遇到的问题,并继续解决我尚未询问的配件问题,所以谢谢!!!
  • @DxVermakaXeno 很高兴我能帮上忙:D
猜你喜欢
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多