2016-05-29 5 views
0

J'ai trois pages PHP. Se connecter, voter et voter. Dans la page de vote, l'utilisateur peut voter pour les candidats. Il y a des boutons radio et des cases à cocher. Voici les codes pour la page Vote:Système de vote utilisant des boutons et des cases à cocher radio (PHP)

<?php 
error_reporting(E_ALL & ~E_NOTICE); 
session_start(); 

if (isset($_SESSION['uname'])) { 
    $username = $_SESSION['uname']; 
} 

else { 
    header('Location: login_user.php'); 
    die(); 
} 
?> 

<html> 
<head> 
    <title>Trinity University of Asia Voting System</title> 
</head> 
<body> 
    <img src="images/tua_logo.jpg"><marquee>Practice your right to vote.</marquee><br> 

    <center> 
     <a href="/">Home</a> | <a href="results.php">Results</a> | <a href="logout.php">Logout</a><br> 
     <h3>Cast Your Vote</h3> 
     <form action="processvoting.php" method="post"> 
     <table cellpadding="4" border="1"> 
      <tr> 
       <th>Position</th> 
       <th>Choice 1</th> 
       <th>Choice 2</th> 
      </tr> 
      <tr> 
       <th>President</th> 
       <td><input type="radio" name="president" value="pres1">&nbsp;JOHN MICHAEL KALEMBE<br>College of Business Administration</td> 
       <td><input type="radio" name="president" value="pres2">&nbsp;SUZAN JOHN<br>College of Education</td> 
      </tr> 
      <tr> 
       <th>Vice President</th> 
       <td><input type="radio" name="vice_president" value="vicepres1">&nbsp;JULIUS SAMWEL<br>College of Medical Technology</td> 
       <td><input type="radio" name="vice_president" value="vicepres2">&nbsp;JEUNICE MARIANO<br>College of Business Administration</td> 
      </tr> 
      <tr> 
       <th>Secretary</th> 
       <td><input type="radio" name="secretary" value="sec1">&nbsp;ANGELO CHRSTIAN DE GUZMAN<br>College of Medical Technology</td> 
       <td><input type="radio" name="secretary" value="sec1">&nbsp;MICHAEL SANGA<br>College of Hospitality and Tourism Management</td> 
      </tr> 
      <tr> 
       <th>Treasurer</th> 
       <td><input type="radio" name="treasurer" value="treas1">&nbsp;MARIE DANIELLE THEREZE VALDEZ<br>College of Hospitality and Tourism Management</td> 
       <td><input type="radio" name="treasurer" value="treas1">&nbsp;JEUNICE MARIANO<br>College of Business Administration</td> 
      </tr> 
      <tr> 
       <th>Auditor</th> 
       <td><input type="radio" name="auditor" value="aud1">&nbsp;KOBI TSARLZ GONZALES<br>College of Computing and Information Sciences</td> 
       <td><input type="radio" name="auditor" value="aud1">&nbsp;MARIAN ENTERO<br>College of Business Administration</td> 
      </tr> 
      <tr> 
       <th>Business Manager</th> 
       <td><input type="checkbox" name="bus_manager" value="bus1">&nbsp;MICAH EDILYN TAN<br>College of Arts and Sciences</td> 
       <td>N/A</td> 
      </tr> 
      <tr> 
       <th>Public Relations Officer (PRO)</th> 
       <td><input type="checkbox" name="pro" value="pro1">&nbsp;MARIBETH LIAMZON<br>College of Education</td> 
       <td>N/A</td> 
      </tr> 
     </table> 
     <input type="submit" name="submit" value="Cast Your Vote">&nbsp;&nbsp;<input type="reset" value="Reset"> 
    </form> 
</center> 
</body> 
</html> 

Une fois les votes des utilisateurs, il sera redirigé vers la page du processus de vote et c'est le code:

<?php 
error_reporting(E_ALL & ~E_NOTICE); 
session_start(); 

