$ _GET $ _POST URL覆盖问题PHP

时间:2011-04-19 02:46:57

标签: php forms post get

我正在为我的网站成员开发一个收藏系统,我在发送POST数据时遇到了问题。基本上我想要发生的事情是,会员可以访问comic_profile页面,点击“添加收藏夹”图标,然后刷新页面并说出漫画已被收藏。

我的网址是:http://www.talesstudio.com/comic_profile.php?comicid=3

我的问题是每次点击收藏夹图标时,网址都会变为:http://www.talesstudio.com/comic_profile.php?addfav=Submit 该页面然后抛出错误“MISSING DATA TO RUN”,因为漫画ID没有被重新捕获。

这是最喜欢的图标/表单代码:

 <?php echo "$comicname"; ?> <?php
$sql3 = mysql_query("SELECT * FROM Favorites WHERE comic_id='$comicid' AND user_id='$userid' LIMIT 1");
$count3 = mysql_num_rows($sql3);
if ($count3 < 1) {
    echo '<form action="comic_profile.php?comicid='.$comicid.'&" method="GET">
<input type="button" name="addfav" src="images/addfav.png"></form>';

} else{
    echo 'imagefile';
}

$comicid = ereg_replace("[^0-9]", "", $_GET['comicid']); // filter everything but numbers for security
if ($comicid == "") {
    echo "Added to your favorites.";
    exit();
}

我的SQL / POST代码:

 if( isset($_POST["addfav"]))
  { $sqlfav = mysql_query("INSERT INTO Favorites (user_id, comic_id) VALUES ('$userid','$comicid')");     
     exit();
  }

我可能正在做一些简单而愚蠢的事情,而我却看不到。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

将添加收藏夹表单的方法设置为POST(根据您的isset())。应该这样做。

答案 1 :(得分:0)

您应该将表单更改为method="POST"。这将在帖子正文中发送表单数据,这不会导致URL中的查询字符串发生更改。

此外,如果要修改服务器上的数据,则从不使用GET查询。通常的原因是GET查询通常是机器人/搜索引擎运行,在这种情况下可能会导致将一堆收藏夹添加到您的数据库中。虽然我意识到这不应该发生,因为用户需要登录(大概是?),这仍然是不好的做法 - 使用POST。