Php 处理mysqli中的非必需表单

Php 处理mysqli中的非必需表单,php,mysqli,Php,Mysqli,我试图使用mysqli prepared语句将表单中的变量插入mySQL数据库。我遇到的问题是,我的一个变量不是必需的,因此当我没有在表单中为它输入任何内容时,我会得到一个错误。 如何正确处理这个变量? 我是否需要使用另一份准备好的声明,或者我是否可以保留现有的声明 用@Andrew的回答,他是对的。详述 发布表单时,您可以检查它们是否确实存在,或者是否为null。检查后,您可以为它们分配不同的值,以免弄乱SQL 如果你有HTML5验证,比如必需的,你可以删除它们,但是仍然要做第一步检查变量是否

我试图使用mysqli prepared语句将表单中的变量插入mySQL数据库。我遇到的问题是,我的一个变量不是必需的,因此当我没有在表单中为它输入任何内容时,我会得到一个错误。 如何正确处理这个变量?
我是否需要使用另一份准备好的声明,或者我是否可以保留现有的声明

用@Andrew的回答,他是对的。详述

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


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

动态构建你准备好的语句。如果缺少字段,请不要将其包括在内。例如,假设您的表单有
name
age
email
字段,客户提交
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

中获取参数值,发布您的代码和错误。您可以保留现有的代码和错误,检查所述字段中是否存在任何内容,或者将这些字段从查询中删除(假设表中有这些字段的默认值)或者,如果这些字段为空,则在查询中指定一些默认值。仅供参考,
null
是一个非常好的值,可以在准备好的查询中用作占位符值。PHP的关键字为
null
。它实现了在准备好的查询中绑定变量所期望的功能。i、 e.不要更改查询-只需在空字段和非必填字段中使用
null
。由于表单有两个部分,在两个不同的页面上,我的一些值保存在$\u会话变量中。我应该将所有内容移动到$\u会话数组还是添加到post中?如果是post,我将如何操作?它只是表单中的一个隐藏字段吗?@JoshuaGertner我刚刚展示了一个简单的应用程序。你需要使它适应你的需要。例如,您可以通过在循环中添加另一个条件,将其他来源的变量直接添加到
$data
:if(isset($\u SESSION[$col]))$data[$col]=$\u SESSION[$col])感谢您的帮助。