0

私は PHP/MySQL と Web サイト全体の設計に不慣れです。定義済みのユーザーが投票できる Web サイトを構築しています。ユーザーのリストを含むデータベースがあります。重複投票を回避しようとしています。IP アドレスをブロックしたり、Cookie を使用したりできると読みましたが、別の方法を使用しようとしています。

「ユーザー」と呼ばれる私のデータベースには、ユーザー名、パスワード、フラグの 3 つの列があります。フラグのデフォルト値は 0 です。ユーザーが投票したら、その特定のユーザーのフラグを 1 に設定します。ここで、ユーザーが再度投票しようとした場合、データベース内のフラグの値を確認したいと思います。0 の場合は、彼を「投票していただきありがとうございます」ページに送り、各候補者が受け取った投票数を追跡する結果と呼ばれる、私が作成した別のデータベースを更新します。そうでない場合は、「あなたはすでに投票しました」という別のページに移動します。データベース内のフラグの値を読み取り、if 条件を使用する方法がわからないことを除けば、これまでのところすべて正常に動作しています。

これが私がこれまでに持っているものです:

<?php

$host="localhost"; // Host name 
$username="dbxxxxx"; // Mysql username 
$password="password"; // Mysql password 
$db_name="dbxxxxx_users"; // Database name 
$tbl_name="users"; // Table name 


// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$user = $_COOKIE["details"];  //cookie details has the username the user used to log in

$SQL = "SELECT flag FROM users WHERE Username='$user'";
$flag = mysql_query( $SQL );   //no clue what's happening here. Just trying random stuff
$db_field = mysql_fetch_assoc($flag);  


if($db_field==0)     //checking the value of flag in the database
{       
    mysql_query("UPDATE result SET Votes=Votes+1 //if flag in database = 0 
    WHERE Name='Candidate1'");  //updates result for candidate1 if the user voted for 1

    $user = $_COOKIE["details"];  //reading the cookie again. can be omitted.

    mysql_query("UPDATE users SET flag=1   //changing flag to 1 so user cannot vote again
    WHERE Username='$user'");

    header("location: http://www.lithuaniavote.com/thankyou.html");
 }

else    //flag != 1 or user has already voted
{
    header("location: http://www.lithuaniavote.com/alreadyvoted.html");
}

?>

PS: このコードは、データベース内のフラグを 0 から 1 に変更します。ただし、if 条件には問題があります。フラグが 1 の場合でも投票できます。これは、既に投票済みであることを示しています。つまり、投票済みページに移動することはありません。

4

2 に答える 2

0

元のコード:

$SQL = "SELECT flag FROM users WHERE Username=$user";
$flag = mysql_query( $SQL );   //no clue what's happening here. Just trying random stuff
$db_field = mysql_fetch_assoc($flag);  
if($db_field==0)     //checking the value of flag in the database

これを試して:

$SQL = "SELECT flag FROM users WHERE Username = '$user'"; // $user should be in 'quotes'
$flag = mysql_query( $SQL );  // This is the actual query to the database
$db_field = mysql_result($flag, 0);  // This is the result of the query.
if($db_field===0)  // Use 3 equals signs instead of 2 in this case (which means "exactly equal to")
于 2013-04-14T04:08:57.243 に答える