处理mysql中不需要的表单


Dealing with non required forms in mysqli

我试图从一个表单插入变量到mySQL数据库使用mysqli准备的语句。我遇到的问题是,我的一个变量是不需要的,所以当我不输入任何东西的形式,我得到一个错误。如何正确处理这个变量?我是否需要使用另一份准备好的声明,还是可以保留现有的声明?

动态构建准备好的语句。如果缺少一个字段,就不要包含它。例如,假设您的表单有字段name, ageemail,客户提交了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

获取参数值。

有了@Andrew的答案,他是对的。阐述

当发布一个表单,你可以检查他们是否真的存在或他们是空的,在检查,你可以分配不同的值给他们,以不搞砸你的SQL。

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