私の問題は次のとおりです。SQLテーブルをフィルタリングするために使用される一連の入力があります。 1つの "フィルタ"を使用すると、私のコードは正常に動作しますが、複数の状態(つまり$状態と$キーワード)を使用しようとすると、1つのフィルタしか使用できなくなります。この場合、$状態のみが使用されます。 BE AWARE、以下のコードでは、単純な文字列を使用して(疑似)SQL文がどのように見えるかをテストしています。私は1つ、または "フィルタ"の任意の組み合わせが必要です。私はif文が早期に本当に戻ってくると感じていますか?または多分ちょうど構造が間違っているPHP SQLテーブルをフィルタリングするときにIf文が機能しない
HTML:
<form id="ask-topics" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
<div>
<input id="all" type="radio" name="opt" value="all" /><label for="all">ALL documents</label>
<input id="new" type="radio" name="opt" value="new"/><label for="new">NEW documents</label>
</div>
<div>
<input id="keywords" type="text" class="text-box" name="keywords" placeholder="Type keywords..." />
</div>
<div>
<input id="conn" type="checkbox" name="state_chk[0]" class="state-chk" value="CT" /><label for="conn">Conn.</label>
<input id="nh" type="checkbox" name="state_chk[1]" class="state-chk" value="NH"/><label for="nh">N.H.</label>
<input id="nj" type="checkbox" name="state_chk[2]" class="state-chk" value="NJ" /><label for="nj">N.J.</label>
<input id="ny" type="checkbox" name="state_chk[3]" class="state-chk" value="NY"/><label for="ny">N.Y.</label>
<input id="vt" type="checkbox" name="state_chk[4]" class="state-chk" value="VT" /><label for="vt">VT</label>
</div>
<div>
<input name="submit" class="button-link" type="submit" value="submit" />
</div>
PHP/SQL(疑似)
if (isset($_POST['submit'])){
$keyword = $_POST['keywords'];
$states = $_POST['state_chk'];
$doc_opt = $_POST['opt'];
$query_filter = "";
$new_query = "Select `some colunms`
FROM `this_table`
LEFT JOIN this_other_table
ON this_other_table.column = this_table.categoryid"; // Add WHERE/ORDER BY after
if ($states){
$query_filter = " A WHERE statement to get state specific documents";
}
elseif($keyword){
$query_filter = "a WHERE statemenrt to filter keywords";
}
elseif($doc_opt == "new"){
$query_filter = " an ORDER BY statement to show only new documents";
}
// USING MULTIPLE FILTERS
elseif($keyword && $doc_opt == "new"){
$query_filter = " a WHERE and ORDER BY statement for getting keywords and new documents";
}
elseif($doc_opt == "new" && $states){
$query_filter = " a WHERE and ORDER BY statement for getting state specific docs and new docs";
}
elseif($keyword && $states){
$query_filter = " a WHERE statement for getting keywords and state specific docs";
}
else{
$query_filter = " a generic WHERE AND ORDER BY statement";
}
echo $new_query.=$query_filter;
}
UPDATED PHP:
// CHECK FOR MULTIPLE FILTERS FIRST!
if ($keyword && $doc_opt == "new" && $states){
$query_filter = " a WHERE/ORDER BY statemenrt to filter all three cases";
}
elseif($keyword && $doc_opt == "new"){
$query_filter = " a WHERE/ORDER BY statemenrt to filter keywords and new documents";
}
elseif($doc_opt == "new" && $states){
$query_filter = " a WHERE/ORDER BY statemenrt to filter new documents by specific states";
}
elseif($keyword && $states){
$query_filter = " a WHERE statemenrt to filter keywords and specific states";
}
elseif($doc_opt == "new" && $states){
$query_filter = " a WHERE/ORDER BY statemenrt for getting state specific new documents";
}
elseif($keyword && $states){
$query_filter = " a WHERE statement for getting keywords in state specific documents";
}
// IF NO MULTIPLE CASES CHECK FOR INDIVIDUAL CASES SECOND!
elseif ($states){
$query_filter = " A WHERE statement to get state specific documents";
}
elseif ($keyword){
$query_filter = "a WHERE statement to filter keywords";
}
elseif ($doc_opt == "new"){
$query_filter = " an ORDER BY statement to show only new documents";
}
// IF NO FILTER INPUTS WERE USED GET A GENERIC SET OF RESULTS LAST!
else{
$query_filter = " a generic WHERE AND ORDER BY statement";
}
1つのフィルタ - 'WHEREフィルタ' 2つのフィルタ - 'WHERE filter1 AND filter2' - あなたのコードはこのフォーマットに従いません。 – Hogan
elseifを使用する場合、前のステートメントの条件が満たされている場合、elseifステートメントには決して到達しません。 –