我有一个包含十几个字段的基本表单(例如3个):
<input type="text" name="user_first_name" class="form-control" pattern="[A-Za-z-]+" required />
<input type="text" name="user_last_name" class="form-control" pattern="[A-Za-z-]+" required />
<input type="tel" name="user_phone" class="form-control" />
...
只有电话号码可以为空,姓氏和名字是必填项,并且只能包含字母和破折号(技术限制是由旧的ERP施加给我的)
我创建了一个函数来清理我的所有字段,如下所示:
public function sanitizeInfo($user_first_name, $user_last_name, $user_phone) {
$user_first_name = preg_replace('/[^A-Za-z-]/', '', $user_first_name);
$user_last_name = preg_replace('/[^A-Za-z-]/', '', $user_last_name);
$user_phone = (isset($user_phone) and !empty($user_phone)) ? preg_replace('/[^A-Za-z0-9+-.)(]/', '', $user_phone) : NULL;
$array = array(
"first_name" => $user_first_name,
"last_name" => $user_last_name,
"phone" => $user_phone
);
return $array;
}
在我的PHP脚本中,我首先进行了检查:
$fields = array('user_first_name', 'user_last_name');
$error = FALSE;
foreach ($fields as $fieldname) {
if(!isset($_POST[$fieldname]) or empty($_POST[$fieldname])) {
$error = TRUE;
$message = 'err';
}
}
if (error === TRUE) {
echo "Error !"
} else {
$info = sanitizeInfo($_POST['user_first_name'], $_POST['user_last_name'], $_POST['user_phone']);
...
** QUERY **
}
我想在将其发送到数据库之前检查字段是否为空(只有电话号码可以为NULL)
但是现在的问题是我不知道我的非必需字段是否存在,尤其是我的sanatizeInfo
函数存在问题,因为它允许将空字段放入数据库中 >
示例:
用户输入“ !!-”作为名字,sanitizeInfo
函数返回“”,因为preg_replace
删除了这些字符
如何避免这种情况?
答案 0 :(得分:0)
您需要做的就是在检查空白字段之前调用函数sanitizeInfo
,并用简单的foreach
函数替换array_search
循环。
这可以实现如下:
$fields = array('user_first_name', 'user_last_name');
$error = FALSE;
$values = sanitizeInfo($fields[0], $fields[1], @$fields[2]);
$arSear = array_search('', $values);
if ($arSear !== FALSE && $arSear != 'phone'){
$error = TRUE;
$message = 'The field `'.$arSear.'` is empty.';
}
if ($error) {
echo 'Error: '. $message;
} else {
// QUERY ....
}
出于一致性考虑,我建议始终在php中使用&&
和||
,而不是AND
和OR
。这将防止有关优先级的任何绊倒。 'AND' vs '&&' as operator