if (isset($_SESSION['uname'])) { 
    $username = $_SESSION['uname']; 
} 

else { 
    header('Location: login_user.php'); 
    die(); 
} 

include 'connection.php'; 

if(isset($_POST['submit'])) { 
    $president = $_POST['president']; 
    $vicepres = $_POST['vice_president']; 
    $secretary = $_POST['secretary']; 
    $treasurer = $_POST['treasurer']; 
    $auditor = $_POST['auditor']; 
    $businessmanager = $_POST['bus_manager']; 
    $pro = $_POST['pro']; 

    $conn = mysqli_connect('localhost', 'root', '', 'electiondb'); 

    if (!$conn) { 
     die("Connecton failed: " . mysqli_connect_error()); 
    } 

    $votesql = "SELECT voted FROM student_log WHERE username = '$username'"; 
    $query = mysqli_query($conn, $votesql); 

    while($record = mysqli_fetch_array($query)) { 
      $hasvoted = $record['voted']; 
     } 

    if ($hasvoted == 0) { 

     if ($president == '') { 
      echo "You cannot leave $president blank. Please go back and try again.";; 
     } 
     elseif ($vicepres == '') { 
      echo "You cannot leave $vicepres blank. Please go back and try again."; 
     } 
     elseif ($secretary == '') { 
      echo "You cannot leave $secretary blank. Please go back and try again."; 
     } 
     elseif ($treasurer == '') { 
      echo "You cannot leave $treasurer blank. Please go back and try again."; 
     } 
     elseif ($auditor == '') { 
      echo "You cannot leave $auditor blank. Please go back and try again."; 
     } 
     elseif ($businessmanager == ''){ 
      echo "You cannot leave $businessmanager blank. Please go back and try again."; 
     } 
     elseif ($pro == '') { 
      echo "You cannot leave $pro blank. Please go back and try again."; 
     } 

     else { 
      switch ($president) { 
       case 'pres1': 
       $votepres1 = "UPDATE vote_log SET choice1 = choice1+1 WHERE position = 'president'"; 
       $runpres1 = mysqli_query($conn, $votepres1); 
       break; 
       case 'pres2': 
       $votepres2 = "UPDATE vote_log SET choice2 = choice2+1 WHERE position = 'president'"; 
       $runpres2 = mysqli_query($conn, $votepres2); 
       break; 
      } 

      switch ($vicepres) { 
       case 'vicepres1': 
       $votevicepres1 = "UPDATE vote_log SET choice1 = choice1+1 WHERE position = 'vice_president'"; 
       $runvicepres1 = mysqli_query($conn, $votevicepres1); 
       break; 
       case 'vicepres2': 
       $votevicepres2 = "UPDATE vote_log SET choice2 = choice2+1 WHERE position = 'vice_president'"; 
       $runvicepres2 = mysqli_query($conn, $votevicepres2); 
       break; 
      } 

      switch ($secretary) { 
       case 'sec1': 
       $votesec1 = "UPDATE vote_log SET choice1 = choice1+1 WHERE position = 'secretary'"; 
       $runsec1 = mysqli_query($conn, $votesec1); 
       break; 
       case 'sec2': 
       $votesec2 = "UPDATE vote_log SET choice2 = choice2+1 WHERE position = 'secretary'"; 
       $runsec2 = mysqli_query($conn, $votesec1); 
       break; 
      } 

      switch ($treasurer) { 
       case 'treas1': 
       $votetreas1 = "UPDATE vote_log SET choice1 = choice1+1 WHERE position = 'treasurer'"; 
       $runtreas1 = mysqli_query($conn, $votetreas1); 
       break; 
       case 'treas2': 
       $votetreas2 = "UPDATE vote_log SET choice2 = choice2+1 WHERE position = 'treasurer'"; 
       $runtreas2 = mysqli_query($conn, $votetreas2); 
       break; 
      } 

      switch ($auditor) { 
       case 'aud1': 
       $voteaud1 = "UPDATE vote_log SET choice1 = choice1+1 WHERE position = 'auditor'"; 
       $runaud1 = mysqli_query($conn, $voteaud1); 
       break; 
       case 'aud2': 
       $voteaud2 = "UPDATE vote_log SET choice2 = choice2+1 WHERE position = 'auditor'"; 
       $runaud2 = mysqli_query($conn, $voteaud2); 
       break; 
      } 

      switch ($businessmanager) { 
       case 'bus1': 
       $votebus1 = "UPDATE vote_log SET choice1 = choice1+1 WHERE position = 'business_manager'"; 
       $runbus1 = mysqli_query($conn, $votebus1); 
       break; 
      } 

      switch ($pro) { 
       case 'pro1': 
       $votepro1 = "UPDATE vote_log SET choice1 = choice1+1 WHERE position = 'pro'"; 
       $runpro1 = mysqli_query($conn, $votepro1); 
       break; 
      } 

      $sqlforvoted = "UPDATE student_log SET voted = 1 WHERE username = '$username'"; 
      $processsql = mysqli_query($conn, $sqlforvoted) or die (mysqli_error($conn)); 
      echo "Thank you for voting. You may now logout of the system.<br><a href='logout.php'>Logout</a>"; 
     } 
    } 
    else { 
     echo "You cannot vote more than once. <br><a href='logout.php'>Logout</a>"; 
    } 
} 

