我编写了一些警报系统。
但是我们不要看系统本身,让我们来看看系统如何知道系统确实向浏览用户发送了警报/错误。
我已经做了一些事情,当你随机去?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_进行测试
答案 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.