我有以下声明用于验证PHP中的空字段,它可以正常工作:
if (isset($_SESSION['logged_in'])) {
if (isset($_POST['room'], $_POST['area'])) {
$room = $_POST['room'];
$area = $_POST['area'];
if (empty($room) or empty($area)) {
$error = 'Required!';
} else {
$query = $pdo->prepare('INSERT INTO apartments (apartments_room, apartments_area) VALUES (?, ?)');
$query->bindValue(1, $room);
$query->bindValue(2, $area);
$query->execute();
header('Location: index.php');
}
}
我现在已经开放了数据库中的更多列,因此在html中还有更多的插入字段来验证。我的问题只是在这种情况下检查多个空字段时如何为验证制定if语句。
所以这段代码不再适用了:
if (isset($_SESSION['logged_in'])) {
if (isset($_POST['room'], $_POST['area'], $_POST['rent'], $_POST['address'], $_POST['floor'], $_POST['city'], $_POST['freeFromDate'])) {
$room = $_POST['room'];
$area = $_POST['area'];
$rent = $_POST['rent'];
$address = $_POST['address'];
$floor = $_POST['floor'];
$city = $_POST['city'];
$freeFromDate = $_POST['freeFromDate'];
if (empty($room) || empty($area) || empty($rent) || empty($address) || empty($floor) || empty($city) || empty($freeFromDate)) {
$error = 'Required!';
} else {
$query = $pdo->prepare('INSERT INTO apartments (apartments_room, apartments_area, apartments_rent, apartments_address, apartments_floor, apartments_city, apartments_freeFromDate) VALUES (?, ?, ?, ?, ?, ?, ?)');
$query->bindValue(1, $room);
$query->bindValue(2, $area);
$query->bindValue(3, $rent);
$query->bindValue(4, $address);
$query->bindValue(5, $floor);
$query->bindValue(6, $city);
$query->bindValue(7, $freeFromDate);
$query->execute();
header('Location: index.php');
}
}
如何在这里制定语法?
谢谢!
答案 0 :(得分:0)
将or
更改为||
:
if (empty($room) || empty($area) || empty($rent) || empty($address) || empty($floor) || empty($city)) {
$error = 'Required!';
答案 1 :(得分:0)
这已经到了脚本的可维护性和可读性差的阶段将开始造成人为错误的阶段。
在脚本顶部创建一个更易于阅读的数组,这样您就不必去寻找脚本了。
$expecteds = array('room'
, 'area'
, 'rent'
,'address'
);
然后失败第一:
foreach($expecteds as $expected){
if(!array_key_exists($expected, $_POST))
exit($expected . ' is required!');
}
//从这里知道预期的变量存在....
答案 2 :(得分:0)
OR表示与|相同用PHP ..
您应该调试变量以检查是否通过了这些
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
如果您执行if语句将失败,因为empty将返回true。
答案 3 :(得分:0)
什么不起作用?一个错误?不是你期望的?不要忘记,如果这些变量中的任何一个都是空的,它将返回错误。
此外,如果您只有100%只需要检查是否为空,那么它就可以了,但是为了将来的证明,您最好编写一个功能来检查它们(imo),然后您可以在以后添加其他检查。 / p>
即
function fnc_room_validate($strRoomValidate)
{
if (strlen($strRoomValidate) < 1)
{
return false;
}
elseif (preg_match("/^[A-z]+$/", $strRoomValidate) != 1)
{
return false;
}
else
{
return true;
}
}
然后在主代码页上
$strCheckRoom = fnc_room_validate($room);
if ($room == false)
{
//do something with $strCheckRoom, etc
}
至少在上面你确保它不是空的你只允许接受的字符(即它们不会输入“£$%JG567”@“等房间等)