0

警告システムをコーディングしました。

しかし、システム自体を見るのではなく、システムが実際にアラート/エラーをブラウジングしているユーザーに送信したことをシステムがどのように認識するかを見てみましょう。

?alert=name にランダムにアクセスすると、エラーが発生せずに「エラーなし」と表示されるようにしました。ただし、システムが ?alert=name に移動するように要求すると、エラーがエコーされます。

投稿の処理方法

function postComment() {
    if (!empty($_POST['name']) || !empty($_POST['comment'])) {
        $comment = mysql_real_escape_string(htmlentities($_POST['comment']));
        $guest = mysql_real_escape_string(htmlentities($_POST['name']));
    }
    $guestId = 1;
    if (empty($guest)) {
        $alert = 1;
        return header('location: index.php?alert=name');
    }
    if (empty($comment)) {
        $alert = 2;
        return header('location: index.php?alert=comment');
    }
    if (!isset($_COOKIE['alreadyPosted'])) {
        mysql_query("INSERT INTO `comments` (`comment_guest`, `guest_id`, `comment`, `comment_date`, `comment_time`) VALUES ('$guest', '$guestId', '$comment', CURDATE(), CURTIME())") or die(mysql_error());
        header('Location: index.php?action=sucess');
        setcookie(alreadyPosted, $cookieId+1, time() + 60);
        } else {
            $alert = 3;
            header('location: index.php?alert=delay');
        }
}

ご覧のとおり、ユーザーが本当にそのエラーを受け取っているかどうかを確認するために、$alert をエラー番号に設定します。

そして、彼がエラーを受け取っているかどうかを確認するには、これを使用します:

if (isset($_GET['alert']) == 'name') {
    if ($alert == 1) {
        echo 'hai';
    } else {
        echo 'No errors';
    }
}

なぜ私がこのようにしているのか疑問に思うでしょう..投稿に1つの機能を使用し、投稿機能がフォームの下にあり、アラートをフォームに表示したいからです。

問題:

変数は、関数の実行時に想定される数値に設定されないか、または..何かがそれをブロックしています..わかりません..

私の推測:エラーのチェックは、変数が設定される前に postComment 関数まで行われるのでしょうか?

<?php
    if (isset($_GET['alert']) == 'name') {
        if ($alert == 1) {
            echo 'hai';
        } else {
            echo 'No errors';
        }
    }
    ?>

<form action="index.php" method="POST">
<input type="text" name="name" placeholder="Your name here" class="field">
<textarea class="textarea" name="comment" placeholder="Your comment here..."></textarea>
<input type="submit" name="send" class="blue_button" value="Post Comment">
</form><a href="#"><input type="submit" name="" id="margin" class="blue_button" value="See all messages"></a>
<br />
<?php
//Show the comments
    showComments();

    if (isset($_POST['send'])) {
        postComment();
    }

    if (isset($_GET['delete']) == "comment"){
        deleteComment();
    }

    echo '<br />';

?>

もしそうなら、解決策は何ですか?ありがとう!

mysql_ 関数の話から始めないでください。了解しました。代わりに PDO を使用しますが、現時点ではテスト目的で mysql_ を使用しています。

4

2 に答える 2

0

問題は、エラーでリダイレクトしているため、$alert変数が引き継がれないことです。

この問題を解決するには、アラート タイプを$_GETパラメーターに追加します。

function postComment()
{

  // ...

  if (empty($guest))
  {
    header('location: index.php?alert=name&alert_type=1');
    exit;
  }

  // ...

}

そして、エラーを確認すると:

if (isset($_GET['alert']) && 'name' == $_GET['alert'])
{

  if (isset($_GET['alert_type']) && '1' == $_GET['alert_type'])
  {
    echo 'hai';
  }

  else
  {
    echo 'No errors';
  }

}

ここでエラーを修正したことにも注意してください。

isset($_GET['alert']) == 'name'

それはあなたが思っていることではありません。あなたが望むものは:

isset($_GET['alert']) && 'name' == $_GET['alert']

(比較の順序を許してください。変数を比較の右側に配置することをお勧めします。これは、変数を実行しないと解析エラーが発生するためです。=実行しても期待どおりに動作しないよりははるかに優れています)

于 2013-03-07T19:07:13.557 に答える
-1

初心者の場合は、サーバー側の検証を使用するとプロセスが長くなるため、検証にクライアント側のスクリプト (viz javascript) を使用することを検討することをお勧めします。しかし、あなたが問題に直面しているので、これはあなたに解決策を与えるかもしれません.

ページを にリダイレクトしているindex.php?alert=name'ため、ページが読み込まれたときに $alert が最初に設定されることはありません。関数を呼び出すとpostcomment()、 $alert が開始されますが、システムがリダイレクトするとすぐに破棄されます。そして、$alertランダムにページにアクセスしたときに値を保持しないため、次のように表示されますno error.

于 2013-03-07T19:09:49.700 に答える