?> 

<html> 
<head> 
    <title>Voting Process</title> 
</head> 
<body> 
</body> 
</html> 

Les votes ne sont pas incrémenter mais la l'utilisateur est considéré comme «voté», donc l'utilisateur ne peut pas voter à nouveau une fois connecté. Ma seule préoccupation est que les votes ne comptent pas. Y a-t-il quelque chose qui ne va pas dans mes codes ou ma compréhension du nombre de votes n'est-elle pas si bonne? Je vous remercie!

+1

quand vous dites « sans compter », qu'est-ce que vous signifie spécifiquement? Vous voulez dire que vous voulez mettre à jour un "compte" quelque part stocké dans la mémoire qui dit combien de personnes ont voté pour "cette personne" pour secrétaire, "cette personne" pour trésorier, etc? – Webeng

+0

dans la base de données, tous les comptes de votes pour chaque candidat sont mis à 0, et si un utilisateur vote pour les candidats, je voudrais qu'il augmente. Mais ça ne s'incrémente pas. Oui, exactement ce que vous avez dit! Je pense qu'il y a quelque chose qui cloche avec mes codes sql mais c'est mon troisième essai et ça ne marche toujours pas –

+0

@Webeng il y a quelques mises à jour dans le code! – Jeff

Répondre

0

Vous pouvez remplacer:

switch ($president) { 
    case 'pres1': 
    $votepres1 = "UPDATE vote_log SET choice1 = choice1+1 WHERE position = 'president'"; 
    $runpres1 = mysqli_query($conn, $votepres1); 
    break; 
    case 'pres2': 
    $votepres2 = "UPDATE vote_log SET choice2 = choice2+1 WHERE position = 'president'"; 
    $runpres2 = mysqli_query($conn, $votepres2); 
    break; 
} 

Avec ceci:

// here you take the last char of $president (value 1 or 2) and concatenate it to "choice" 
$choice = "choice".substr($president, -1); 
$votepres = "UPDATE vote_log SET $choice = $choice + 1 WHERE position = 'president'"; 
$runpres = mysqli_query($conn, $votepres); 

espacement des notes dans l'instruction SQL.

Pour empêcher l'injection SQL, vous devez modifier les instructions dans lesquelles une variable est appelée. Dans ce cas, les déclarations où vous appelez $username (vous devez appeler l'ID utilisateur, à la place du nom d'utilisateur). Appelez l'ID utilisateur, vous pouvez simplement vérifier s'il s'agit d'une valeur entière avant de faire la requête comme suit: if (is_int($userID)) { ...do query... } else { ...do not... }

