2017-01-24 7 views
-5

私はPHPコーディングとウェブサイトデザインにはとても新しいです。登録ユーザーを再度投票しようとすることを制限する方法

私は登録ユーザーのみが投票できるオンライン投票システムを開発しようとしています。私はすべてをやって、それはうまくいっていますが、必要なヘルプは、ユーザーがログアウトした後、再びログインして2回投票できないようにするにはどうすればいいですか?または、ユーザーを2度目にリダイレクトする方法は?

+0

投票時にユーザーIDをデータベースに保存します。そうすれば、彼は再び彼のユーザーIDをデータベースと照合しようとします。すでに存在している場合は、再度彼に投票することを許可しない –

+0

あなたは登録ユーザーの身元を確認することができます(彼/彼女はログインする必要があるため)ので、投票情報をサーバーに保存し、ユーザーが既に投票したかどうかを確認するために格納された情報。 – Shiping

+0

ユーザーIDとタイムスタンプで投票を保存します。そうすれば、投票プロセス中にチェックを実行して、ユーザーが以前に投票していないことを確認することができます。 – Darren

答えて

0

ユーザを管理するには、データベーステーブルのフィールドを使用します。ログイン時にそのフィールドに条件を適用すると、すでに投票を行ったユーザーを制限することができます。

0

あなたは本当に簡単だと思っていると思っていたのであれば、これは達成するのが難しいことではありません。

あなたのユーザーテーブルには、ユーザーを識別するための一意のIDが必要です。次に、列挙型フィールドが必要なテーブル列についても、votingstatusと呼び、デフォルト値をaに設定します。ユーザーが投票を成功裡にキャストした場合は、そのフィールドをbに更新しました。votingstatus = bを持つすべてのユーザーのフォームコントロールを見ると、bステータスの投票を許可しません。ユーザがログインしたときに、ユーザがaを持っている場合はvotingstatusを確認する必要があり、bが適切なメッセージを返してアクセスを拒否する場合はログインを許可します。

try { 

       $stmt = $dbh->prepare("SELECT voter_id,id_number,password from voters where id_number = ? AND voting_status = 'a' "); 
       $stmt->bindValue(1,$username); 
       $stmt->execute(); 

       $results = $stmt->fetchall(PDO::FETCH_ASSOC); 

       if(count($results) > 0){ 

        foreach($results as $row){ 

        if(password_verify($password,$row['password'])){ 


         $SignError="<div class=\"alert alert-success\"> 
         <button class=\"close\" data-dismiss=\"alert\">x</button> 
         Login Success. Redirecting... 
         </div>"; 

         header("refresh:4;url=page.php"); // change page to ur dashboard url 
        }else{ 

         $SignError="<div class=\"alert alert-error\"> 
         <button class=\"close\" data-dismiss=\"alert\">x</button> 
         Password and ID number does not match 
         </div>"; 
        } 
        } 
       }else{ 

        $SignError="<div class=\"alert alert-error\"> 
        <button class=\"close\" data-dismiss=\"alert\">x</button> 
        Password and ID number does not match 
        </div>"; 
       } 

     } catch (PDOException $e) { 

      error_log($e); 
     } 

T:投票

<?php 
try { 


    $dbh->beginTransaction(); 


    $stmt = $dbh->prepare("UPDATE candidates set votes = votes + 1 where candidate_Id = ? "); 

    if ($stmt->execute([$selectedvoter])) { 

     $update = $dbh->prepare("UPDATE voters set voting_status = 'b' where voter_id = ?"); 
     $update->execute([$_SESSION['voter']]); 

     $dbh->commit(); 

     echo "<p class=\"alert alert-success\">Vote Casted</p>"; 


    }else{ 


     echo "<p class=\"alert alert-danger\"> could not cast Vote</p>"; 

    } 




} 
catch (PDOException $e) { 

    error_log("Error : " . $e->getMessage()); 

} 
?> 

ログインをキャスト

例テーブル

CREATE TABLE `voters` (
    `voter_id` int(6) NOT NULL, 
    `id_number` varchar(255) NOT NULL, 
    `firstname` varchar(255) DEFAULT NULL, 
    `lastname` varchar(255) DEFAULT NULL, 
    `email` varchar(255) NOT NULL, 
    `voting_status` enum('a','b') DEFAULT 'a', 
    `password` varchar(255) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

例彼はログインコードはvoting_status = a(まだ投票しなかったユーザーを意味する)を持つ有権者のみを許可します。

+0

ログインしてもらえますか? –

+0

@DanielChuksが更新されました。これが助けになるならば、回答をアップアップして印を付けてください。 –

+0

本当に助けが必要ですか?私はそれを試したが、私はまだエラーがある。コードを転送できるようにメールを送ってもらえますか?ここでコードをアップロードすることはできません。私は本当に助けが必要です。学校のための私の最終的なプロジェクト。ありがとう.. –

関連する問題