繁体   English   中英

PHP提交表格并选择条件

[英]Php submit form with select option condition

我想将表单数据提交到数据库中,但首先应在插入之前通过选择选项对其进行过滤。 以下是我的表单视图:

<form method="POST">
<input type="text" name="name" placeholder="Your Name" />
<input type="text" name="username" placeholder="Username"/>
<select name="choose">
    <option value="1">One</option>
    <option value="2">Two</option>
</select>
<button type="submit" name="submit">Submit</button>
<!-- <input type="submit" name="submit" value="Submit" /> -->

这是过程形式:

if(isset($_POST['submit'])) {
switch(true) {
    case  ( isset($_POST['choose']) == "1" ):
        echo "you choose 1";
        break;
    case  ( isset($_POST['choose']) == "2" ):
        echo "you choose 2";
        break;
    case  ( isset($_POST['choose']) == "" ):
        echo "you didn't choose anything";
        default;
}
echo "<pre>";
print_r($_POST);
echo "</pre>";

}

例如,如果我选择Two ,结果是:

you choose 1
Array
(
    [name] => aaaaaaaa
    [username] => bbbbbbbbb
    [choose] => 2
    [submit] => 
)

you choose 1仍然you choose 1显示you choose 1是第一种情况。 在将数据发送到数据库之前,应该怎么做过滤数据? 至少我怎么知道数据的状态,无论是1, 2,还是you didn't choose anything 说得通?

提前致谢。

您需要重新处理开关的大小写,开关应该是一个可以求值为不同值的变量,而大小写就是这些值:

switch($_POST['choose']){
    case "1":
        echo "you choose 1";
        break;
    case "2":
        echo "you choose 2";
        break;
    case "":
        echo "you didn't choose anything";
        break;
}

当没有大小写与值匹配的情况下,可以将default关键字用作最后一种情况,在切换用例的情况下,它用作“ else”:

switch($some_val){
    case "1":
        echo "you entered a 1!";
        break;
    default:
        echo "You didn't enter a 1!!";
        break;
}

更改此:

if(isset($_POST['submit'])) {
switch(true) {
    case  ( isset($_POST['choose']) == "1" ):
        echo "you choose 1";
        break;
    case  ( isset($_POST['choose']) == "2" ):
        echo "you choose 2";
        break;
    case  ( isset($_POST['choose']) == "" ):
        echo "you didn't choose anything";
        default;
    }
}

对此:

if(isset($_POST['submit'])) {
$choose = isset($_POST['choose']) ? $_POST['choose'] : '';
switch($choose) {
    case  "1" :
        echo "you choose 1";
        break;
    case  "2" :
        echo "you choose 2";
        break;
    default;
        echo "you didn't choose anything";            
    }
}

isset()仅返回true / false值。 以您使用它的方式使用时,这可能导致意外/意外的行为。 如果要使用开关盒,则需要进行测试。 true是不正确的测试。 true永远是1。因为0为false,而其他任何值为true。 但是关键字true实际上只是一个1。

因此,在开关中使用$_POST['choose']来将值赋给变量要安全$_POST['choose'] 现在,我们有一个适当的变量可以进行测试,并且可以达到3个测试用例之一。 使用三元运算符只是if语句的简捷方式。

在您的摘要中,您的开关使用不正确。 应该是这样的:

switch($_POST['choose']) { // what is being compared
    case 1: // what if it's 1
        echo "you choose 1";
        break;
    case 2: // what if it's 2
        echo "you choose 2";
        break;
    default: // what else
        echo "you didn't choose anything";
        break;
}

但是默认情况下您没有任何选择,因为您有固定的选项。

另外, isset()仅知道变量是否存在。 它不会告诉您它的价值。 人们认为做类似的事情

if(isset($_POST['variable'])){
    $variable = $_POST['variable'];
}else{
    $variable = "";
}

然后,您将使用新的$variable

这很有用,因为如果尝试获取未定义的变量,某些代码将无法工作。

编辑 (感谢GrumpyCrouton):

或简称:

$variable = isset($_POST['variable']) ? $_POST['variable'] : '';

您在第一个(之后= )表示条件,在? 你说的值,如果true和之后的:你说如果值为false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM