我有一个功能正常的表单页,用户可以根据用户名更新其邮政编码,并将其保存为会话变量。安全验证5位数值的php表单字段
除了此新功能验证邮政编码以外的所有工作。我有html5模式,因此如果他们输入4位数字,它会提示他们遵循5位数字格式。然而,我需要在服务器端安全地进行验证。
我选择了正则表达式来匹配0到9之间的5个数字,并且我将它嵌套在if语句中如果我输入123作为邮政编码,它仍然可以成功提交
显然,我只需要提交它是否是5位数字,否则打印出错信息。我想知道,如果它的东西,在我的结构或语法
下面的代码,感谢您的帮助:
if (isset($_SESSION['missingZipUser'])) {
if(!preg_match("/^[0-9]{5}$/", $_POST['zip'])) {
echo "The ZIP code must be a 5-digit number.";
}else{
//Query for updating main table first
$sql = " UPDATE " . table. "
SET zip= ?
WHERE uname ?";
$stmt = odbc_prepare($connect, $sql);
$success = odbc_execute($stmt, array($_POST['zip'],
$_SESSION['missingZipUser']));
//Query for updating both fields in secondary table
$sql2 = " UPDATE " . table. "
SET zip1= ?, zip2= ?
WHERE uname= ?";
$stmt2 = odbc_prepare($connect, $sql2);
$success2 = odbc_execute($stmt2, array($_POST['zip'], $_POST['zip'],
$_SESSION['missingZipUser']));
}
}
UPDATE 与下面的一些注释相反,更新代码仍然将信息传递成功。
您正在回应一条错误消息,但仍然插入到数据库中。你可能想要一个'else'。 – smarx
啊,谢谢。不能相信我错过了这一点。我添加了它,但是如果我输入123,它仍会更新数据库,并且无论如何给出我的成功消息 –
您的逻辑也是向后的。应该是'if(!preg_match ...' – smarx