【发布时间】:2014-07-02 09:19:27
【问题描述】:
我真的很想知道有人如何将记录添加到我现有的博客评论表中。我正在使用我自己的自定义博客脚本,用户可以在其中对任何特定博客添加评论。我有一个带有博客 ID 的单独评论表。我尝试了几种验证码技术,但没有任何效果。我正在为 mysql 使用 PDO。我也在提交表单之前进行 JavaScript 验证。我不确定他/她是真人还是某些机器人正在这样做。在 1 小时内添加了数千条记录。
我在下面展示我的代码。有人可以帮帮我吗?
<?php
if(isset($_POST['user_comment']))
{
if ($_SESSION['answer'] == $_POST['answer'] )
{
$name = $_POST['name'];
$email = $_POST['email'];
$website = $_POST['website'];
$web = $website;
$comment = addslashes(nl2br($_POST['comment_text']));
$comment =strip_tags($comment);
$id = $article_id;
$ref = $_SERVER["HTTP_REFERER"];
$userip = $_SERVER['REMOTE_ADDR'];
$useragent = $_SERVER['HTTP_USER_AGENT'];
$submit_date = date('Y-m-d H:i:s');
if ((($name) && ($email) && ($comment))) {
$conn = new PDO("mysql:host=$hostname;dbname=$database",$username,$password);
$sql = "INSERT INTO blog_comments (user,email,website,message,date,storyid,userip,useragent,block) VALUES (:user,:email,:website,:message,:date,:storyid,:userip,:useragent,:block)";
$q = $conn->prepare($sql);
$q->execute(array(':user'=>$name, ':email'=>$email, ':website'=>$website, ':message'=>$title, ':date'=>$submit_date, ':storyid'=>$id, ':userip'=>$userip, ':useragent'=>$useragent,':block'=>'1'));
}
}
else
{
?>
<tr><td>
<p style="text-align:center; color:#CC0000; font-size:14px; font-weight:bold; padding-bottom:10px;">Wrong Answer! Please try again!!</p>
</td>
</tr>
<?php
}
}
?>
这是我的验证码:
<?php
session_start();
$digit1 = mt_rand(1,20);
$digit2 = mt_rand(1,20);
if( mt_rand(0,1) === 1 ) {
$math = "$digit1 + $digit2";
$_SESSION['answer'] = $digit1 + $digit2;
} else {
$math = "$digit1 - $digit2";
$_SESSION['answer'] = $digit1 - $digit2;
}
?>
这是 JS 验证:
<script type="text/javascript" language="javascript">
function validate()
{
if( document.getElementById( "name" ).value == ""){
alert("Please enter your name.");
document.getElementById( "name" ).focus();
return false;
}
if( document.getElementById( "email" ).value == ""){
alert("Please enter Your email ID.");
document.getElementById( "email" ).focus();
return false;
}
if( document.getElementById( "comment_text" ).value == ""){
alert("Please enter your comment.");
document.getElementById( "comment_text" ).focus();
return false;
}
if( document.getElementById( "answer" ).value == ""){
alert("Please solve this math.");
document.getElementById("answer").focus();
return false;
}
}
</script>
这是我的表格:
<form action="" method="POST" onSubmit="return validate();">
<table cellpadding="5" cellspacing="5" width="100%">
<tr><td colspan="3">
<input type="hidden" name="id" value="<? print($id);?>">
</td></tr>
<tr>
<td style="font-size:12px; font-weight:bold; width:150px;">Your Name</td>
<td style="width:260px;"><input type="text" name="name" id="name" style="width:250px; height:20px;"></td>
<td style="text-align:left;">Required</td>
</tr>
<tr>
<td style="font-size:12px; font-weight:bold; width:150px;">Your E-mail</td>
<td style="width:260px;"><input type="text" name="email" id="email" style="width:250px; height:20px;"></td>
<td style="text-align:left;">Required</td>
</tr>
<tr>
<td style="font-size:12px; font-weight:bold; width:150px;">Your Website</td>
<td style="width:260px;"><input type="text" name="website" style="width:250px; height:20px;"></td>
<td style="text-align:left;">Optional</td>
</tr>
<tr>
<td style="font-size:12px; font-weight:bold; width:150px;">Your Comment</td>
<td style="width:260px;"><textarea name="comment_text" id="comment_text" style="width:250px; height:100px;"></textarea></td>
<td style="text-align:left;">Required</td>
</tr>
<tr>
<td style="font-size:12px; font-weight:bold; width:150px;">What's <?php echo $math; ?> = </td>
<td style="width:260px;"><input type="text" name="answer" id="answer" style="width:250px; height:20px;"></td>
<td style="text-align:left;">Required</td>
</tr>
<tr>
<td colspan="3" style="text-align:center;">
<input type="submit" class="submit" value="Submit" name="user_comment">
</td></tr>
</table>
</form>
【问题讨论】:
-
也许有人发了一张然后一直按F5?您至少应该添加一个重定向,这样就不会再发生了。你能同时展示你的验证码和 JS 验证吗?
-
JS 验证无法解决这个问题,机器人直接向您的 PHP 脚本发送请求。你确定你的验证码工作正常吗?
-
不!所有 cmets 都是新的,具有不同的 IP。我也在使用验证码和 javascript 验证。因此,如果有人只是重新提交表单,那么他/她会收到错误的验证码错误。
-
是的,我的验证码工作正常。验证码没有问题。
-
@NeerajKumar php 验证在哪里,以防 javascript 被关闭?