正常搜尋語法:
<?
$no= $_POST['no'];
if ($_POST['no'])
{
$sql="select * from work where no= '$no'";
}
?>
我的問題:
<?
$no= $_POST['no'];
$no1= $_POST['no1'];
$no2= $_POST['no2'];
$no3= $_POST['no3'];
$no4= $_POST['no4'];
if ($_POST['no'] or $_POST['no1'] or $_POST['no2'] or $_POST['no3'] or $_POST['no4'])
{
$sql="select * from work where no= '$no' and no= '$no1' and no= '$no2' and no= '$no3' and no= '$no4'";
}
?>
正常來說 如果我 no、no1、no2、no3、no4 都有輸入查詢的值的話是可以搜尋出我要的資料~
但我想問的是,假設我只輸入一個 no1 的查詢值的話,其他 no、no2、no3、no4 都是空值沒輸入要查詢的值,會變成查詢不出我要的篩選資料,請問各位大大有沒有更好的寫法可以解決我的問題呢?
拜託了~~~
"select * from work where no= '$no' and no= '$no1' and no= '$no2' and no= '$no3' and no= '$no4'";
這真是太神奇了!傑克
一個欄位...如何可以同時等於5個不同的值?
SELECT * FROM work WHERE no='A' AND no='B' AND no='C' AND no='D' AND no='E'
蠻不簡潔的一個方法,你可以試試
但這方法沒對 POST 進來的資料作檢查,這個要注意
<pre class="c" name="code">
$sql = 'SELECT * FROM work WHERE';
$flag = FALSE;
if(isset($_POST['no']){
$flag = TRUE;
$sql .= ' no = ' . $_POST['no'];
}
if(isset($_POST['no1']){
if($flag){
$sql .= ' AND ';
}
$flag = TRUE;
$sql .= ' no1 = ' . $_POST['no1'];
}
if(isset($_POST['no2']){
if($flag){
$sql .= ' AND ';
}
$flag = TRUE;
$sql .= ' no2 = ' . $_POST['no2'];
}
if(isset($_POST['no3']){
if($flag){
$sql .= ' AND ';
}
$flag = TRUE;
$sql .= ' no3 = ' . $_POST['no3'];
}
if(isset($_POST['no4']){
if($flag){
$sql .= ' AND ';
}
$flag = TRUE;
$sql .= ' no4 = ' . $_POST['no4'];
}
jerry002182大大:
感謝您的參考寫法,後來發現少了一個 ) ,補上之後再搜尋時,好像沒有起作用,檢查了很久好像還是看不出拿裡有問題,小弟初學者請多諒解^^"
我確實少了「)」,修正如下
<pre class="c" name="code">
$sql = 'SELECT * FROM work WHERE';
$flag = FALSE;
if(isset($_POST['no'])){
$flag = TRUE;
$sql .= ' no = ' . $_POST['no'];
}
if(isset($_POST['no1'])){
if($flag){
$sql .= ' AND ';
}
$flag = TRUE;
$sql .= ' no1 = ' . $_POST['no1'];
}
if(isset($_POST['no2'])){
if($flag){
$sql .= ' AND ';
}
$flag = TRUE;
$sql .= ' no2 = ' . $_POST['no2'];
}
if(isset($_POST['no3'])){
if($flag){
$sql .= ' AND ';
}
$flag = TRUE;
$sql .= ' no3 = ' . $_POST['no3'];
}
if(isset($_POST['no4'])){
if($flag){
$sql .= ' AND ';
}
$flag = TRUE;
$sql .= ' no4 = ' . $_POST['no4'];
}
$sql="select * from work where no= '$no' and no= '$no1' and no= '$no2' and no= '$no3' and no= '$no4'";
這條用and表示五個條件都必須成立才能運作,因此你只要改成or,就會變成五個條件只要一個成立就可運作。
msnman大大:
是的 如果我改成 or 是可以滿足我的程式問題,不過變成查詢篩選出來的資料不會是我要的準確資料,所以還是必須使用 and 去篩選我要的資料,導致我的問題出現了,不知道還有沒有更好的方法。
請舉例列出輸出結果。
msnman大大:
列印出來就是沒有任何資料,因為有空值。
$sql="select * from work where no= '$no' and no1= '$no1' and no2= '$no2' and no3= '$no3' and no4= '$no4'";
舉例的題目打錯了!!^^"
$sql = 'SELECT * FROM work WHERE';
if($_POST['no']!=null){
$sql .= ' no = ' . $_POST['no'];
if($_POST['no1']!=null or $_POST['no2']!=null or $_POST['no3']!=null or $_POST['no4']!=null){
$sql .= ' AND ';
}
}
if($_POST['no1']!=null){
$sql .= ' no1= ' . $_POST['no1'];
if($_POST['no2']!=null or $_POST['no3']!=null or $_POST['no4']!=null){
$sql .= ' AND ';
}
}
if($_POST['no2']!=null){
$sql .= ' no2 = ' . $_POST['no2'];
if($_POST['no3']!=null or $_POST['no4']!=null){
$sql .= ' AND ';
}
}
if($_POST['no3']!=null){
$sql .= ' no3 = ' . $_POST['no3'];
if($_POST['no4']!=null){
$sql .= ' AND ';
}
}
if($_POST['no4']!=null){
$sql .= ' no4 = ' . $_POST['no4'];
}
如果你的表單沒有其它不必要的值,那就這樣寫即可:
<pre class="c" name="code">$sql = 'SELECT * FROM work WHERE';
foreach ($_POST as $k => $v){
$sql .= " and $k='" . addslashes($v) . "'";
}
如果你的表單有其它不是用來搜尋的值,那就這樣寫:
<pre class="c" name="code">$finds = array('no', 'no1', 'no2', 'no3', 'no4');
$sql = 'SELECT * FROM work WHERE';
foreach ($_POST as $k => $v){
if (in_array($k, $finds))
$sql .= " and $k='" . addslashes($v) . "'";
}
PS. 請一定要記住:POST 值要檢查!POST 值要檢查!POST 值要檢查!