2014-11-24 107 views
6

檢查POST變量是否已設置的最有效方法是什麼?檢查變量是否設置

例如,我從收集10個變量,如果它們設置我想將這些數據保存在第2頁。如果不是,我想分配'不可用'。

我目前使用if !empty,但它似乎必須有一個更容易/更有效的方法,我很新的PHP,所以任何建議表示讚賞。

示例代碼;

if (!empty($_POST["book"])) { 
    $book= $_POST['book'];  
}else{ 
    $book= 'not available'; 
} 

if (!empty($_POST["author"])) { 
    $author = $_POST['author'];  
}else{ 
    $author= 'not available'; 
} 

if (!empty($_POST["subtitle"])) { 
    $subtitle= $_POST['subtitle']; 
}else{ 
    $subtitle= 'not available'; 
} 

etc... 
etc... 
etc... 
+0

你知道isset函數嗎?但請注意,可以同時設置一個變量並將其清空:$ a =「」是空的並且設置爲 – Serpes 2014-11-24 16:47:36

+0

@Series yes,但是它是相同的主體嗎? – 2014-11-24 16:48:22

+1

他們給你不同的結果,因爲我之前說過 – Serpes 2014-11-24 16:50:13

回答

9

使用循環和變量變量。

$fields = array('author', 'book', 'subtitle', ....); 
foreach($fields as $field) { 
    if (isset($_POST[$field])) { 
     $$field = $_POST[$field]; // variable variable - ugly, but gets the job done 
    } else { 
     $$field = 'not available'; 
    } 
} 
+0

很好的迭代,但'isset!==!empty' – 2014-11-24 16:51:57

+0

因爲你有'$ fields'數組,所以你限制了你的循環到預期的條目,因此避免了不良請求的潛在問題。 +1 – TecBrat 2014-11-24 16:52:11

+1

是的,但OP表示「SET」,而不是「不空」。無論如何,empty()都是一個無用函數。空(0)是真實的 - 這使得處理庫存/金錢/數字的任何代碼都容易受到漏報。應該被稱爲「is_castable_to_false()」。 – 2014-11-24 16:53:01

0

通常我用這個輔助函數:

function defa($array, $key, $default){ 
    if(isset($array[$key])){ 
     return $array[$key]; 
    }else{ 
     return $default; 
    } 
} 

用法:

$book = defa($_POST, 'book', 'Not available'); 

或者,你可以,如果你只使用$ _POST數組簡化:

function post_defa($key, $default){ 
    if(isset($_POST[$key])){ 
     return $_POST[$key]; 
    }else{ 
     return $default; 
    } 
} 

用法:

$book = post_defa('book', 'Not available');