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

Langage PHP Discussion :

Fatal error: Uncaught TypeError: mysqli_fetch_array()


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Fatal error: Uncaught TypeError: mysqli_fetch_array()
    Bonjour à tous !
    J'essaie ce forum en ultime recours... J'ai une erreur dans mon php que je ne comprend pas -->
    Fatal error: Uncaught TypeError: mysqli_fetch_array(): Argument #1 ($result) must be of type mysqli_result, bool given in C:\xampp\htdocs\tourmonde\lired_tm.php:113 Stack trace: #0 C:\xampp\htdocs\tourmonde\lired_tm.php(113): mysqli_fetch_array(false) #1 {main} thrown in C:\xampp\htdocs\tourmonde\lired_tm.php on line 113
    Voici mon code :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    	//connexion à la base de donnees
    	$connexion=mysqli_connect("localhost", "root", "") ;
    	mysqli_select_db($connexion,"tourmonde");
    	//on vérifie que la connexion se fait bien
    	if(!$connexion){
                    die('Erreur : ' .mysqli_connect_error());
                }
                //echo 'Connexion réussie';
     
    	// Création de la requête
    	$req='SELECT Commentaire, Pseudo, IdAvis FROM avis, utilisateurs WHERE avis.IdUser=utilisateur.IdUser AND IdD='.$num.';';
    	//echo $req;
     
     
    	// Envoi de la requête et récupération du résultat dans $res
    	$res=mysqli_query($connexion, $req);
     
    	// On traite chaque destination
    	while ($recup_avis=mysqli_fetch_array($res)){    --> voici la ligne 113 (même si je sais qu'en général ce n'est même pas la ligne donnée qui pose problème, en tout cas d'après mon expérience)
    	// On récupère le pseudo
    	$pseudo_user=$recup_avis['Pseudo'];
    	// On récupère le commentaire
    	$commentaire=$recup_avis['Commentaire'];
    	
    	$avis=$recup_avis['IdAvis'];
    
    	// Affichage des différentes informations dans le tableau
    	
    	echo '<tr><td>'.$pseudo_user.'</a></td><td>'.$commentaire.'</td><td><a href="supprimer_tm.php?IdAvis='.$recup_avis['IdAvis'].'&?Pseudo='.$recup_avis['Pseudo'].'">Supprimer</td></tr>';
    
    }
    
    	//Fermeture de la connexion
    	mysqli_close($connexion) ;	
    	
    	
    
    
    ?>
    La connexion à la base se fait sans problème, de plus, ce code est un copier coller d'un ancien projet où il fonctionnait très bien.
    Après des recherches sur internet je ne comprend pas vraiment pas où est le soucis..
    Je viens alors vous demander de l'aide !
    Merci pour votre attention !

    Bonne journée à tous !

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    FROM avis, utilisateurs WHERE avis.IdUser=utilisateur.IdUser

    Ta requête échoue. Un coup tu mentionnes utilisateurs, un autre utilisateur, faut se mettre d'accord


    [EDIT]
    J'en profite pour ajouter que c'est bien de préciser l'opérateur de jointure, ça rend la requête plus claire => INNER JOIN
    Que c'est plus lisible de placer le critère de jointure dans le ON du JOIN plutôt que dans le WHERE => Meilleure sémantique (jointure interne classique plutôt que produit cartésien filtré), toujours plus de lisibilité
    Ce qui donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Commentaire, Pseudo, IdAvis 
    FROM avis INNER JOIN utilisateurs ON avis.IdUser = utilisateurs.IdUser
    WHERE IdD = $num
    Et qu'ayant deux champs avec le même nom, tu peux utiliser USING :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Commentaire, Pseudo, IdAvis 
    FROM avis INNER JOIN utilisateurs USING (IdUser)
    WHERE IdD = $num
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Merci beaucoup, autre erreur
    Bonjour, merci beaucoup pour votre réponse !
    C'est un projet qui nous a été demandé avec 1 mois pour le réaliser, n'étant pas très à l'aise en programmation de base j'ai toujours du mal à retrouver mes erreurs même les plus obvious...

    Si je peux vous demander encore de l'aide j'ai la même erreur sur la même page, explications :
    Pour accéder à la page il y a deux solutions :
    1. Cliquer sur un 'ici' sur la page d'accueil qui mène à une page qui récapitule les destinations puis il suffit de cliquer sur une destination et cela affiche le détails. (grâce à vous le problème lié à cette façon d'y accéder est réglée)
    2. Sur la page d'accueil il y a un tableau présentant les destinations avec possibilité de cliquer directement sur la destination que l'on souhaite, cependant cela ne marche pas. (alors que cela fonctionne avec la première façon d'accéder)

    Voici le message d'erreur :
    Fatal error: Uncaught TypeError: mysqli_fetch_array(): Argument #1 ($result) must be of type mysqli_result, bool given in C:\xampp\htdocs\tourmonde\lired_tm.php:57 Stack trace: #0 C:\xampp\htdocs\tourmonde\lired_tm.php(57): mysqli_fetch_array(false) #1 {main} thrown in C:\xampp\htdocs\tourmonde\lired_tm.php on line 57
    Voici mon code :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
    	//connexion à la base de donnees
    	$connexion=mysqli_connect("localhost", "root", "") ;
    	mysqli_select_db($connexion,"tourmonde");
    	//on vérifie que la connexion se fait bien
    	if(!$connexion){
                    die('Erreur : ' .mysqli_connect_error());
                }
                //echo 'Connexion réussie';
     
    	// Création de la requête
    	$req='SELECT IdD, NomD, Photo, Resume, Tarif FROM destination WHERE IdD='.$num.';';
    	//echo $req;
     
     
    	// Envoi de la requête et récupération du résultat dans $res
    	$res=mysqli_query($connexion, $req);
     
    	// On traite chaque destination
    	while ($recup_destination=mysqli_fetch_array($res)){ --> voici la ligne 57
    	$num_destination=$recup_destination['IdD'];
    	// On récupère le nom
    	$nom_destination=$recup_destination['NomD'];
    	// On récupère l'image
    	$photo_destination=$recup_destination['Photo'];
    	// On récupère le resume
    	$contenu_destination=$recup_destination['Resume'];
    	// On récupère le tarif
    	$tarif_destination=$recup_destination['Tarif'];
     
     
     
    	// Affichage des différentes informations dans le tableau
     
    	echo '<tr><td>'.$nom_destination.'<br/><img height ="400px" src="images_destination/'.$photo_destination.'"/></td><td>'.$contenu_destination.'</td><td>'.$tarif_destination.'</td></tr>';
     
    }
     
    	//Fermeture de la connexion
    	mysqli_close($connexion) ;	
     
     
     
     
    ?>

    PS : Merci pour votre méthode je vais essayer cela !

    Encore un grand merci pour votre attention et votre temps !

    Bonne journée à tous !

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    C'est normal que tu aies du mal, tu ne testes pas les retours de requêtes.

    mysqli_fetch te dit que tu lui donnes en paramètre un booléen et pas un jeu de résultat

    Il faut que tu testes le retour de mysqli_query et s'il est false que tu appelles mysqli_error pour en connaître la raison

    Tu as des exemples d'utilisation dans la doc :
    https://www.php.net/manual/fr/mysqli.query.php
    https://www.php.net/manual/fr/mysqli.error.php
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

Discussions similaires

  1. Fatal error: Uncaught TypeError: must be an instance of, array given
    Par Demirdiouff dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/06/2019, 16h56
  2. [MySQL] Fatal error: Uncaught exception 'MySQLExeption'
    Par mademoizel dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 06/12/2010, 01h34
  3. [Smarty] Fatal error: Uncaught exception 'SmartyException'
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 20/11/2010, 11h24
  4. [Web Service] Fatal error: Uncaught SoapFault exception: [Client]..
    Par rosita dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 02/04/2010, 10h16
  5. Réponses: 1
    Dernier message: 16/02/2009, 14h00

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