0

私は人々が画像を提出することを許可しており、彼らの提出を 1 日に 5 つまでに制限する必要があります。残りの準備が整っているので、SQLコードを作成するためにあなたの助けが必要です。セッションと Cookie に基づくソリューションは使用したくありません。IPベースのソリューションも堅実ではありませんが、私にとっては問題なく、他の2つよりも優れています. このサイトは 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 時間以内に 5 回送信された後、フォームを非表示にする必要があります。最終的なコードがどのように見えるかの例を次に示します。

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>
} 

結論: コードの 2 番目のブロックについて助けが必要であることは明らかです。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;
}
4

2 に答える 2

2

@gurung データベースから変数に値を割り当てるため、使用できませんCOUNT。代わりにこれを使用してください:

$count = $wpdb->get_var('SELECT COUNT(*)...');
if ($count > 5) {
    ...
}
于 2013-11-06T07:54:40.467 に答える
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
   }
于 2013-11-06T07:48:50.500 に答える