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

これは、スクリプトの保守性と可読性が低く、人的エラーが発生し始める段階に達しています。

スクリプトの先頭に読みやすい配列を作成します。これにより、スクリプトを探し回る必要がなくなります。

$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

空がtrueを返すため、ifステートメントを実行すると失敗します。

于 2013-08-10T11:44:35.853 に答える
0

何がうまくいかないのですか?エラー?あなたが期待するものではありませんか?これらの変数のいずれかが空の場合、エラーが返されることを忘れないでください。

また、100% のみが空かどうかを確認する必要がある場合は、そのままで問題ありませんが、将来の証拠として、それらを確認する関数 (imo) を作成してから、後で追加のチェックを追加できます。

すなわち

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 に答える