构造sql代码以限制表单提交

时间:2013-11-06 06:34:11

标签: php mysql wordpress

我允许人们提交图片,我需要将他们的提交限制在一天不超过5个。我只需要你的帮助来构建sql代码,因为其余的东西都准备好了。我宁愿不使用基于会话和cookie的解决方案。基于IP的解决方案也不是坚如磐石的,但对我而言,它比其他两个更好。只是因为你知道该网站是建立在wordpress上的,我对mysql一无所知。

编辑:我已经尝试在EFFORTS UPDATE中构建下面的代码。请看一下。


这是我做的事:我已经在mysql中有一个用于此功能的表,名为someprefix_limit_uploads。我将在隐藏字段的帮助下记录第一次使用表单的人的ip和日期并将其保存到表单提交数据库中,例如 - <input type="hidden" name="uploader_ip" value="<?php echo $uploader_ip;?>"/>。然后我将使用下面的内容将值插入表中,因为我使用的是wordpress,所以我的代码看起来像这样:

global $wpdb; 
    require_once('../../../wp-load.php');
    $upload_date      = strip_tags($_POST['upload_date']);
    $uploader_ip = strip_tags($_POST['uploader_ip']);
    $table_name = $wpdb->someprefix . "limit_uploads";
    $wpdb->insert( $table_name, array(
    'rec_upload_date' => $upload_date,
    'rec_uploader_ip' => $uploader_ip
    ));

这里我不知道:现在对于包含表单的页面中的代码,我需要将表单包装在if_statement中。基本上,脚本必须在24小时内提交后隐藏表单。以下是最终代码的示例。

global $wpdb;   
$results = $wpdb->get_results("COUNT xyz xyz xyz xyz xyz xyz xyz xyz xyz  ");

if(//there are more than 5 submits from same ip on same day) {

echo "no more than 5 uploads allowed.";

} else {
<form id="upload-images" action="" method="POST"> 
   //contents of the form
</form>
} 

  

底线:现在必须明白我需要帮助第二个   代码块。因为我甚至不确定我应该使用COUNT还是SELECT,   如果是,那么如何。我也会感谢你们的帮助   指出我的方法是否有问题。


努力更新:

我认为sql查询必须是这样的,但缺少一些元素:

SELECT COUNT(*) **missing_some_code_here** 
FROM someprefix_limit_uploads
WHERE rec_uploader_ip = $uploader_ip;
AND rec_upload_date = $upload_date;

然后在我的页面

if (**missing_some_code_here** > 5) {

    echo "no more than 5 uploads allowed.";
    return;
}

2 个答案:

答案 0 :(得分:2)

@gurung您将数据库中的值分配给变量,因此您无法使用COUNT。请改用:

$count = $wpdb->get_var('SELECT COUNT(*)...');
if ($count > 5) {
    ...
}

答案 1 :(得分:1)

查询不需要任何其他内容,只需计数即可,检查您的表名“someprefix_limit_uploads”,不要只复制粘贴所有内容。

  global $wpdb; 
  $count = $wpdb->get_var("SELECT COUNT(*) FROM someprefix_limit_uploads WHERE rec_uploader_ip = $uploader_ip AND rec_upload_date = $upload_date;");
  var_dump($count);
  if($count > 5) {
     //rest of code goes here
   }