我有这3个if语句,它们取决于变量中的值将把它放入一列或另一列。但由于某种原因,即使if语句应该为false,它也总是只使用3中的一个。我在下面放了代码。谢谢你的帮助。
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
// error happened
print(0);
}
mysql_select_db('test');
// sanitize the value
$value = mysql_real_escape_string($_GET['uname']);
$id = mysql_real_escape_string($_GET['id']);
if($value == "Paid" || "Waiting on Payment"){
$sql = "UPDATE test SET payment='$value' WHERE id='$id'";
}
if($value == "Repaired" || "Waiting on Repairs"){
$sql = "UPDATE test SET repair='$value' WHERE id='$id'";
}
if($value == "With Student" || "Awaiting Pickup"){ //Always uses this one for somereason unknown to me..
$sql = "UPDATE test SET returned='$value' WHERE id='$id'";
}
// start the query
// check if the query was executed
if(mysql_query($sql, $link)){
// everything is Ok, the data was inserted
print(1);
echo $sql;
} else {
// error happened
print(0);
}
?>
答案 0 :(得分:3)
if($value == "Paid" || "Waiting on Payment"){
应该是
if($value == "Paid" || $value =="Waiting on Payment"){
SWITCH版本
switch ($value) {
case 'Paid':
case 'Waiting on Payment'
$sql = "UPDATE test SET payment='$value' WHERE id='$id'";
break;
case 'Repaired':
case 'Waiting on Repairs':
$sql = "UPDATE test SET repair='$value' WHERE id='$id'";
break;
case 'With Student':
case "Awaiting Pickup":
$sql = "UPDATE test SET returned='$value' WHERE id='$id'";
break;
}
答案 1 :(得分:1)
以前的解决方案无法解决问题。
您需要使用的是 if 之后的 if-else 块。
if(conditionA is true){
//do taskA
}
else if(conditionB is true){
//do taskB
}
else if(condition is true){
//do taskC
}
else {
//do taskD
}
这回答了你的问题。
但接下来的问题是由“A Bag”回答@ https://stackoverflow.com/a/10492151/260034。这是因为“等待付款”,“等待维修”等字符串总是被评估为TRUE。因此,即使$ value不等于“付费”,字符串“Waiting on Payment”也会评估为TRUE。
OR运算符||如果2个操作数中的任何一个计算为TRUE,则返回TRUE。
因此,所有 if 语句都评估为TRUE,并且因为你有一堆 if 语句而不是if-ifelse块,所以你最后的代码块< em>如果条件似乎是一直在执行的条件。
修改后的代码类似于
if($value == "Paid" || $value == "Waiting on Payment"){
$sql = "UPDATE test SET payment='$value' WHERE id='$id'";
}
else if($value == "Repaired" || $value == "Waiting on Repairs"){
$sql = "UPDATE test SET repair='$value' WHERE id='$id'";
}
else if($value == "With Student" || $value == "Awaiting Pickup"){
$sql = "UPDATE test SET returned='$value' WHERE id='$id'";
}
答案 2 :(得分:0)
我知道这不是主题,但有没有其他方法可以在不使用3个if语句的情况下完成此操作? - 马修
switch($value)
{
case "Paid":
case "Waiting on Payment":
$column = "payment";
break;
case "Repaired":
case "Waiting on Repairs":
$column = "repair";
break;
case "With Student":
case "Awaiting Pickup":
$column = "returned";
break;
default:
die("TODO: Error handling for unknown value: ".$value);
}
$sql = "UPDATE test SET ".$column." = '".$value."' WHERE id='".$id."'";
答案 3 :(得分:-1)
尝试运行这个小测试并找出问题所在:)
$var = 'Hello';
if ($var == 'World' || 'Empty')
{
echo 'What are you doing here?!';
}
正如您可能已经猜到的那样 - 字符串会被回显出来。要解决此问题,您必须在一对或多个括号中添加“世界”和“空”。例如。 -
$var = 'Hello';
if ($var == ('World' || 'Empty'))
{
echo 'What are you doing here?!';
}
我希望有帮助