我想将表单数据提交到数据库中,但首先它应该在插入之前通过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
?有意义吗?
提前致谢。
答案 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
。