2017-04-04 3 views
-1

私はipaddress方法を使用する他人のコードを使用しました。しかし、現在のユーザーIDとID番号をチェックするコードを使用したいと思います。データベーステーブルで私は、ユーザーが複数回評価することを許可しないものを実装したいと思っています

$ipaddress = md5($_SERVER['REMOTE_ADDR']); // here I am taking IP as UniqueID but you can have user_id from Database or SESSION 

/* Database connection settings */ 
$con = mysqli_connect('localhost','root','','database'); 

if (mysqli_connect_errno()) { 
    echo "<p>Connection failed:".mysqli_connect_error()."</p>\n"; 
} /* end of the connection */ 

if (isset($_POST['rate']) && !empty($_POST['rate'])) { 
    $rate = mysqli_real_escape_string($con, $_POST['rate']); 
    // check if user has already rated 
    $sql = "SELECT `id` FROM `tbl_rating` WHERE `user_id`='" . $ipaddress . "'"; 
    $result = mysqli_query($con, $sql); 
    $row = mysqli_fetch_assoc();//$result->fetch_assoc(); 
    if (mysqli_num_rows($result) > 0) { 
     //$result->num_rows > 0) { 
     echo $row['id']; 
    } else { 
     $sql = "INSERT INTO `tbl_rating` (`rate`, `user_id`) VALUES ('" . $rate . "', '" . $ipaddress . "'); "; 
     if (mysqli_query($con, $sql)) { 
      echo "0"; 
     } 
    } 
} 
//$conn->close(); 
+0

だから、あなたはそれを試してみているのですか? –

+0

私はそれを行う方法についてよく分かりませんか?私はPHPに新しいです... –

+0

私は私の最終年度のプロジェクトのためにこれを必要とするので、誰かからの助けに感謝します –

答えて

5

UNIQUE KEYとしてuser_id列を設定します。ユーザーが2番目の投票をキャストしようとすると、データベースはINSERTクエリを拒否し、影響を受ける行が0のときにメッセージを表示することができます。

また、UXの観点からは先制ページのコンテンツをロードする前にログインしているユーザーのためのSELECTクエリを実行します。

$query="SELECT `rate` FROM `tbl_rating` WHERE user_id=? LIMIT 1;"; 
if($stmt=$con->prepare($query)){ 
    $stmt->bind_param('s',$ipaddress); // or however you are IDing your users 
    $stmt->execute(); 
    $stmt->store_result(); 
    if($stmt->num_rows>0){ 
     // already rated 
    }else{ 
     // not yet rated 
    } 
    $stmt->close(); 
} 

を彼らはすでにテーブルの行を持っている場合、その後も、それらを再び提出する機会を与えることはありません。

+1

うん。それは適切に動作するはずです。しかし、user_id、post_id(またはany_id)、真または偽のブール値フィールドを含む新しいテーブルを追加することをお勧めします。これにより、同じユーザーが再度評価しようとすると、この新しいテーブルにIDが存在するかどうかを照会し、ブール値フィールドに値がtrueの場合は、評価できないことを伝えるメッセージを表示します。 IPアドレスを使用したい場合は大丈夫ですが、時には自分の場所、ネットワーク、電話を変更することもありますが、IPも変わります。それも考慮する必要があります。そしてクッキーは素晴らしい解決策ではありません。ただIPアドレスと余分なテーブルを使用してください – droidnation

+0

セキュリティのレベルを上げるために、PDOでスクリプトを書き直すことをお勧めします。 MySQLiでも十分ですが、代わりにPDOが好きです。 – droidnation

+0

@AmirHD https://meta.stackexchange.com/a/5235/352329 – mickmackusa

関連する問題