Blocage création requêtes SQL

Bonjour,
Je m'adresse à vous car j'ai des problèmes sur le langage SQL dans lequel je débute tout juste. Je m'explique: dans une BDD (phpmyadmin) j'ai une table nommée candidats, dans laquelle se trouvent les attributs idcandidat, Nom, Prénom, Age, Taille, Poids, Sexe, Total espéré (le but étant de faire un vote). On me demande donc à partir de cette table de créer une page php affichant les candidats de la table dans un tableau qui permet de voter pour eux. On m'a donc donné le code à programmer pour cette page (que je ne comprends par ailleurs pas tout à fait):
<html>
<body>

<?php
$connect = mysql_connect("xxx.yyy.utc", "nf.....48", "ic....7Y") or die ("Error connecting to mysql: " . mysql_error());

//echo "$connect";
$result = mysql_select_db("nf....48");

echo "\n<form method=post action='recap.php'>";
echo "\n<table border='1'>";
echo "\n<caption> Présentation des candidats </caption>";
echo "\n<tr>
<th> Nom </th>
<th> note donnee </th>
</tr>";

$result = mysql_query("SELECT * FROM candidats");

while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
$nom = $row[1];
$idcandidat = $row[0];
echo "\n<tr>";
echo "<td> $nom </td> ";
echo "<td> <input type='text' name='$idcandidat'></td>";
echo "</tr>";
}

echo "\n</table>";
echo "<input type='submit' value='voter'>";
echo "</form>";

mysql_free_result($result);
mysql_close($connect);
?>
</body>
</html>

