2012-05-08 2 views
0

У меня есть эти утверждения 3 if, которые в зависимости от значения в переменной либо помещают его в один столбец. Но по какой-то причине он всегда использует только одну из 3, даже если оператор if должен быть ложным. Я разместил код ниже. Спасибо за любую помощь.Если заявление не правильно корректно

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

?> 
+1

пожалуйста, напишите смысл полное название –

ответ

1

Предыдущие решения не решают проблему.

Что вам нужно использовать, это 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 
} 

Это отвечает на ваш вопрос.

Но затем возникает следующая проблема, на которую отвечает @https://stackoverflow.com/a/10492151/260034 на «Сумку». Это связано с тем, что строки «Ожидание платежа», «Ожидание при восстановлении» и т. Д. Всегда оцениваются как «ИСТИНА». Так что даже если $ value не равно «Paid», строка «Ожидание при оплате» оценивается как «ИСТИНА».

Оператор OR || возвращает TRUE, если любой из двух операндов оценивается как TRUE.

Таким образом, все ваши если заявления вычисляться в TRUE, и поскольку у вас есть куча , если это заявления и не если-IfElse блок, блок кода в вашей последней если условия кажется быть который всегда выполняется.

Пересмотренный кодекс будет что-то вроде,

 

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

что можно использовать что-то другое вместо 3-х утверждений или это самая практичная душа в этой ситуации. – Matthew

+0

@Matthew: Вы можете использовать инструкцию 'switch', я написал ответ для этого. – ccKep

+0

спасибо за это – Matthew

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; 
    } 
+0

как только вы получите 3 я обычно использую случай \ переключатель как немного чище –

+0

+1 Это правильный ответ. – nickb

-1

Попробуйте запустить этот небольшой тест и выяснить, в чем проблема :)

$var = 'Hello'; 
if ($var == 'World' || 'Empty') 
{ 
    echo 'What are you doing here?!'; 
} 

Как вы уже могли догадаться - строка получает echo`d. Чтобы исправить это, вы должны добавить как «Мир», так и «Пусто» в пару или скобки. Например. -

$var = 'Hello'; 
if ($var == ('World' || 'Empty')) 
{ 
    echo 'What are you doing here?!'; 
} 

Я надеюсь, что помогает

0

я знаю, что это не по теме, но есть ли другой способ сделать это без использования 3 лица, если заявление? - Мэтью

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."'"; 
Смежные вопросы