Php : contenu d'une BDD sur un site web [Résolu/Fermé]

Signaler
-
Messages postés
48
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
12 juin 2010
-
Bonjour,
je réalise un site et j'ai besoin d'intégrer dans un tableau le contenu de certains champs de ma base de données.
J'ai trouvé du code mais ca ne marche pas je ne comprends pas!


<?php
//connection au serveur
$cnx = mysql_connect( "localhost" ...) ;

//sélection de la base de données:
$db = mysql_select_db( "nomBase" ) ;

$sql = "SELECT nom, prenom, statut FROM uti where Id='1'";
$requete = mysql_query($sql);

?>
<table border="1" align="center">
<tr>
<td>Nom</td>
<td>15 <?php echo $sql['nom']; ?></td>
<tr>
<tr>
<td>Prénom</td>
<td>15 <?php echo $sql['prenom']; ?></td>
<tr>
<tr>
<td>Statut</td>
<td>15 <?php echo $sql['statut']; ?></td>
<tr>
</table>


Sur mon tableau, au lieu d'afficher le réel contenu du champ un S s'affiche pour les trois ligne... Je ne comprends pas.

12 réponses

Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
152
Bonjour.
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.
}
?>

Messages postés
674
Date d'inscription
samedi 15 avril 2006
Statut
Membre
Dernière intervention
30 août 2010
101
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 ;)
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
152
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.
Messages postés
674
Date d'inscription
samedi 15 avril 2006
Statut
Membre
Dernière intervention
30 août 2010
101 >
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 ;)

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
Merci à tous ça marche!!C'est parfait!
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
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
152
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
<?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
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
152
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.
<?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
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
152
Cela vient de ton $ en plein milieu de ton echo.
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
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
152
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é.
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...
Messages postés
247
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
23 mai 2010
19
$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??
Messages postés
48
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
12 juin 2010
4
Bah là il faut gérer un niveau admin : Si l'utilisateur est admin alors il peut modifier les champs.