PHP $ _POST表单验证和回发

时间:2014-10-28 04:03:49

标签: php forms validation post

我正在处理我的PHP1类的作业,我们正在处理粘性表单,我的任务是编写一个订单表单,验证是否输入了名称并选择了手机模型,如果两者都填写了帖子,数据返回到页面,如果缺少一个或两个,则会将错误消息发回页面。配件是可选的。目前,如果没有选择手机并且在表单中输入了名称,脚本将发布错误,如果两者都丢失,它将发布错误,但如果缺少名称并且选择了手机,那么它将不会标记为错误并继续将脚本处理回页面。我试图通过一个函数来验证userName文本字段和电话单选按钮都被选为true,如果为false,则会显示错误消息。任何人都可以告诉我为什么我的表单只在选择手机型号并且名称字段为空白时处理数据?

脚本(OrderForm):

<!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>

2 个答案:

答案 0 :(得分:2)

字符串的

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

尝试清空()

编辑:请注意,如果该字段中有空格,则不会将其计为空。您应该在结果上使用Trim()以确保没有空格。

答案 1 :(得分:1)

你需要回应结果..

替换

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>