+0

je n'ai pas un ID utilisateur en fait, ma table se compose du nom complet de l'utilisateur, le nom d'utilisateur, et le mot de passe –

+0

Ok, vous devez toujours créer l'ID de champ comme champ principal. Vous pouvez également éviter l'injection SQL en utilisant mysqli_real_escape_string comme suit: '$ username = mysqli_real_escape_string ($ _ SESSION ['uname']);' – codable

+0

Avez-vous essayé mon code? – codable

0

Je pense que vous avez quelques fautes de frappe dans votre code HTML. Ici, les options sont pres1 et pres2:

<td><input type="radio" name="president" value="pres1"> ... </td> 
<td><input type="radio" name="president" value="pres2"> ... </td> 

mais ici, les deux options sont sec1:

<td><input type="radio" name="secretary" value="sec1"> ... </td> 
<td><input type="radio" name="secretary" value="sec1"> ... </td> 

En ce qui concerne les interactions de base de données, il serait préférable d'utiliser des déclarations de AOP et préparés - il est plus sûr que la plupart des schémas de concaténation de chaînes. Vérifiez la colonne «connexes» à droite sur cette page - la question la plus probable est probablement this one qui explique bien ce sujet.

De toute façon, voici une autre prise sur votre section submit qui supprime simplement toute la répétition. Il n'utilise pas AOP (je ne l'ai pas ajouter un code de base de données), mais au moins il n'y a pas d'entrée utilisateur non filtrée dans la requête finale - que des valeurs prédéfinies:

if(isset($_POST['submit']) && !empty($_POST["submit"])) { 

    if($hasvoted != 0){ 
     echo "You cannot vote more than once. <br><a href='logout.php'>Logout</a>"; 
     exit; 
    } 

    $positions = array(
     "president" => null, 
     "vice_president" => null, 
     "secretary" => null, 
     "treasurer" => null, 
     "auditor" => null, 
     "bus_manager" => null, 
     "pro" => null 
     ); 

    foreach (array_keys($positions) as $position) 
    { 
     if (!isset($_POST[$position]) || empty($_POST[$position])) { 

      echo "All positions must be filled. Please try again.<br>"; 
      exit; 
     } 
     else{ 

      $choice = ""; 

      $choice_num = substr($_POST[$position], -1); 

      if($choice_num == 1 || $choice_num == 2){ 
       $choice = "choice" . $choice_num; 
      } 
      else{ 
       echo "Error - invalid option"; 
       exit; 
      } 

      $positions[$position] = $choice; 
     } 

    } 

    foreach (array_keys($positions) as $position) 
    { 
     $choice = $positions[$position]; 

     $sql_str = "UPDATE vote_log SET " . $choice ." = " . $choice . "+1 WHERE position = '" . $position . "'"; 

     // $sql_insert = mysqli_query($conn, $sql_str); 

     echo $sql_str . "<br>"; 

    } 


    echo "Thank you for voting. You may now logout of the system.<br><a href='logout.php'>Logout</a>"; 

} 
+0

merci beaucoup! Je vais essayer ça –

+0

Il ne se connecte toujours pas dans la base de données :(pourquoi cela pourrait-il être? J'ai placé toutes les connexions nécessaires ... –

+0

@GeeNim ne se connecte pas, ne pas incrémenter ou les deux? Obtenez-vous effectivement des données lorsque vous exécutez '" SELECT a voté FROM student_log WHERE nom d'utilisateur = '$ username' ";'? Je suppose que vous avez essayé d'imprimer/renvoyer des données juste pour vérifier que vous pouvez effectivement interroger la base de données.Que se passe-t-il lorsque vous faites manuellement des 'UPDATE's et' SELECT's depuis un shell mySQL? Nous avons besoin de sortie et plus d'informations sur votre processus de débogage pour épingler en bas de l'erreur. – jDo