IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Ordre des champs avec la fonction mysql_fetch_array [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut Ordre des champs avec la fonction mysql_fetch_array
    Bonsoir,

    je voudrais savoir quel est l'ordre des champs que l'on obtient avec la fonction "mysql_fetch_array". En effet, ils n'ont rien à voir avec l'ordre que l'on voit avec un "desc nom_table" et rien non plus avec l'ordre utilisé lors de la création des lignes (avec un "insert into nom_table"). Et beaucoup plus gênant, il y a un champ que j'écris avec un "insert into nom_table", et que je ne retrouve pas avec "mysql_fetch_array". Auriez-vous une explication ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu parles a la fois des champs et des lignes

    Les champs sont dans le meme ordre que dans la requete SELECT.
    Les lignes sont classés par la clause ORDER BY si elle est précisée, dans un ordre indeterminé sinon.

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    OK, ça m'a donné une bonne idée car dans mon select, il n'y avait pas le champ que je voulais... mais quel serait l'ordre des champs en cas d'un "select * from nom_table" ?

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Nouvel question : comment récupérer l'identifiant de la ligne (il existe forcément vu que c'est la clé primaire) ? Faut-il faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from nom_table
    , et dans ce cas, l'ordre des champs avec "mysql_fetch_array" est-il celui que l'on obtient avec un desc ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Il n'est pas obligatoire qu'une clé primaire porte sur un champ "identifiant" (j'imagine que tu parles d'un champ type int + auto increment).
    Une clé primaire peut porter sur n'importe quoi, voir même plusieurs champs, bien que je ne sache pas si c'est vraiment conseillé.

    A priori lorsque tu executes une requete "select *..." les champs sont ordonnés comme ils ont été organisés dans la base de donnée.

    Accessoirement l'ordre des champs renvoyés par une requête n'a aucune importance lorsque tu utilises mysql_fetch_array() vu que cette fonction te restitue un tableau associatif. A moins de vouloir le traverser avec une boucle du style foreach, ce qui n'est pas la meilleure chose à faire.

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Ca peut ne pas porter sur un champ "identifiant", mais c'est une habitude que j'ai prise. Il est bien du type int et auto_increment.
    Je me suis douté que les champs étaient ordonnés comme avait été définie la base, et pour moi, c'était important, vu que j'ai passé la constante "MYSQL_NUM" à la fonction et que donc, ça me retourne un tableau indicé. Donc je n'ai plus de souci avec ça, par contre j'en ai un autre : j'avais développé un forum en php, et quand je l'affiche, si l'auteur a le même login que l'utilisateur connecté, je rajoute un lien qui donne la possibilité de modifier le message. Le problème, c'est que quand c'est le cas, j'écris une variable de session qui contient le texte, et comme je fais une boucle pour afficher toutes les lignes du forum, cette variable de session correspond toujours au dernier message écrit par cet utilisateur (comme l'ordre d'affichage est inversé, le dernier est le plus ancien). Comment résoudre ça pour donner la possibilité de modifier tous les messages dont on est l'auteur ?

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    c'est que quand c'est le cas, j'écris une variable de session qui contient le texte
    Le texte de quoi ?

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Le texte du post de l'utilisateur (pour mieux comprendre, va voir le forum que j'ai mis en lien dans mon post précédent ; dans la colonne à droite, tu ne pourras pas le voir, mais si on est l'auteur d'un post, il y a un lien pour modifier ce texte, et c'est justement là que le bas blesse.)

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ah tu mets le texte en session, pour pouvoir l'afficher dans le formulaire de modification ?

    Il faudrait déja commencer par différencier tes boutons car sinon, tu ne sauras jamais quel message tu veux modifier.
    tu as juste à passer l'id du message dans ton lien :
    http://forumvhs.free.fr/modifier.php?id=45646

    A l'arrivée, tu lis l'id transmis, tu verifies que l'utilisateur en est bien l'auteur, et tu lis dans la base les informations du message.
    Ca se fait meme en une seule requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (isset($_GET['id'])) {
    $sql = "SELECT champs FROM table WHERE id = " . intval($_GET['id']) . " AND auteur = " . $_SESSION['user']
    }

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Peux-tu me dire où est mon bug dans la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_GET["id_forum"])) {
    $sql = 'SELECT text FROM forum_vhs WHERE id_forum = " . intval($_GET["id_forum"])."';
    $sql = stripslashes($sql);
    $result = mysql_query($sql) or die(mysql_error());
    }
    J'y ai mis les noms vraiment utilisés, mais elle ne lui plait pas. (et j'ai viré ta condition sur l'auteur, car l'id étant unique, à mon avis, ça suffit et l'utilisateur est forcément l'auteur car s'il ne l'est pas, il n'a pas le bouton "modifier")

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu commences ta chaine par ' et tu la fini par "

    Concernant l'auteur, le fait de ne pas avoir le lien, ca n'empêche pas quelqu'un d'accéder a la page en tapant l'adresse de n'importe quel essage et donc de modifier n'importe quel message.

  12. #12
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu commences ta chaine par ' et tu la fini par "
    Pas vraiment, le " qui est à la fin, c'est pour fermer le where id_forum= (et il y a aussi après un ')
    Citation Envoyé par sabotage Voir le message
    Concernant l'auteur, le fait de ne pas avoir le lien, ca n'empêche pas quelqu'un d'accéder a la page en tapant l'adresse de n'importe quel essage et donc de modifier n'importe quel message.
    Oui, c'est vrai mais il aura besoin de connaître la syntaxe http://forumvhs.free.fr/modifier.php?id=xxx, ce qui n'est pas donné à tout le monde...

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bon je te le fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT text FROM forum_vhs WHERE id_forum = "' . intval($_GET["id_forum"]).'"';
    Oui, c'est vrai mais il aura besoin de connaître la syntaxe http://forumvhs.free.fr/modifier.php?id=xxx, ce qui n'est pas donné à tout le monde...
    Ba ca sera affiché en toutes lettres dans la barre d'adresse, il aura juste a changer le numéro.
    Le jour ou quelqu'un aura changé tous tes messages, tu regretteras peut etre de n'avoir pas mis le WHERE.

  14. #14
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Bon je te le fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT text FROM forum_vhs WHERE id_forum = "' . intval($_GET["id_forum"]).'"';
    Merci je ne risquais pas de deviner. Comme je suis au boulot, que le serveur de mon employeur est aux US, que le forum est chez Free, et que pour aller chez Free, il faut être en métropole, je ne testerai que ce soir.

    Citation Envoyé par sabotage Voir le message
    Ba ca sera affiché en toutes lettres dans la barre d'adresse, il aura juste a changer le numéro.
    Le jour ou quelqu'un aura changé tous tes messages, tu regretteras peut etre de n'avoir pas mis le WHERE.
    Oui, encore faut-il qu'il connaisse le numéro... Et plus ennuyeux, je n'ai nulle part cette info du nom de l'utilisateur (d'ailleurs, dans ce forum, ce nom est le login...)

  15. #15
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu l'as bien l'id de l'auteur puisque tu lui mets un bouton "modifier" si c'est lui qui est connecté.

    Quand à deviner le numéro d'un message ce n'est pas trop dur, je suppose que l'id est autoincrementé.

  16. #16
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    J'ai bien le login de l'auteur : si je teste que c'est le même que celui de l'utilisateur, ça fait l'affaire ?
    Sinon, effectivement, l'id est auto-incrémenté, donc en tâtonnant un peu, on peut vite comprendre.

  17. #17
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    J'ai utilisé ton code et il marche bien () ; je teste également si c'est bien l'auteur qui cherche à modifier son post, et ça marche aussi, par contre, je coince ailleurs, et j'ai ait un autre fil de discussion.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec ordre des champs d’une requête
    Par Bonero dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/10/2012, 10h44
  2. Réponses: 3
    Dernier message: 23/10/2005, 22h06
  3. [débutant] Ordre des champs de saisie par la touche tab
    Par almisuifre dans le forum C++Builder
    Réponses: 10
    Dernier message: 03/03/2005, 19h45
  4. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 06h53
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo