PHP – 在 input 輸入空白或0時提供SQL的判斷方法 ( isset 與 empty 的問題)

<?
/*
    
    <<判斷input 輸入的數字>>
    
    當我們用SQL判斷區間時,例如
    「select * 
     from table 
     where id between '$start' and '$end' 」
    這種時候,如果使用者在<input name="start">打0
    那麼POST接收時單純用isset 或 empty 判斷都會有問題。如下所示:
    
    —- 1.用isset()的問題—-
    在<input name="start"> 打 0
    PHP判斷時用
    if (!empty($_POST['start'])) {
//執行一些內容….
}
    那麼這樣是無法執行內容的。因為打0在empty($_POST['start'])會得到true
    這會導致使用者明明打0,但程式無法執行!
    
    —- 2.用empty()的問題—-
    在<input name="start"> 打 0
    PHP判斷時用
    if (isset($_POST['start'])) {
//執行一些內容….
}
    對照上面的例子,這樣確實是可以執行內容的;但如果在<input name="start"> 保持空白什麼也不打
    PHP用isset($_POST['start'])判斷可是會得到TRUE喔!
    因為空白在isset()的語意上來說,空白也是被設定過的,當然為真!
    
    
    解決目標!
    當使用者在    
    <input>中不輸入文字    => PHP不執行;
    <input>中輸入空白    => PHP不執行;
    <input>輸入0 => PHP要執行
    
    
    演示如下:
 
*/

if (isset($_POST['OK'])) {
    $start = $_POST['start'];
    $end = $_POST['end'];
    
    //1.先去除前後的空白
    $start    = trim($start);
    $end    = trim($end);
    
    //2.判斷等不等於 "" 囉
    if ($start != "" and $end != "") {

//接著此處可以放一些你可能會想要過濾掉的程式碼,
//例如判斷若輸入字串就出現警告啦,輸入空白出現警告啦之類的,
//我在此就先不理這些,全部字串當成數字處理,所以直接跳到3.

//3.強制轉換為數字型態
$start     = (int)$start;
$end    = (int)$end;



//最後利用SQL語言查詢,就能符合我們的人類邏輯了,echo 看看吧!
echo $SQL = "select * from table where id between '$start' and '$end' ";

}
    else echo "請輸入數字區間!";
    }
    
    
?>
<form method="post" action=""> 
    <div>請輸入要查詢的區間:</div>
    <div>開始:<input name="start" type="text" value=""></div>
    <div>結束:<input name="end" type="text" value=""></div>
    <input name="OK" type="submit" value="查詢">
</form>

發表迴響