函数进程后变量未定义/更新?

时间:2013-03-07 18:52:47

标签: php

我编写了一些警报系统。

但是我们不要看系统本身,让我们来看看系统如何知道系统确实向浏览用户发送了警报/错误。

我已经做了一些事情,当你随机去?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_函数的故事开始,我理解&amp;我将使用PDO,但我目前正在使用mysql_进行测试

2 个答案:

答案 0 :(得分: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']

(请原谅比较的顺序;我更喜欢在右边有变量进行比较,因为如果你错过了=会导致解析错误 - 比让它运行要好得多而不是你做什么期望)

答案 1 :(得分:-1)

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

当您将页面重定向到index.php?alert=name'时,因此当页面加载自身时,永远不会设置$ alert。当您调用函数postcomment()时,会启动$ alert,但在系统重定向时会立即销毁。由于$alert在您随机访问该网页时从不持有值,因此会显示no error.