【发布时间】:2024-01-23 11:53:01
【问题描述】:
我正在运行一个使用 qdbs 1.10 来提供基于 PHP 的带投票报价数据库的站点。投票是通过 GET 实现的,导致机器人意外地对报价进行投票。为避免这种情况,我想将 GET 请求转换为 POST。
我是 PHP 和一般 Web 开发的新手。是否有可能以最少的知识来执行这个机会?有什么可以遵循的模式,或者你有一些关于如何去做的提示吗?
(我正在更改 robots.txt 作为临时解决方案,但这并不能解决根本问题。)
编辑:这似乎是相关的代码部分。这当然不是我自己写的,我只能通过猜测可能发生的事情来跟随它——我从来没有学过一个 PHP 单词。
index.php
if ($_GET['do'] || $_POST['do']) {
switch ($_GET['do']) {
case 'rate':
$sql = "SELECT ip FROM ".$_qdbs[tpfx]."votes WHERE id='".mysql_real_escape_string($_GET['q'])."' AND ip='$ip'";
$a = $db->_sql($sql);
$row = $db->fetch_row($a);
if ($row['ip'] != $ip) {
if ($_GET['r'] == 'good') {
$sql = "UPDATE ".$_qdbs[tpfx]."quotes SET rating=rating+1 WHERE id='".mysql_real_escape_string($_GET['q'])."'";
$a = $db->_sql($sql);
$sql = "INSERT INTO ".$_qdbs[tpfx]."votes (id,ip) VALUES ('".mysql_real_escape_string($_GET['q'])."', '".mysql_real_escape_string($ip)."')";
$a = $db->_sql($sql);
}
elseif ($_GET['r'] == 'bad') {
$sql = "UPDATE ".$_qdbs[tpfx]."quotes SET rating=rating-1 WHERE id='".mysql_real_escape_string($_GET['q'])."'";
$a = $db->_sql($sql);
$sql = "INSERT INTO ".$_qdbs[tpfx]."votes (id,ip) VALUES ('".mysql_real_escape_string($_GET['q'])."', '".mysql_real_escape_string($ip)."')";
$a = $db->_sql($sql);
}
}
header("Location: ".$ref);
break;
}
...
quote_rate.tpl
[<a href="?do=rate&q=<?php echo $q_id;?>&r=good" title="Rate as good"><b>+</b></a>|<a href="?do=rate&q=<?php echo $q_id;?>&r=bad" title="Rate as bad"><b>-</b></a>]
编辑: 将 GET 替换为 POST 的想法来自 this related question。
无论如何,使用 AJAX 投票是我想做的事情,所以当然基于 AJAX 的解决方案也很棒。
【问题讨论】:
-
你能提供给我们当前的PHP代码吗?将其从 GET 更改为 POST 应该很容易
-
这不是 PHP 问题。在 HTML 代码中进行 GET 到 POST 的转换。去图
-
这是一个 PHP 问题,因为他还必须编辑 PHP 代码才能读取 $_POST 字段而不是 $_GET 字段。
标签: php html post get robots.txt