0

我有以下语句用于验证 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');

    }
}

如何在这里制定语法?

谢谢!

4

4 回答 4

0

什么不起作用?一个错误?不是你所期望的?不要忘记,如果这些变量中的任何一个为空,它将返回错误。

此外,如果您 100% 只需要检查是否为空,那么就可以了,但是为了将来的证明,您最好编写一个函数来检查它们(imo),然后您可以稍后添加额外的检查。

IE

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'@”)

于 2013-08-10T12:02:38.240 回答
0

更改or||

if (empty($room) || empty($area) ||  empty($rent) ||  empty($address) ||  empty($floor) ||  empty($city)) {
$error = 'Required!';

http://php.net/manual/en/language.operators.logical.php

于 2013-08-10T11:32:08.460 回答
0

这已经到了脚本的可维护性和可读性差将开始产生人为错误的阶段。

在脚本顶部创建一个更易于阅读的数组,这样您就不必四处寻找脚本。

$expecteds = array('room'
, 'area'
, 'rent'
,'address'
);

然后先失败:

foreach($expecteds as $expected){

if(!array_key_exists($expected, $_POST))
 exit($expected . ' is required!');

}

// 从这里你知道预期的变量存在......

于 2013-08-10T11:44:35.490 回答
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。

于 2013-08-10T11:44:35.853 回答