选择条件

时间:2018-06-12 20:33:01

标签: php forms

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

<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是指第一种情况。 在将数据发送到数据库之前,我该怎么做才能过滤数据?至少我如何知道数据的状态,是1, 2,还是you didn't choose anything?有意义吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

您需要重新设计开关案例,开关应该是一个可以评估为不同值的变量,案例就是这些值:

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关键字可用作最后一种情况,当没有任何案例与值匹配时,它在交换机案例场景中充当“其他”:

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

答案 1 :(得分:0)

改变这个:

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是假的,任何其他值都是真的。但关键字true实际上只是1。

因此,使用交换机中的$_POST['choose']进行测试时,将值赋值给变量会更安全。现在我们有一个适当的变量来测试,我们可以达到我们的3个测试用例之一。使用三元运算符只是if else语句的简写。

答案 2 :(得分:0)

在您的代码段中,您的交换机使用不正确。它应该是这样的:

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