0

これらの 3 つの if ステートメントがあり、変数の値に応じて、変数を 1 つの列または別の列に配置します。しかし、何らかの理由で、if ステートメントが false であっても、常に 3 つのうちの 1 つだけを使用します。以下にコードを配置しました。助けてくれてありがとう。

$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);
}

?>
4

3 に答える 3

3
if($value == "Paid" || "Waiting on Payment"){

する必要があります

if($value == "Paid" || $value =="Waiting on Payment"){

スイッチバージョン

     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;
    }
于 2012-05-08T03:24:10.487 に答える
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で回答されています。これは、"Waiting on Payments"、"Waiting on Repairs" などの文字列が常に TRUE と評価されるためです。したがって、$value が "Paid" と等しくなくても、文字列 "Waiting on Payment" は TRUE と評価されます。

OR 演算子 || 2 つのオペランドのいずれかが TRUE に評価される場合、TRUE を返します。

したがって、すべてのifステートメントが TRUE と評価され、if-ifelse ブロックではなく一連のifステートメントがあるため、最後のif条件のコード ブロックが常に実行されているように見えます。

改訂されたコードは次のようになります。


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'";
}

于 2012-05-08T03:41:00.433 に答える
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."'";
于 2012-05-08T03:43:46.593 に答える