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 :

Affichage des champs mysql en php


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut Affichage des champs mysql en php
    bonjour,
    voici mon code (il semble normal)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    $requete="SELECT * FROM LIVRES WHERE " . $type_recherche . " LIKE '%%" . $terme_recherche . "%%'";
    //$requete="SELECT * FROM LIVRES";
    $resultat = $db->query($requete);
    $nbLig = $resultat->num_rows;
    if (!$nbLig)
    	echo "Aucun livre trouvé&nbsp !<br />";
    else
    	echo "<p>Nombre de livres trouvés&nbsp;: " . $nbLig . "</p>";
    for ($i = 0; $i < $nbLig; $i++)
    {
    	$ligne = $resultat->fetch_object();
    	echo "<p><strong>" . ($i+1) . ". Titre&nbsp;: ";
    	echo htmlspecialchars(stripslashes($ligne->titre));
    	echo "</strong>";
    	echo "<br />Auteur&nbsp;: ";
    	echo stripslashes($ligne->auteur);
    	echo "<br />isbn&nbsp;: ";
    	echo stripslashes($ligne->ISBN);
    	echo "<br />prix&nbsp;: ";
    	echo number_format($ligne->prix,2);
    	echo '</p>';
    }
    $resultat->free();
    $db->close();
    le problème est que quoique je mette dans la clause "select" de la requête, PHP ne récupère que les deux premiers champs (en l'occurrence pour *, il s'agit de ISBN et auteur).
    En ligne de commande dans mysql, ça fonctionne et dans phpmyadmin aussi mais pas avec PHP.
    Quelqu'un aurait déjà eu ce problème ?

  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
    Par défaut
    As-tu controlé ce que contenait $ligne ?

    Au passage tu peux abandonner ton for{} et simplement faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($ligne = $resultat->fetch_object()) {
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    J'ai contrôlé avec is_null() qui me renvoie faux pour les champs non affichés.

    merci pour la boucle.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    pardon, je rectifie... is_null me renvoie VRAI.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    apparemment, ça ne fonctionne pas non plus avec les functions non objets

  6. #6
    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
    Par défaut
    utilise var_dump() pour controler une variable.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    c'est bien sympa comme fonction (j'ai 15 jours de php)
    Voilà ce que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    object(stdClass)#3 (4) 
    {
    ["ISBN"]=>  string(13) "..." 
    ["auteur"]=>  string(14) "..." 
    ["LIVRES"]=>  string(31) "..." 
    ["livres"]=>  string(5) "..."
    }
    ce qui est très bizarre. "ISBN" et "auteur", c'est ok mais "LIVRES", c'est le nom de la base et "livres" celui de la table ?!

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    "LIVRES" et "livres" me renvoie la valeur des champs que je recherche c'est-à-dire "prix" et "auteur".
    Ca pourrait venir de mon windows 64 bits ?
    Sur la page de démarrage de PhpMyAdmin, je n'ai pas d'erreur de cohérence de version de MySQL comme il m'est arrivé et j'ai dû réinstaller une version plus ancienne de MySQL. Actuellement j'ai PHP 5.5.13 et MySQL 5.0.67 : Y a-t'il des incompatibilités entre ces deux versions ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    erratum : "LIVRES" et "livres" me renvoie respectivement "titre" et "prix" mais si j'avais changer l'ordre de la clause SELECT, j'aurais toujours eu les deux champs "invisibles".

  10. #10
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    erratum : "LIVRES" et "livres" me renvoie respectivement "titre" et "prix" mais si j'avais changer l'ordre de la clause SELECT, j'aurais toujours eu les deux champs "invisibles".
    Je ne parviens pas à te suivre.
    De quelle ordre parle tu ? Si on se tient à ton plus haut, les champs ne sont pas nommés car il y a un SELECT * , donc tous les champs sont récupérés.

    Aussi, ton code exploite une classe $db ($db->query), du coup, il y a peut être quelque chose, des explications à ce niveau.
    En somme, que retourne exactement un $db->query() ?
    Même chose pour $resultat->fetch_object().

    Et puis, quelle est la structure de cette table LIVRES ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    Je vais essayer d'être plus clair :

    1)
    Nom de ma base : livres
    Table :
    LIVRES
    Champs :

    ISBN CHAR(13) NOT NULL PRIMARY KEY,
    auteur CHAR(50),
    titre CHAR(100),
    prix FLOAT(4,2)

    2) ex :
    SELECT * : var_dump($ligne) contient les valeurs ci-dessus
    ce qui est l'ordre de création des champs dans la table

    SELECT prix,titre,auteur,ISBN : var_dump($ligne) contient prix,titre,LIVRES,livres

    SELECT titre,auteur,ISBN,prix :var_dump($ligne) contient
    titre,auteur,LIVRES,livres

    D'une manière générale, j'obtiens les deux premiers champs de mon SELECT en tant que propriété de $ligne et les deux derniers s'appellent systématiquement "LIVRES" et "livres". Ces derniers me renvoient par contre les bonnes valeurs (le contenu des deux derniers champs de la clause SELECT).

    3)
    sinon
    var_dump($resultat) <=> object(mysqli_result)#2 (0) { }

    Voilà, j'espère être assez explicite. Si tu as une idée...

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut au secours
    Si quelqu'un peut faire le test chez lui, je peux lui envoyer les sources de mes deux formulaires et les .sql de création et remplissage des tables.
    Ce ne sont pas des données confidentielles, juste un test de débutant php.
    Sinon quelqu'un saurait si le problème peut venir de mon systeme 64 bits ?

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par phphp Voir le message
    Quelqu'un saurait si je suis obligé d'installer apache,php et mysql en 64 bits sur mon windows 7 64bits ? Actuellement, ils sont en 32 bits. Mon problème peut-il venir de ça ?
    help me !
    Rien a voir, d'autant que tu peux paramétrer l'exécution de EasyPhp ou Wamp en mode windows 2000 ! ou si tu veux XP même en win95 si ça te chantes,
    tu auras pour cette application un environement parfait, une vrais machine virtuelle

  14. #14
    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
    Par défaut
    Si tu veux qu'on teste precisemment, fait un dump de ta table.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    Merci pour vos réponses.
    Sabotage : que veux-tu dire par "dump" ? Tu veux les données contenues dedans ?
    Si c'est le cas voici la création (créer une base 'livres' au préalable') :

    CREATE TABLE CLIENTS
    (
    idClient INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    nom CHAR(50) NOT NULL,
    adresse CHAR(100) NOT NULL,
    ville CHAR(30) NOT NULL
    );

    CREATE TABLE COMMANDES
    (
    idCommande INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    idClient INT UNSIGNED NOT NULL,
    montant FLOAT(6,2),
    date DATE NOT NULL
    );

    CREATE TABLE LIVRES
    (
    ISBN CHAR(13) NOT NULL PRIMARY KEY,
    auteur CHAR(50),
    titre CHAR(100),
    prix FLOAT(4,2)
    );

    CREATE TABLE LIVRES_COMMANDES
    (
    idCommande INT UNSIGNED NOT NULL,
    ISBN CHAR(13) NOT NULL,
    quantite TINYINT UNSIGNED,
    PRIMARY KEY(idCommande,ISBN)
    );

    CREATE TABLE COMMENTAIRES_LIVRES
    (
    ISBN CHAR(13) NOT NULL PRIMARY KEY,
    commentaire TEXT
    );
    et les enregistrements

    USE livres;

    INSERT INTO CLIENTS VALUES
    (NULL,'Julie Dupont' ,'25, Rue Noire' ,'TOULOUSE' ),
    (NULL,'Alain Wong' ,'147, Avenue Wong' ,'BORDEAUX' ),
    (NULL,'Alain Wong' ,'147, Avenue Wong' ,'BORDEAUX' );

    INSERT INTO COMMANDES VALUES
    (NULL,3,69.98,'2007-04-02'),
    (NULL,1,49.99,'2007-04-15'),
    (NULL,2,74.98,'2007-04-19'),
    (NULL,3,24.99,'2007-05-01');

    INSERT INTO LIVRES VALUES
    ("0-672-31697-8","Michael Morgan" ,"Java 2 for Professional Developers" ,34.99),
    ("0-672-31745-1","Thomas Down" ,"Installing Debian GNU/Linux" ,24.99),
    ("0-672-31509-2","Pruitt, et al." ,"Teach Yourself GIMP in 24 Hours" ,24.99),
    ("0-672-31769-9","Thomas Schenk" ,"Caldera OpenLinux System Administration Unleashed",49.99);

    INSERT INTO LIVRES_COMMANDES VALUES
    (1,"0-672-31697-8",2),
    (2,"0-672-31769-9",1),
    (3,"0-672-31769-9",1),
    (3,"0-672-31509-2",1),
    (4,"0-672-31745-1",3);

    INSERT INTO COMMENTAIRES_LIVRES VALUES
    ("0-672-31697-8","Morgan's book is clearly written and goes well beyond most of the basic Java books out there.");

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    argh ! désolé, je me suis trompé de balise !
    (mon métier c'est développeur lol)

  17. #17
    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
    Par défaut
    J'ai supposé que tu utilisais mysqli,

    j'ai donc ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $db = mysqli_connect('localhost','root','','test');
    $type_recherche="auteur";
    $terme_recherche="morgan";
    et j'obtiens
    Nombre de livres trouvés : 1

    1. Titre : Java 2 for Professional Developers
    Auteur : Michael Morgan
    isbn : 0-672-31697-8
    prix : 34.99
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  18. #18
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Je reste toujours d'avis que ce ne serait pas ta Bdd qui serait en cause, mais de la manière dont tu l'interroge, en l'occurrence $db.

    Fait un essai avec les fonctions mysql ou mysqli, (peu importe), et non ta classe DB, comme l'a fait @Sabotage.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    Voici les lignes qui manquent au début de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	$db = new mysqli('localhost','jyf','mdp','livres');
    	if (mysqli_connect_errno())
    	{
    		echo "Impossible de se connecter à la base de données.";
    		exit;
    	}
    	$requete="SELECT * FROM LIVRES WHERE $type_recherche LIKE '%$terme_recherche%'";
    Sabotage : tu as les bons résultats, ce que je devrais avoir aussi mais le problème c'est que si tu regardes mon var_dump($ligne), j'ai un problème. Du coup je dois utiliser $ligne->livres pour obtenir $ligne->prix et $ligne->LIVRES pour avoir $ligne->isbn sinon j'obtiens NULL pour ces deux champs (prix et isbn). C'est plutôt très bizarre, n'est-ce pas ?

    Runcodephp : j'ai essayé avec mysqli_connect() et toutes les fonctions "procédurales", j'ai le même problème.

    Du coup, j'utilise, fetch_row et je récupère via un indice et une constante define() mais je serais curieux de comprendre.

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    Alors, je vais continuer dans les trucs bizarres.
    J'ai fait DROP DATABASE livres; et ensuite mysqladmin reload. Dîtes-moi si je me trompe dans la manip'. Puis, j'ai recréé cette base sous le nom "book".
    Même problème et var_dump($ligne) vaut la même chose que précédemment (les mêmes propriétés foireuses s'appellent pareilles -livres et LIVRES- alors que j'ai supprimé la base).
    Est-il possible de récupérer la version de la librairie libmysql.dll à partir de Mysql et de php ? pour les comparer. Quelqu'un sait si mes versions (citées plus haut) sont compatibles ?

Discussions similaires

  1. [MySQL] Contrôler la localisation de l'affichage des champs DATE
    Par Teaniel dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/10/2011, 15h59
  2. [VB6][MYSQL] recuperer des données MySQL via PHP
    Par psykotox dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 18/01/2008, 11h25
  3. [SQL-Server] Affichage des erreurs mssql en php
    Par Laure13 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/05/2006, 12h05
  4. affichage des champs vides
    Par nada83 dans le forum Access
    Réponses: 5
    Dernier message: 02/05/2006, 15h33
  5. Réponses: 5
    Dernier message: 08/03/2005, 13h22

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