Php : contenu d'une BDD sur un site web
Résolu/Fermé
cassiope
-
11 févr. 2009 à 14:54
akuma06 Messages postés 48 Date d'inscription dimanche 10 août 2008 Statut Membre Dernière intervention 12 juin 2010 - 21 févr. 2009 à 03:03
akuma06 Messages postés 48 Date d'inscription dimanche 10 août 2008 Statut Membre Dernière intervention 12 juin 2010 - 21 févr. 2009 à 03:03
A voir également:
- Php : contenu d'une BDD sur un site web
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- \R php ✓ - Forum PHP
- Php alert ✓ - Forum PHP
- Retour a la ligne php - Forum Webmastering
12 réponses
freto
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
162
11 févr. 2009 à 15:08
11 févr. 2009 à 15:08
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. } ?>
Utilisateur anonyme
11 févr. 2009 à 15:09
11 févr. 2009 à 15:09
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
162
11 févr. 2009 à 15:49
11 févr. 2009 à 15:49
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.
Utilisateur anonyme
>
freto
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
21 févr. 2009 à 02:07
21 févr. 2009 à 02:07
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
11 févr. 2009 à 15:14
11 févr. 2009 à 15:14
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
162
12 févr. 2009 à 17:27
12 févr. 2009 à 17:27
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.
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
162
12 févr. 2009 à 17:39
12 févr. 2009 à 17:39
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.
<?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
162
12 févr. 2009 à 17:55
12 févr. 2009 à 17:55
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 ?>
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
162
12 févr. 2009 à 18:07
12 févr. 2009 à 18:07
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é.
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
19
12 févr. 2009 à 19:05
12 févr. 2009 à 19:05
$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..
Merci beaucoup ça marche !!!! ^^
Sinon une idée pour la modification et suppression du contenu des champs??
Sinon une idée pour la modification et suppression du contenu des champs??
akuma06
Messages postés
48
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
12 juin 2010
4
21 févr. 2009 à 03:03
21 févr. 2009 à 03:03
Bah là il faut gérer un niveau admin : Si l'utilisateur est admin alors il peut modifier les champs.