我正在運行一個使用qdbs 1.10提供基於PHP的投票數據庫的網站。投票是通過GET實現的,導致機器人偶然對報價進行投票。爲了避免這種情況,我想將GET請求轉換爲POST。將GET轉換爲POST以避免殭屍投票
我是一個完整的PHP新手,一般網頁開發。是否有可能用最少的知識來完成這個機會?是否有任何模式要遵循,或者你有如何做到這一點的提示?
(我改變的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>]
編輯:的想法,以取代與POST GET來this related question。
使用AJAX投票是我想要做的事情,所以當然基於AJAX的解決方案也會很棒。
您能否向我們提供當前的PHP代碼?它應該很容易將它從GET更改爲POST – 2011-01-10 14:40:03
這不是PHP的問題。在HTML代碼中進行GET到POST轉換。去圖 – 2011-01-10 14:46:14
這是一個PHP問題,因爲他必須編輯PHP代碼以讀取$ _POST字段而不是$ _GET字段。 – 2011-01-10 14:51:41