在前端我正在使用JQuery Validate,我将以下内容传递给后端
data: {
'field1': $("input[name='field1']:checked").val(),
'field2': $("input[name='field2']:checked").val(),
'field3': $("#field3").val(),
'field4' : $("#field4").val(),
'field5' : $("#field5").val(),
'field6' : $("#field6").val()
}
前三个字段是必需的,因此它们将始终具有值。接下来的三个是可选的,因此它们可能没有值。在我的PHP文件中,我为必填字段做了类似的事情
if (!empty($_POST["field1"])) {
$field1 = filter_var($_POST["field1"], FILTER_SANITIZE_STRING);
array_push($inputArray, $field1);
} else{
$errors['field1'] = 'Please select field1';
}
对于我可选的字段
if (!empty($_POST['field4'])) {
$field4 = filter_var($_POST["field4"], FILTER_SANITIZE_STRING);
array_push($inputArray, $field4);
}
到此结束时,我有一个$inputArray
,它可能包含3-6个值,并传递给我的数据库文件。在这里,我正在做这样的事情
$stmt = $dbh->prepare("INSERT INTO database_table(Field1, Field2, Field3, Field4, Field5, Field6) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->bindParam(1, $this->inputArray[0]);
现在对于前三个会很好,但是如果我尝试一个可选元素而不是那个,那么就会抛出错误。
处理这类情况的最佳方法是什么?在PHP文件中,我是否应该总是为可选字段的三个if语句推送一个空值,例如
else {
array_push($inputArray, '');
}
我知道一些我可能会使用的解决方案,只是希望得到其他人如何处理它的意见。
由于
答案 0 :(得分:1)
我发现处理此类问题的最佳方法是动态构建查询。使用关联$inputArray
时,这种方法更容易。因此,而不是做
array_push($inputArray, $field1);
待办事项
$inputArray['field1Name'] = $field1;
替换" field1"每个字段都有适当的值。
这样你可以像这样构建你的查询:
$qry = "INSERT INTO database_table(";
$qry .= implode(',', array_keys($inputArray)); //append a comma separated list of field names.
$qry .= ") VALUES("
$qry .= trim(str_repeat('?,', count($inputArray)), ','); //append ?, for each element in the array and trim the trailing comma
$qry .= ')';
$stmt = $dbh->prepare($qry);
$stmt->execute( array_values($inputArray)); //Execute the query with the values from the input array
通过这种方式,sql查询中的参数数量是动态的,并且基于填写的字段数。
这可以很容易地改为使用命名参数而不是?
,但一般概念是相同的。