Page 1 sur 1
deux requêtes/deux foreach sont-ils nécessaires ?
Posté : 21 nov. 2009, 19:25
par dimi3
Bonsoir,
pour afficher deux valeurs de champ (ID et NOM) de ma base de données, je répète deux fois la même chose (2 requêtes / 2 foreach), comme dans le code ci-dessous. Est-ce qu'il y a mieux ?
$requete1 = "SELECT ID
FROM visiteurs
WHERE ID = '$n'
";
$resultat1 = mysql_query($requete1);
while ($ligne1 = mysql_fetch_array($resultat1, MYSQL_ASSOC))
{
if (mysql_errno())
{
die("<br>".mysql_errno()." : ".mysql_error()."<br>");
}
foreach ($ligne1 as $nom1=>$colonne1)
{
{print("<tr><td>$colonne1. ");}
}
} // fin du while RESULTAT1
$requete1 = "SELECT NOM
FROM visiteur
WHERE ID = '$n'
";
$resultat1 = mysql_query($requete1);
while ($ligne1 = mysql_fetch_array($resultat1, MYSQL_ASSOC))
{
if (mysql_errno())
{
die("<br>".mysql_errno()." : ".mysql_error()."<br>");
}
foreach ($ligne1 as $nom1=>$colonne1)
{
{print("$colonne1 : </td>");}
}
} // fin du while RESULTAT1
Merci de m'instruire.
Re: deux requêtes/deux foreach sont-ils nécessaires ?
Posté : 22 nov. 2009, 13:11
par Victor BRITO
Avec
PDO, tu peux utiliser la
méthode fetchAll (), qui renvoie dans un tableau toutes les lignes retournées.
<?php
// On essaie la requête
try
{
// Instanciation de l'objet PDO (nom du serveur MySQL, nom de la base, identifiant, mot de passe)
$pdo = new PDO ('mysql:host=localhost;dbname=tabase', 'root', 'mdp');
// On rédige la requête…
$sql = "SELECT id FROM visiteurs WHERE id = :id";
// … qu'on prépare…
$stmt = $pdo -> prepare ($sql);
// … en associant au paramètre :id la valeur de $n, en vérifiant que $n correspond bien à un entier SQL
$stmt -> bindParam (':id', $n, PDO::PARAM_INT);
// Exécution de la requête
$stmt -> execute ();
// Résultat de la requête
$resultat = $stmt -> fetchAll (PDO::FETCH_ASSOC);
if (empty ($resultat)):
?>
<p>Aucun résultat n'a été retourné</p>
<?php
else:
?>
<table>
<thead>
<tr>
<th scope="col">Colonne</th>
</tr>
</thead>
<tbody>
<?php
foreach ($resultat as $valeur):
?>
<tr>
<td><?php echo $valeur['id']; ?></td>
</tr>
<?php
endforeach;
?>
</tbody>
</table>
<?php
endif;
// On détruit l'objet PDO
$pdo = null;
}
// On lance une exception en cas de souci
catch (PDOException $e)
{
?>
<p><?php echo $e -> getMessage (); ?></p>
<?php
exit;
}
?>
Re: deux requêtes/deux foreach sont-ils nécessaires ?
Posté : 22 nov. 2009, 17:05
par ouckileou
Je vois pas bien le rapport avec la question, avant de passer par PDO, est-ce qu'il ne valait pas mieux dire qu'on pouvait effectivement faire une seule requête, en récupérant les deux colonnes et en les affichant les deux à la fois pour chaque ligne de résultat ?

Re: deux requêtes/deux foreach sont-ils nécessaires ?
Posté : 22 nov. 2009, 17:17
par Victor BRITO
Je vois pas bien le rapport avec la question, avant de passer par PDO, est-ce qu'il ne valait pas mieux dire qu'on pouvait effectivement faire une seule requête, en récupérant les deux colonnes et en les affichant les deux à la fois pour chaque ligne de résultat ?

Au temps pour moi : je n'avais pas remarqué du premier coup la seconde requête.
Donc, dimi3, il suffit d'effectuer un :
$requete = "SELECT ID, NOM FROM visiteur WHERE ID = '$n'";
Après, rien ne t'empêche de découvrir PDO.

Re: deux requêtes/deux foreach sont-ils nécessaires ?
Posté : 22 nov. 2009, 18:54
par dimi3
Merci à tous.
Le "select", je sais faire. Ce qui me pose problème est le "foreach" . Comment coder pour récupérer les deux valeurs "id" et "nom" par exemple dans un seul "foreach" (si c'est possible) ?
Merci encore.
Re: deux requêtes/deux foreach sont-ils nécessaires ?
Posté : 22 nov. 2009, 19:00
par Victor BRITO
Comment coder pour récupérer les deux valeurs "id" et "nom" par exemple dans un seul "foreach" (si c'est possible) ?
Si tu pars de ton code existant, tu n'as besoin de boucle foreach. À l'intérieur de ta boucle while, tu peux accéder aux valeurs de tes deux colonnes pour la ligne actuellement parcourue comme suit :
$requete = "SELECT ID, NOM
FROM visiteurs
WHERE ID = '$n'";
$resultat = mysql_query ($requete);
while ($ligne = mysql_fetch_array ($resultat, MYSQL_ASSOC))
{
if (mysql_errno ()) die (mysql_errno ().' : '.mysql_error ());
else echo 'id = '.$ligne['ID'].'; nom = '$ligne['NOM'].';'."\n";
}
Re: deux requêtes/deux foreach sont-ils nécessaires ?
Posté : 22 nov. 2009, 21:51
par dimi3
Merci mille fois, c'est exactement ce que je voulais. C'est tellement plus simple que mes foreach... Je vais balancer mon bouquin plein de mauvaises solutions !
Merci encore et bon début de semaine.
Re: deux requêtes/deux foreach sont-ils nécessaires ?
Posté : 22 nov. 2009, 22:16
par Victor BRITO
Je vais balancer mon bouquin plein de mauvaises solutions !
Si tu veux le remplacer par un autre, je te conseille
PHP 5 avancé.

Re: deux requêtes/deux foreach sont-ils nécessaires ?
Posté : 23 nov. 2009, 07:58
par dimi3
Merci pour le conseil. J'irai faire les librairies un de ces 4.
Bonne journée.