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']

(请原谅比较的顺序;我更喜欢在右侧使用变量进行比较,因为如果您错过 a 会导致解析错误=-- 比让它运行但没有按照您的预期执行要好得多)

于 2013-03-07T19:07:13.557 回答
-1

如果您是新手,最好考虑使用客户端脚本(即 javascript)进行验证,因为使用服务器端验证会简单地延长流程。但是当你面临问题时,这可能会给你解决方案。

当您将页面重定向到 时index.php?alert=name',因此在页面自行加载时,最初不会设置 $alert。当您调用该函数时postcomment(), $alert 会启动,但在系统重定向时会立即销毁。当$alert您随机访问该页面时,它永远不会保留一个值,它显示no error.

于 2013-03-07T19:09:49.700 回答