2012-06-23 51 views
0

當我嘗試使用「select all options」作爲sql查詢中的值時,發送和接收數據時出現問題。這種方法是正確的還是我做錯了什麼?我也試圖 「*」, 「ALL」, 「%」 和....在WHERE條件不起作用後選擇全部

PHP的 「?」:

SQL = select table1 where name='$selected_options1' and instructor_name='$selected_options2' 


$selected_options1=$_POST['selected_name']; 

$selected_options2=$_POST['selected_instructor_name']; 

HTML:

<INPUT TYPE=checkbox NAME='selected_name' VALUE='Mat'>Mat 
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Ann'>Ann 
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Peter'>Peter 
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Tom'>Tom 
<INPUT TYPE=checkbox NAME='selected_name' VALUE='*'>All names 

<INPUT TYPE=checkbox NAME='selected_name' VALUE='Ron'>Ron 
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Tim'>Tim 
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Greg'>Greg 
<INPUT TYPE=checkbox NAME='selected_name' VALUE='Bob'>Bob 
<INPUT TYPE=checkbox NAME='selected_name' VALUE='*'>All instructors 

現在我的查詢看起來像:

("SELECT * FROM `table1` WHERE instruktor in ('$instruktor1', '$instruktor2', '$instruktor3', '$instruktor4', '$instruktor5', '$instruktor6', '$instruktor7', '$instruktor8', '$instruktor9', '$instruktor10', '$instruktor11', '$instruktor12') AND (instruktor_poczatkowy='$instruktor_poczatkowy1' OR instruktor_poczatkowy='$instruktor_poczatkowy2 
OR instruktor_poczatkowy='$instruktor_poczatkowy3 OR instruktor_poczatkowy='$instruktor_poczatkowy4 OR instruktor_poczatkowy='$instruktor_poczatkowy5 
OR instruktor_poczatkowy='$instruktor_poczatkowy6 OR instruktor_poczatkowy='$instruktor_poczatkowy7 OR instruktor_poczatkowy='$instruktor_poczatkowy8 
OR instruktor_poczatkowy='$instruktor_poczatkowy9 OR instruktor_poczatkowy='$instruktor_poczatkowy10 OR instruktor_poczatkowy='$instruktor_poczatkowy11) 
    AND (klub='$klub1' OR klub='$klub2') order by nazwisko"); 

這仍然不能解決我的問題。你可以在我的評論中看到它。

+0

語法是'SELECT column-list FROM tableName WHERE(conditions)' –

+0

以下所有答案值得關注,我非常感謝。我正在試驗你所有的代碼行...現在我正在努力共同選擇多選/全選,只有部分選擇,如選擇和提交的幾個隨機選項。還要選擇空記錄,如:姓名A,姓名B,姓名C或不指定姓名。而不是做什麼如果我的空的複選框仍然是在查詢中發送零「0」值,如果沒有選擇女巫導致另一個問題。 – user1248182

回答

-1

鑑於查詢:

select table1 where name='$selected_options1' and instructor_name='$selected_options2', 

沒有價值,你可以把$ selected_options2這意味着它應該接受。你應該離開了在這種情況下,where子句的一部分,因此它成爲:

select table1 where name='$selected_options1' 

一般你會因此這與語句的選擇部分開始並添加需要的條件,其中上。

更重要的是,您設計了表單,以便您取回多個值,並且您無法簡單地插入單個值,對嗎?有兩種方法可以用這種約束來查詢sql。無論是這樣的:

where x=a or x=b or x=c 

where x in (a,b,c) 

有有時性能考慮哪種格式選擇,但它們在語義上是等價的。無論哪種情況,您都不能簡單地使用硬編碼的字符串並插入單個值。

+1

Downvote無評論?保持優雅,所以。 – bmm6o

0

SELECT column WHERE name='*'將只會選擇那些字面上是*的名稱。您需要完全放棄條件以選擇所有內容。

SELECT column FROM table 

您還可以使用1(真)爲條件來選擇一切(SELECT column FROM table WHERE 1)。

PHP中的邏輯是這樣的:

if($selected_options1 == '*') { 
    $condition1 = '1'; 
} 
else { 
    $condition1 = "name = '$selected_options1'"; 
} 

if($selected_options2 == '*') { 
    $condition2 = '1'; 
} 
else { 
    $condition2 = "instructor_name = '$selected_options2'"; 
} 

$query = "SELECT column1, column2, etc FROM table1 WHERE $condition1 AND $condition2"; 

記住protect yourself from SQL injection

0

檢查Boxs應該是:

<form action="checkbox-form.php" method="post"> 
Which buildings do you want access to?<br /> 
<input type="checkbox" name="formDoor[]" value="A" />Acorn Building<br /> 
<input type="checkbox" name="formDoor[]" value="B" />Brown Hall<br /> 
<input type="checkbox" name="formDoor[]" value="C" />Carnegie Complex<br /> 
<input type="checkbox" name="formDoor[]" value="D" />Drake Commons<br /> 
<input type="checkbox" name="formDoor[]" value="E" />Elliot House 
<input type="submit" name="formSubmit" value="Submit" /> 
</form> 

您將如何得到的多值...

<?php 
    $aDoor = $_POST['formDoor']; 
    if(empty($aDoor)) 
    { 
    echo("You didn't select any buildings."); 
    } 
    else 
    { 
    $N = count($aDoor); 
    echo("You selected $N door(s): "); 
    for($i=0; $i < $N; $i++) 
    { 
     echo($aDoor[$i] . " "); 
    } 
    } 
?> 

查詢應該是這樣的:

$SQL="select * from table1 where name in (name1,name2,name3)"; 

只是做名字的字符串(以逗號分隔),並從上述替換「1,名稱2,名稱3個」 for循環。

祝你好運。