2017-01-17 16 views
0

私はラジオ局の曲要求フォームを作成しようとしていますが、スパム送信は望ましくありません。私は非常にシンプルなフォームなどを行ってきましたが、私はそれをそうしようとしています...訪問者が曲をリクエストすると、そのリクエストはデータベースに保存され、DJはそれを確認できます。同じ訪問者のリクエストを再び許可するには、DJがPlayedをクリックする必要があります。そうしないと、同じIPが再度リクエストすることはできません。訪問者のIPアドレスがMySQLに登録されていることを確認してください

問題は、IPが正常に機能していないかどうかを確認することです。ここで

コード、それ多分簡単に修正...事前に

<?php include "db.php"; ?> 
<!DOCTYPE html> 
<html> 
<head> 
<title></title> 
</head> 
<body> 
<h3> Request a song</h3> 
<? 
$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']); 
$query = "SELECT * FROM requests WHERE ip='". $_SERVER['REMOTE_ADDR'] ."'"; 
$result = mysql_query($query); 

if (mysql_num_rows($result) > 0) { 
    echo "<form action='thankyou.php' method='post'> 
    Your Name:<br> 
    <input type='text' name='name' required><br> 

    Artist: 
    <input type='text' name='artist' required><br> 

Song:<br> 
    <input type='text' name='song' required><br> 

Message:<br> 
    <input type='text' name='message' required><br> 
<input type='submit' value='Submit'><br> 
</form>"; 
} 
else { 
    echo "Your song hasn't been played yet."; 
} 
?> 

</body> 
</html> 

感謝。

+1

確かにあなたの 'if'ステートメントは反対のケースをチェックする必要がありますか?テーブルにIPが見つかった場合(つまり、0行以上が見つかった場合)、メッセージを表示します。それ以外の行が見つからない場合は、フォームを表示しますか? – Tom

+1

http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – AbraCadaver

+0

基本的にええ、それを行う方法はわかりませんが、訪問者のIPがそこにいる場合はリクエスト。 – MBell86

答えて

0

現在、

// $result = Do query 
if(mysql_num_rows($result) > 0) { 
    // Show the form 
} else { 
    // Show 'Already Requested' message 
} 

しかし、それはあなたが何をしたいの反対のようだときには、フォームそのIPアドレステーブル内に発見されたものにのみを、表示されます。

これを試してください。行数がクエリから返された場合にのみ、これでフォームが表示されている

// $result = Do query 
if(mysql_num_rows($result) == 0) { 
    // Show the form 
} else { 
    // Show 'Already Requested' message 
} 

あなたはまた、あなたのplayedフラグのためにあなたのSQLのチェックを追加する必要があるとしている0

です。そして、いくつかのコメントで拾い上げる。

  • Please look at how to prevent SQL injection in your code
  • そして、ちょうどIPがまたは一致しない場合がありますので

    は、彼らは、同じ人ではないという意味ではありません。より厳密なチェックを考える必要があるかもしれません。
+0

をご覧ください。ありがとうございます。コードについて再考する必要があると思います... – MBell86

関連する問題