par
Ryle » 01 févr. 2007, 12:14
Juste quelques petites remarques sur ce dernier code :
le echo '<p></p>'; ne sert à rien, et n'a pas sa place dans un <select> qui ne peut contenir que des <option> ou <optgroup>. Cela rendrait ton code html invalide, même si concrètement le navigateur va l'ignorer, alors autant le virer
En SQL, lorsque tu utilises des champs de type numérique (id, int, float, ...) il ne faut pas utiliser d'apostrophe pour passer les valeurs. Si tu en ajoutes, mysql devra convertir ta chaine en nombre avant de pouvoir la traiter. Autant lui donner directement la valeur dont il a besoin
Quand tu fais un SELECT * , tu ramènes tous les champs de tous les enregistements. Il serait plus judicieux de spécifier uniquement ceux dont tu as besoin pour des questions de performance.
Et en l'occurence, dans le code ci-dessus, tu n'utilises aucune de ces informations, et tu les ramènes pour rien (sauf pour connaitre le nombre de lignes)

Donc à moins que tu ne t'en serve par ailleurs, dans ce cas, il vaut mieux faire un SELECT COUNT(*) qui va juste compter le nombre d'enregistrement.
$requete3 = "SELECT COUNT(*) AS nb FROM reponse"; // "AS nb" est un alias pour utiliser la valeur plus facilement ensuite
$requete3.= " WHERE num_sondage = ".$id_sondage; // j'ai viré les apostrophes en supposant qu'il s'agissait de nombre
$requete3.= " AND num_question = ".$id_question; // idem
$resultat3 = mysql_query($requete3) // exécute la requête
or die ('Erreur SQL : '. $requete3 .'<br />'. mysql_error()); // tu auras même le message d'erreur mysql s'il y en a un
$row = mysql_fetch_assoc($resultat3); // $row['nb'] contient le nombre d'enregistrements trouvés
// j'ai également remplacé le fetch_array par un fetch assoc, plus optimisé
for ($i = 0; $i < $row['nb']; $i++) {
...
}
C'est un petit peu plus long à écrire, mais ça l'est beaucoup moins à s'exécuter
Pour le fetch_array tout dépend de l'usage que tu en as :
- mysql_fetch_rows va te retourner un tableau indexé selon l'ordre des champs ramené par le select : array (0 => 'xxx', 1 = 'yyy', ...) (d'où l'importance de spécifier la liste des champs dans le SELECT au lieu de juste faire un SELECT *

)
- mysql_fetch_assoc va te retourner un tableau associatif selon le nom des colonnes : array ('colonne1' => 'xxx', 'colonne2' = 'yyy', ...) (d'où l'intérêt de l'alias pour renommer certaines colonnes)
- mysql_fetch_array fait un mix des deux : array (0 => 'xxx', 'colonne1' => 'xxx', 1 = 'yyy', 'colonne2' = 'yyy', ...)
Donc autant utiliser une fonction plus légere si tu n'as que faire des index ou des colonnes
Edit : j'ai décidement du mal avec les guillemets moi aujourd'hui