2016-05-04 9 views
2

ここでIf-Else条件の問題があります。以下のコードのように、(PHP)Elseが条件内のデータを適切に取得しない場合

if($status == 'New'){ 
    $resultx0 = mysql_query("SELECT * FROM application_data_file WHERE Position_ID = '".$pos_id."' && Application_Status = 'New' OR 'Received' OR 'Checking' "); 
} 
elseif ($status == 'Not qualified'){ 
    $resultx0 = mysql_query("SELECT * FROM application_data_file WHERE Position_ID = '".$pos_id."' && Application_Status = 'Failed' OR 'Not qualified' "); 
} 
elseif ($status == 'No Condition'){ 
    $resultx0 = mysql_query("SELECT * FROM application_data_file WHERE Position_ID = '".$pos_id."' "); 
} 

「新規」および「不適格」の条件は、「application_data_file」テーブルの最初のもののみに適用されます。 "New"条件は "New"のみを取得しますが、条件に入力すると "Received"または "Checking"を取得せず、 "Not qualified"条件は "Not qualified"なしで "Failed"のみを取得します。

私はこれについて考えていません。条件に間違いはありますか?

乾杯。

+0

私は問題がif-elseであるとは思わない。あなたの問題は、SQL SELECT文のWHERE句だと思います。 "OR" Received "は" OR 0 "と評価され、これは" OR FALSE "と等価です。 \ 'application_status \'列は単一の値 'New'と比較されています。残りのステートメント '' OR 'Received' OR 'Checking'はMySQLによって破棄されるでしょう。これは 'OR FALSE OR FALSE'と同等ですので、 – spencer7593

答えて

3

このようにしてみなければなりません

Application_Status = 'New' OR 'Received' OR 'Checking'

正しくありません。

mysql_query("SELECT * FROM application_data_file 
      WHERE Position_ID = '".$pos_id."' 
      AND Application_Status IN ('New','Received','Checking')"); 
+0

が動作します。ありがとうございます。 – gznero

3

MySQLの構文は、これは

Application_Status = 'New' OR Application_Status = 'Received' OR Application_Status = 'Checking'

それとも

Application_Status IN ('New','Received','Checking')

1

SQL文が正しく構成されていません。私の場合は、INを使用してApplication_Statusフィールドを確認することをお勧めします(下記参照)。

$pos_id = mysql_real_escape_string($pos_id); 

if($status == 'New') { 
    $query = "SELECT * FROM application_data_file" 
      . " WHERE Position_ID='" . $pos_id . "'" 
      . " AND Application_Status IN ('New', 'Received', 'Checking')"; 

} elseif ($status == 'Not qualified') { 
    $query = "SELECT * FROM application_data_file" 
      . " WHERE Position_ID='" . $pos_id . "'" 
      . " AND Application_Status IN ('Failed', 'Not qualified')"; 

} else { 
    // Includes the case where $status == 'No Condition' 
    $query = "SELECT * FROM application_data_file" 
      . " WHERE Position_ID='" . $pos_id . "'"; 

} 

$resultx0 = mysql_query($query); 
1

コードをよくお読みください。

NewNot qualified

は、私たちが位置IDをチェックする必要のある2つだけ条件があります。 No Conditionの場合、チェックはありません。

したがって、2つの条件:NewNot qualifiedを追加してください。

位置IDの配列をとり、条件にIN句を追加します。それ以外の場合はアクションはありません。彼らは非推奨となり、セキュリティ上の理由からPHP 7に完全に を削除しているよう

// Initiate a blank array 
$positionIds = array(); 
$status = 'New'; 
if ($status == 'New') { 
    $positionIds[] = 'New'; 
    $positionIds[] = 'Received'; 
    $positionIds[] = 'Checking'; 
} 
else if ($status == 'Not qualified') { 
    $positionIds[] = 'Failed'; 
    $positionIds[] = 'Not qualified'; 
} 
$sql = "SELECT * FROM application_data_file WHERE Position_ID = '".$pos_id.""; 
if (! empty($positionIds)) { 
    $comma_separated = implode("','", $positionIds); 
    $comma_separated = "'".$comma_separated."'"; 
    $sql .= " AND Application_Status IN (" . $comma_separated . ")"; 
} 
$resultx0 = mysql_query($sql); 

mysql_ *関数を使用しないでください。

+0

Application_Statusの文字列は –

+0

です@ダゴン、コメントありがとうございます。私は完全にそれを逃した。私は私の答えを訂正しました。 – Pupil

関連する問題