Le problème vient après: L'utilisation du nouveau formulaire de vote mis au point à la question précédente permet de voter (ou non si le champ est vide) pour plusieurs candidats. Cette action de voter pour plusieurs candidats est appelée "votation" dans mon exercice. Il faut générer un numéro de votation unique quand une votation est passée (comme un numéro de commande). Il m'a donc été demandé de créer une table supplémentaire GenereNumVote avec juste une colonne idvote de type entier dans la BDD. Et il faut donc créer une nouvelle page php recap.php avec le code php et les requêtes SQL pour générer un nouveau numéro et le récupérer. Cette page sera le résultat de l'action Voter de la page codée ci-dessus. Et là je dois avouer que je ne sais absolument pas comment faire. Si quelqu'un pouvait m'aider et/ou m'expliquer, je lui en serais vraiment reconnaissant. Merci d'avance pour vos réponses!

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Bonjour,

    J'ai retiré ce qui me semblait être des clés d'accès à ta BDD... Si ce n'était pas nécessaire ou utile et sans aucun risque, fais-les moi connaitre pour les rétablir.
    1. salut,

      le numéro unique dont tu parle peut être généré facilement si ton champ est en auto-incrément (à chaque insertion dans la table, le champ prend une valeur unique).

      (a priori tu devrais avoir 3 tables: personne, estCandidat, votation)
      1. Merci, ce problème d'auto incrémentation a été résolu en cochant une case pour dans la BDD. En revanche je bloque toujours complètement sur la création de la dernière page recap.php. Je n'ai aucune idée du code qu'il faut y mettre.
        1. Le but est d'insérer dans une table "vote" comprenant trois attributs "idvote" "idcandidat" et "note". recap.php est censée récupérer le numéro "idvote" généré dans la table GenereNumVote ainsi que les résultats de mon code posté ci-dessus "idcandidat" et "note" et les insérer dans cette table "vote"
          1. mais a quoi sert la table GenereNumVote ? quel est le lien entre cette table et la table vote, ou la table candidat ?
            a mon avis cette table n'est pas nécessaire si tu ne l'utilise pas pour enregistrer des données importante
          2. La table GenereNumVote génère un numéro de vote en auto-incrémentation, et on va prendre pour chaque vote le numéro généré par cette table et l'associer au vote afin que ce dernier soit unique, car il peut y avoir plusieurs votes pour un candidat
          3. donc cette table ne sert strictement à rien
            il suffit de mettre le champ idVote de la table vote en auto incrément.
            ainsi lors d'insertion, il suffit de ne pas remplir le champ idVote et elle seras automatiquement rempli lors de l'insertion
          4. OK ben je vais faire cela, mais je me demande toujours comment récupérer à la fois la note et l'idcandidat pour les insérer dans la table vote
          5. normalement quand tu affiche la liste des candidats, tu es capable de stocker le numéro dans l'un des attributs.
            donc quand tu envoi ton vote, tu peux récupérer le numéro du candidat du formulaire envoyé, et tu peux aussi récupérer le vote (je suppose que c'est un entier qui représente une note)
            dans ton php tu récupère tes infos avec $_GET['attribut_name'] ou $_POST['attribut_name']
        2. Merci, grâce à vous j'ai pu avancer quelque peu. Actuellement j'ai un léger souci technique puisque j'ai un code php (requête envoyée par un formulaire) qui ne fonctionne pas puisqu'à chaque ligne correspondant à un "mysql_fetch_array", j'ai une erreur de type "mysql_fetch_array() expects parameter 1 to be resource, boolean given". Je n'arrive pas à voir d'où cela peut provenir. Voici mon code php:
          <html>
          <body>
          <?php
          define ('nulle', 0);
          $connect = mysql_connect("***", "***", "***") or die ("Error connecting to mysql: " . mysql_error());
          $result = mysql_select_db("***");
          $nom=$_POST['nom'];

          $query="select note FROM 'candidats' WHERE Nom=$nom ";
          $result=mysql_query($query);
          $row = mysql_fetch_array($result, MYSQL_ASSOC);
          echo $row['note'];
          $add=$_POST['add'];
          $subtract=$_POST['subtract'];
          $ajouter=$_POST['ajouter'];
          $soustraire=$_POST['soustraire'];
          if (!empty($add)){
          $query="UPDATE 'candidats' SET note = note + $ajouter WHERE Nom=$nom";
          $result=mysql_query($query);
          }
          if (!empty($subtract) and $row['note']>$soustraire){
          $query="UPDATE 'candidats' SET note = note - $soustraire WHERE Nom=$nom";
          $result=mysql_query($query);
          }
          else{
          $query="UPDATE 'candidats' SET note = 'nulle' WHERE Nom=$nom";
          $result=mysql_query($query);
          }
          $prenom=$_POST['prenom'];
          $age=$_POST['age'];
          $taille=$_POST['taille'];
          $poids=$_POST['poids'];
          $sexe=$_POST['sexe'];
          $query="select prenom FROM 'candidats' WHERE Nom=$nom ";
          $result=mysql_query($query);
          $row = mysql_fetch_array($result, MYSQL_ASSOC);
          echo $row['prenom'];
          if (!empty($prenom)){
          $query="UPDATE 'candidats' SET prenom = '$prenom' WHERE Nom=$nom";
          $result=mysql_query($query);
          }
          $query="select Age FROM 'candidats' WHERE Nom=$nom ";
          $result=mysql_query($query);
          $row = mysql_fetch_array($result, MYSQL_ASSOC);
          echo $row['Age'];
          if (!empty($age)){
          $query="UPDATE 'candidats' SET Age = '$age' WHERE Nom=$nom";
          $result=mysql_query($query);
          }
          $query="select Taille FROM 'candidats' WHERE Nom=$nom ";
          $result=mysql_query($query);
          $row = mysql_fetch_array($result, MYSQL_ASSOC);
          echo $row['Taille'];
          if (!empty($taille)){
          $query="UPDATE 'candidats' SET Taille = '$taille' WHERE Nom=$nom";
          $result=mysql_query($query);
          }
          $query="select Poids FROM 'candidats' WHERE Nom=$nom ";
          $result=mysql_query($query);
          $row = mysql_fetch_array($result, MYSQL_ASSOC);
          echo $row['Poids'];
          if (!empty($poids)){
          $query="UPDATE 'candidats' SET Poids = '$poids' WHERE Nom=$nom";
          $result=mysql_query($query);
          }
          $query="select Sexe FROM 'candidats' WHERE Nom=$nom ";
          $result=mysql_query($query);
          $row = mysql_fetch_array($result, MYSQL_ASSOC);
          echo $row['Sexe'];
          if (!empty($poids)){
          $query="UPDATE 'candidats' SET Sexe = '$sexe' WHERE Nom=$nom";
          $result=mysql_query($query);
          }

          ?>
          </body>
          </html>
          1. 1) tu oubli les ' ' pour entourer tes variables de type chaine dans tes requêtes
            2) mysql_fetch_array ne prend qu'un seul paramètre (le résultat du mysql_query)
            3) tes mysql_fetch_array ne servent apparament a rien parce que tu n'utilise pas le contenu des $row
          2. Merci c'est parfait maintenant!
          3. et ca marche maintenant ?