2014-11-24 86 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');