处理mysqli中的非必需表单

时间:2016-08-10 06:51:06

标签: php mysqli

我试图使用mysqli prepared语句将表单中的变量插入到mySQL数据库中。我遇到的问题是我的一个变量不是必需的,所以当我没有在表单中输入任何内容时,我得到一个错误。 我该如何正确处理这个变量? 我需要使用不同的预备声明,还是可以保留我的声明?

2 个答案:

答案 0 :(得分:0)

在@ Andrew的回答中,他是对的。详细说明

发布表单时,您可以检查它们是否真的存在,或者它们是否为空,在检查时,您可以为它们分配不同的值,以免弄乱您的SQL。

如果你有HTML5验证,例如必需的,你可以删除它们,但仍然是检查变量是否确实有价值的第一步。

答案 1 :(得分:0)

动态构建预准备语句。如果缺少某个字段,请不要包含该字段。例如,假设您的表单包含字段nameageemail,并且客户提交name='Bo'age=27但没有电子邮件。你可以做到

$columns=['name','email','age'];//all possible columns
$p = &$_POST; //form data, eg: ['name'=>'Bo','age'=>27] email missing
$data=[];//data that will be inserted

foreach($columns as $col){
    //add available data to $data
    if(isset($p[$col])) $data[$col]=$p[$col];
}    
$insertCols = '('. implode(',',array_keys($data)) .')';//result: "(name,age)"    

$insertVals = '('.trim(str_repeat('?,',count($data)),',').')';//result:"(?,?)"
$sql = "INSERT INTO myTable $insertCols VALUES $insertVals";

现在,您可以使用$sql制作预先准备好的语句,并从$data

中获取参数值