0

PHPのチュートリアルを行っています。私はCRUDレッスンの更新セクションにいて、検証スクリプトに取り組んでいます。私はコードに正確に従っています...私は思いますが、それでも正しく機能していません。問題は次のとおりです。[送信]をクリックしてメニュー名フィールドを空にして検証をテストしようとすると、エラーなしで処理され、空のリスト項目でナビゲーションが更新されますか?私はコードを調べましたが、すべて正しいようですが、これは非常に新しいため、問題は簡単に見落とされます。

コードは次のとおりです。

if(isset($_POST['submit'])) {
    $errors = array();

    $required_fields = array('menu_name', 'position', 'visible');   
    foreach($required_fields as $fieldname) {
        if(!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0) ) {
            $errors[] = $fieldname;
        }
    }

    if(empty($errors)) {
        //Perform Update
        $id = mysql_prep($_GET['subj']);
        $menu_name = mysql_prep($_POST['menu_name']);
        $position = mysql_prep($_POST['position']);
        $visible = mysql_prep($_POST['visible']);

        $query = "UPDATE subjects SET
                    menu_name = '{$menu_name}',
                    position = {$position},
                    visible = {$visible} WHERE id = {$id}";

        $result = mysql_query($query, $connection);

        if(mysql_affected_rows() == 1){
            // success
            $message = "Subject was sucessfully updated"; 
        }else{
            $message = "The subject update failed.";
            $message .= "<br />" . mysql_error();
        }
    }else{
        //error occured
        $message = "There were " . count($errors) . " errors in the form.";
    }
} // end if(isset($_POST['submit']) )
?>

そして本文からのコード:

<h2>Edit Subject: <?php echo $sel_subject['menu_name']; ?></h2>
<?php 
    if(!empty($message)){
        echo "<p class=\"message\">" . $message . "</p>";
    }
?>
<?php
    if(!empty($errors)){
        echo "<p class=\"errors\">";
        echo "Please review the folowing fields: <br />";
        foreach($errors as $error){
            echo "-" . $error . "</p>";
        }
    }
?>

(empty($ _ POST [$ fieldname])を(empty($ _ POST ['menu_name']))に変更すると、エラーが発生しますが、それらは正しい位置と表示フィールド用です...?ありますか?見えない文字が省略されています。これらのばかげた種類の間違いを防ぐために、ほとんどコピーアンドペーストを行っています。注:位置と表示の検証は機能することに注意してください...私は...それらを残すことはできないのでとにかくフィールドが空白になっている方法を教えてください...

どんな助けでも大歓迎です。

4

1 に答える 1

2

エラーはここにあります:

$_POST[$fieldname] != 0

0 は false であるため、空の文字列 = 0 です。したがって、ifステートメントでは、それが空であるか(そうである)、かつ0に等しくない(そうである)かどうかを言います。

あなたができることは

  1. !=0 ステートメントを完全に削除すると、それをチェックする壮大な仕事が行われます。
  2. オプションとして "0" を受け入れたい場合は、正しい演算子: !=="0" を使用してください。

3 つの equals または !== を使用すると、型に対して検証されます。0===0、および 0==false、"0"==0、"0"==false、および false===false、しかし 0!==false、0!=="0" および "0 "!==偽。それが理にかなっていることを願っています。

編集

一連のテストで、これをもう少し地面に落としてみましょう。

$a='';
$b="0";
if(empty($a))
    echo'$a is empty<br/>';
if(empty($b))
    echo'$b is empty<br/>';
if($a!=0)
    echo'$a does not equal 0/false<br/>';
if($b!=0)
    echo'$b does not equal 0/false<br/>';
if($a!==0)
    echo'$a does not equal integer 0<br/>';
if($b!==0)
    echo'$b does not equal integer 0<br/>';
if($a!=="0")
    echo'$a does not equal string 0<br/>';
if($b!=="0")
    echo'$b does not equal string 0<br/>';

上記の出力は次のようになります

$a is empty
$b is empty
$a does not equal integer 0
$b does not equal integer 0
$a does not equal string 0

結論: $a==$b , $a!==$b. $aAND$b==to0==tofalseであり、どちらも整数ではなく、どちらも文字列であり、空の文字列はその文字を含む文字列と同じではありません0

$_POST[$fieldname]!=0に変更$_POST[$fieldname]!=="0"

于 2012-08-16T17:52:39.113 に答える