A voir également:
- Php : contenu d'une BDD sur un site web
- Php : contenu d'une BDD sur un site web ✓ - Forum - PHP
- BDD sur mon site web ✓ - Forum - Webmaster
- BDD sur 1 site Web ✓ - Forum - Programmation
- [php] comment entrer un POST dans un site web ✓ - Forum - PHP
- [PHP] Contenue du site ✓ - Forum - PHP
12 réponses
freto
- Messages postés
- 1542
- Date d'inscription
- vendredi 6 juillet 2007
- Statut
- Membre
- Dernière intervention
- 8 avril 2016
Bonjour.
C'est normal. Je va t'expliquer ce que tente de faire ton code.
Jusque là, tout va bien, le résultat de ta requete va aller dans $requete.
echo $sql['nom'];
Tu tente d'accéder au champ 'nom' du tableau $sql, qui est ici une chaine de caractères. Il te renvoie donc le premier champs visiblement, a savoir la lettre S.
Pour utiliser le résultat de ta requete, il faut utilise $requete ici.
Sauf que ce n'est pas directement exploitable. Il faut d'abord faire un :
Cela va placer une ligne dans $tab, chaque colonne de la ligne dans un nouvel indice. Ainsi, $tab[0] contiendra la première colonne, $tab[1] la deuxième...etc...
Chaque appel à mysql_fetch_array avancera d'une ligne dans le résultat et placera la ligne courante dans $tab. La fonction renvoie faux si on arrive à la fin.
Voici un petit script qui te permettra de parcourir toutes les lignes.
C'est normal. Je va t'expliquer ce que tente de faire ton code.
$sql = "SELECT nom, prenom, statut FROM uti where Id='1'"; $requete = mysql_query($sql);
Jusque là, tout va bien, le résultat de ta requete va aller dans $requete.
echo $sql['nom'];
Tu tente d'accéder au champ 'nom' du tableau $sql, qui est ici une chaine de caractères. Il te renvoie donc le premier champs visiblement, a savoir la lettre S.
Pour utiliser le résultat de ta requete, il faut utilise $requete ici.
Sauf que ce n'est pas directement exploitable. Il faut d'abord faire un :
$tab=mysql_fetch_array($requete);
Cela va placer une ligne dans $tab, chaque colonne de la ligne dans un nouvel indice. Ainsi, $tab[0] contiendra la première colonne, $tab[1] la deuxième...etc...
Chaque appel à mysql_fetch_array avancera d'une ligne dans le résultat et placera la ligne courante dans $tab. La fonction renvoie faux si on arrive à la fin.
Voici un petit script qui te permettra de parcourir toutes les lignes.
<?php while($tab=mysql_fetch_array($requete)){ echo $tab[0]; //renvoie la premiere colonne. echo $tab[1]; renvoie la deuxième collonne. } ?>
Lapinkiller
- Messages postés
- 674
- Date d'inscription
- samedi 15 avril 2006
- Statut
- Membre
- Dernière intervention
- 30 août 2010
Bonjour
il faut que tu transforme la réponse de ta requete en un tableau
$sql = mysql_query(...);
$donnees = mysql_fetch_assoc($sql );
echo $donnees['nom'];
si jamais la réponse contient plusiseur enregistrement tu fait une boucle
$sql = mysql_query(...);
while($donnees = mysql_fetch_assoc($sql ))
{
echo $donnees['nom']."<br /> ";
}
edit ah, on t'a répondu en même que moi ^^
donc par rapport à ce qu'il a dit, préfere la méthode mysql_fetch_assoc les deux marche, mais plusieurs professionnel m'ont conseillé la assoc au lieu de l'array ;)
et sinon, tu n'es pas obligé d'utilisé les chiffre pour les colonnes, si tu met le nom de colonne comme je te l'ai indiqué ca marche aussi ;)
il faut que tu transforme la réponse de ta requete en un tableau
$sql = mysql_query(...);
$donnees = mysql_fetch_assoc($sql );
echo $donnees['nom'];
si jamais la réponse contient plusiseur enregistrement tu fait une boucle
$sql = mysql_query(...);
while($donnees = mysql_fetch_assoc($sql ))
{
echo $donnees['nom']."<br /> ";
}
edit ah, on t'a répondu en même que moi ^^
donc par rapport à ce qu'il a dit, préfere la méthode mysql_fetch_assoc les deux marche, mais plusieurs professionnel m'ont conseillé la assoc au lieu de l'array ;)
et sinon, tu n'es pas obligé d'utilisé les chiffre pour les colonnes, si tu met le nom de colonne comme je te l'ai indiqué ca marche aussi ;)
freto
- Messages postés
- 1542
- Date d'inscription
- vendredi 6 juillet 2007
- Statut
- Membre
- Dernière intervention
- 8 avril 2016
Même si le post est résolu, il est important de préciser ici quelques petits points importants:
mysql_fetch_arry et mysql_fetch_assoc sont semblables. En effet, selon le manuel de PHP, mysql_fetch_assoc revient a faire un appel à mysql_fetch_array avec le paramètre optionnel MYSQL_ASSOC.
En effet, grâce (ou a cause) de mysql_fetch_assoc, tu peut utiliser les noms de colonnes de tables plutot que les indices. Je ne sais pas pour quelles raisons certains professionnels t'ont recommandé la méthode fetch_assoc, mais perso sa peut être source de problèmes pour moi. Je m'explique:
Tu utilise mysql_fetch_assoc => tu utilise des noms de colonnes au lieu de chiffres dans ton appli=> sa fonctionne.
Je développe la même appli=>j'utilise mysql_fetch_array() => j'utilise les indices de colonne au lieu de noms => sa fonctionne tout aussi bien.
Un plaisantin (ou pas) vient à changer le nom des colonnes de la bdd. Mon application tourne encore, pas la tienne.
Le seul point positif à utiliser les noms de colonnes plutot que les indices c'est pour la simplicité et la lisibilité du code.
Edit: au temps pour moi, dans mysql_fetch_array, le paramètre optionnel étant par défaut à MYSQL_BOTH, on peut utiliser au choix les numéros ou les noms.
mysql_fetch_arry et mysql_fetch_assoc sont semblables. En effet, selon le manuel de PHP, mysql_fetch_assoc revient a faire un appel à mysql_fetch_array avec le paramètre optionnel MYSQL_ASSOC.
En effet, grâce (ou a cause) de mysql_fetch_assoc, tu peut utiliser les noms de colonnes de tables plutot que les indices. Je ne sais pas pour quelles raisons certains professionnels t'ont recommandé la méthode fetch_assoc, mais perso sa peut être source de problèmes pour moi. Je m'explique:
Tu utilise mysql_fetch_assoc => tu utilise des noms de colonnes au lieu de chiffres dans ton appli=> sa fonctionne.
Je développe la même appli=>j'utilise mysql_fetch_array() => j'utilise les indices de colonne au lieu de noms => sa fonctionne tout aussi bien.
Un plaisantin (ou pas) vient à changer le nom des colonnes de la bdd. Mon application tourne encore, pas la tienne.
Le seul point positif à utiliser les noms de colonnes plutot que les indices c'est pour la simplicité et la lisibilité du code.
Edit: au temps pour moi, dans mysql_fetch_array, le paramètre optionnel étant par défaut à MYSQL_BOTH, on peut utiliser au choix les numéros ou les noms.
Lapinkiller
- Messages postés
- 674
- Date d'inscription
- samedi 15 avril 2006
- Statut
- Membre
- Dernière intervention
- 30 août 2010
- Messages postés
- 1542
- Date d'inscription
- vendredi 6 juillet 2007
- Statut
- Membre
- Dernière intervention
- 8 avril 2016
totu bon développeur utilise des nom de variable/colonne qui ont un sens, utilisé les indioce de colonne du base BDD c'est la meilleure facon de faire des erreurs ;)
Utilisateur anonyme
Et tes balises <tr> sont mal fermées.
Je sais le problème vient pas de là, mais avec les explications au-dessus il devrait être Résolu ;D
Je sais le problème vient pas de là, mais avec les explications au-dessus il devrait être Résolu ;D
cassiope
Encore un problème, j'ai une autre page qui prend des utilisateurs dans la base et doit afficher le contenu des utilisateurs dans une page pour l'administrateur, seulement le tableau affiche plusieurs fois la première ligne de la table au lieu d'afficher chaque ligne une fois.
<?php
//connection au serveur
$cnx = mysql_connect( "localhost",... ) ;
//sélection de la base de données:
$db = mysql_select_db( "..." ) ;
$sqlUti = "SELECT Identifiant, Nom, Prenom, Login, Adresse FROM utilisateurs";
$requeteUti = mysql_query($sqlUti);
$donneesUti=mysql_fetch_array($requeteUti); ?>
<table border="1" align="center">
<?php while ($donnees=mysql_fetch_array($requeteUti))
{?>
<tr>
<td>Modifier</td>
<td>Supprimer</td>
</tr>
<tr>
<td>Identifiant</td>
<td><?php echo $donneesUti['Identifiant']; ?></td>
</tr>
<tr>
<td>Nom</td>
<td><?php echo $donneesUti['Nom']; ?></td>
</tr>
<tr>
<td>Prenom</td>
<td><?php echo $donneesUti['Prenom']; ?></td>
</tr>
......
<?php
}
mysql_close(); // Déconnexion de MySQL
?>
</table>
Deuxième question, est ce que quelqu'un sait comment je peux faire afin que l'administrateur puisse modifier et supprimer le contenu d'un champ???
Merci d'avance
<?php
//connection au serveur
$cnx = mysql_connect( "localhost",... ) ;
//sélection de la base de données:
$db = mysql_select_db( "..." ) ;
$sqlUti = "SELECT Identifiant, Nom, Prenom, Login, Adresse FROM utilisateurs";
$requeteUti = mysql_query($sqlUti);
$donneesUti=mysql_fetch_array($requeteUti); ?>
<table border="1" align="center">
<?php while ($donnees=mysql_fetch_array($requeteUti))
{?>
<tr>
<td>Modifier</td>
<td>Supprimer</td>
</tr>
<tr>
<td>Identifiant</td>
<td><?php echo $donneesUti['Identifiant']; ?></td>
</tr>
<tr>
<td>Nom</td>
<td><?php echo $donneesUti['Nom']; ?></td>
</tr>
<tr>
<td>Prenom</td>
<td><?php echo $donneesUti['Prenom']; ?></td>
</tr>
......
<?php
}
mysql_close(); // Déconnexion de MySQL
?>
</table>
Deuxième question, est ce que quelqu'un sait comment je peux faire afin que l'administrateur puisse modifier et supprimer le contenu d'un champ???
Merci d'avance
freto
- Messages postés
- 1542
- Date d'inscription
- vendredi 6 juillet 2007
- Statut
- Membre
- Dernière intervention
- 8 avril 2016
Sa fait plusieurs codes que je vois comme le tiens: vous etes rétiscents à faire des échos d'html en php? oO
Bon en plus clair: ton probleme vient du fait qu'une bouce while que tu referme avec un ?>, perso je trouve sa moche, mais là n'est pas la véritable raison. Je ne pense pas qu'Apache traduise cela de la même manière que toi.
Au lieu de faire un
(ce qui signifierais litéralement: affiche le code html, puis exécute un while vide, puis réaffiche le reste...bref pas ce que tu veut)
Faut faire un
(qui signifie : tant que machin, alors affiche truc)
Pour la modif de champs, c'est soit au niveau conceptuel (tu défini des droits) et tu code ton application en testant à chaque fois si l'utilisateur courant est un admin, soit tu lui laisse un phpmyadmin et si il sait s'en servir, bah c'est jackpot.
Sa dépend des besoins et du cahier des charges.
Bon en plus clair: ton probleme vient du fait qu'une bouce while que tu referme avec un ?>, perso je trouve sa moche, mais là n'est pas la véritable raison. Je ne pense pas qu'Apache traduise cela de la même manière que toi.
Au lieu de faire un
<?php while (machin){ ?> <tr><td>...
(ce qui signifierais litéralement: affiche le code html, puis exécute un while vide, puis réaffiche le reste...bref pas ce que tu veut)
Faut faire un
<?php while (machin){ echo "<tr><td truc=\"bidule\">..."; echo "<tr><td></td></tr>"; }
(qui signifie : tant que machin, alors affiche truc)
Pour la modif de champs, c'est soit au niveau conceptuel (tu défini des droits) et tu code ton application en testant à chaque fois si l'utilisateur courant est un admin, soit tu lui laisse un phpmyadmin et si il sait s'en servir, bah c'est jackpot.
Sa dépend des besoins et du cahier des charges.
cassiope
Ca ne marche pas je reçois le message suivant
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\Program Files\EasyPHP 2.0b1\www
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\Program Files\EasyPHP 2.0b1\www
freto
- Messages postés
- 1542
- Date d'inscription
- vendredi 6 juillet 2007
- Statut
- Membre
- Dernière intervention
- 8 avril 2016
Arrgghhh c'est dommage, il manque quelques caractères dans le copié coller de ton message d'erreur, notamment la ligne de l'erreur.
Auquel cas, je t'aurais demandé de m'envoyer juste la ligne qui pose problème, eventuellement les deux alentours.
Du coup, copie / colle ton code stp.
Auquel cas, je t'aurais demandé de m'envoyer juste la ligne qui pose problème, eventuellement les deux alentours.
Du coup, copie / colle ton code stp.
cassiope
<?php while ($donnees=mysql_fetch_array($requeteUti))
{
echo "<tr>
<td>Identifiant</td>
<td>$donneesUti['Identifiant']</td>
<td>Modifier</td>
<td>Supprimer</td>
</tr>";
}
mysql_close(); // Déconnexion de MySQL
?>
La ligne qui est mentionnée dans le message d'erreur est celle qui contient $donneesUti
{
echo "<tr>
<td>Identifiant</td>
<td>$donneesUti['Identifiant']</td>
<td>Modifier</td>
<td>Supprimer</td>
</tr>";
}
mysql_close(); // Déconnexion de MySQL
?>
La ligne qui est mentionnée dans le message d'erreur est celle qui contient $donneesUti
freto
- Messages postés
- 1542
- Date d'inscription
- vendredi 6 juillet 2007
- Statut
- Membre
- Dernière intervention
- 8 avril 2016
Cela vient de ton $ en plein milieu de ton echo.
Vla la correction
Vla la correction
<?php while ($donnees=mysql_fetch_array($requeteUti)) { echo "<tr> <td>Identifiant</td> <td>".$donneesUti['Identifiant']."</td> <td>Modifier</td> <td>Supprimer</td> </tr>"; } mysql_close(); // Déconnexion de MySQL ?>
cassiope
Est ce que je dois mettre le ; à la fin de tout mon tableau ou après chaque colonne?
Je ne sais pas trop où le placer de cette manière
Je ne sais pas trop où le placer de cette manière
freto
- Messages postés
- 1542
- Date d'inscription
- vendredi 6 juillet 2007
- Statut
- Membre
- Dernière intervention
- 8 avril 2016
Le ; c'est comme le lol des boulets: sa se place en fin de phrase.
Bon treve de plaisanteries, le ; en php se place à la fin de chaque instruction. Donc a la fin de ton echo.
C'est à dire que si tu fait un echo ", c'est après le dernier " qu'il faut placer le ;
Dans ton code, il était donc bien placé.
Bon treve de plaisanteries, le ; en php se place à la fin de chaque instruction. Donc a la fin de ton echo.
C'est à dire que si tu fait un echo ", c'est après le dernier " qu'il faut placer le ;
Dans ton code, il était donc bien placé.
cassiope
C'est bon ça marche de nouveau mais :( même résultat que tout à l'heure : il affiche un tableau avec plusieurs fois le premier enregistrement de mon tableau, je ne comprends pas...
niahoo
- Messages postés
- 247
- Date d'inscription
- lundi 24 décembre 2007
- Statut
- Membre
- Dernière intervention
- 23 mai 2010
$donneesUti=mysql_fetch_array($requeteUti); ?> <table border="1" align="center"> <?php while ($donnees=mysql_fetch_array($requeteUti))
tu repetes deux fois l'instruction fetch_array ...
=>
$sqlUti = "SELECT Identifiant, Nom, Prenom, Login, Adresse FROM utilisateurs"; $requeteUti = mysql_query($sqlUti); echo("<table border=\"1\" align=\"center\">"); while($donnees=mysql_fetch_array($requeteUti)) { etc..