Tableau en MySQLi [Résolu]

Messages postés
201
Date d'inscription
mercredi 2 mars 2011
Statut
Membre
Dernière intervention
28 septembre 2014
- - Dernière réponse : Gabilach
Messages postés
201
Date d'inscription
mercredi 2 mars 2011
Statut
Membre
Dernière intervention
28 septembre 2014
- 28 sept. 2014 à 01:11
Bonjour, voila mon problème est que j'aimerai faire un tableau en MySQLi, autrefois j'avais un tableau en mysql que j'ai refait en mysqli, mais problème j'obtient une erreur : "mysqli_fetch_array() expects parameter 1 to be mysqli_result"

J'ai essayer plusieurs choses en vain. Voici mon code source :

<table id="tableSQL" class="tablesorter vertical_middle extra_columns_table" style="width: 95%">
<thead>
<tr>
<th style="width: 4%" class="header">ID</th>
<th style="width: 5%" class="header">ID Client</th>
<th style="width: 10%" class="header">Nom & Prénom</th>
<th style="width: 4%" class="header">Téléphone</th>
<th style="width: 12%" class="header">Panne</th>
<th style="width: 6%" class="header">Matériel</th>
<th style="width: 15%" class="header">Travail Effectué</th>
<th style="width: 8%" class="header">Date et Heure</th>
<th style="width: 4%" class="header">Statut</th>
</tr>
</thead>
<?php
$req0 = mysqli_query($dbkb, "SELECT id, clientid, panne, diag, hardware, fait, timestamp, stat, urgent FROM tbl_sav WHERE stat LIKE '0' OR stat LIKE '1' OR stat LIKE '2' OR stat LIKE '3'");
while($dn0 = mysqli_fetch_array($req0)){
$req1 = mysqli_query($dbkb, 'SELECT name, phone FROM tbl_clients WHERE id="'.$dn0['clientid'].'"');
while($dn1 = mysqli_fetch_array($req1)){
?>
<tr>
<td><?php echo $dn0['id']; ?></td>
<td><?php echo $dn0['clientid']; ?></td>
<td><a href="client.php?id=<?php echo $dn0['clientid']; ?>"><?php echo $dn1['name']; ?></a></td>
<td><?php echo $dn1['phone']; ?></td>
<td><a href="sav.php?id=<?php echo $dn0['id']; ?>"><?php echo substr($dn0['panne'], 0, 40); ?></a></td>
<td><?php echo substr($dn0['hardware'], 0, 20); ?></td>
<td><?php echo substr($dn0['fait'], 0, 25); ?></td>
<?php
if ($dn0['urgent'] == "1"){
echo '<td style="color: red">';
} else {
echo '<td>';}
echo $dn0['timestamp']; ?></td>
<?php
if ($dn0['stat'] == "0"){
?>
<td>Réceptionné</td>
<?php
} else if ($dn0['stat'] == "1"){
?>
<td>En cours</td>
<?php
} else if ($dn0['stat'] == "2"){
?>
<td>Terminé</td>
<?php
} else if ($dn0['stat'] == "3"){
?>
<td>Appelé</td>
<?php
}
?>
</tr>
<?php
}}
?>
</table>

Merci d'avance.
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
14423
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 avril 2019
155
2
Merci
De base, j'utilise la notation objet :
$req0 = $dbkb->mysqli_query("SELECT ...");

Sinon, la bonne pratique conseil de mettre la requête dans une variable intermédiaire pour pouvoir si possible l'afficher en cas de debug.

stat est un champ de type texte ?
Pourquoi utiliser LIKE alors que tu test une égalité ?
Dans ton test, tu peux aussi faire WHERE stat IN ('0','1','2','3')

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 111 internautes nous ont dit merci ce mois-ci

jordane45
Messages postés
25248
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 avril 2019
366 -
J'ajouterai également.. qu'avant de lancer tes "boucles" il vaut mieux tester que la requête a retourné quelque chose...

$sql0 = "SELECT id, clientid, panne, diag, hardware, fait, timestamp, stat, urgent 
FROM tbl_sav 
WHERE stat IN ('0','1','2','3')";

$req0 = mysqli_query($sql0) ;
if($req0){
	while($dn0 = mysqli_fetch_array($req0)){
	  $sql1 = 'SELECT name, phone 
            FROM tbl_clients
           WHERE id="'.$dn0['clientid'].'"';
      	$req1 = mysqli_query($sql1);
              if($req1){
		while($dn1 = mysqli_fetch_array($req1)){

                   // le reste de ton code....

                 } // Fin while $dn1
           }//fin IF req1

    } // Fin while $dn0
} // Fin if $req0



Par contre... tu fais DEUX requêtes... alors que je pense que tu pourrais n'en faire qu'une avec une jointure...?

SELECT *
FROM  tbl_sav S
         ,tbl_clients C
WHERE S.clientid = C.id
AND S.stat IN ('0','1','2','3')";


Ou encore :

SELECT *
FROM  tbl_sav S
LEFT JOINT tbl_clients C ON S.clientid = C.id
WHERE  S.stat IN ('0','1','2','3')";
Commenter la réponse de NHenry
Messages postés
14423
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 avril 2019
155
0
Merci
Bonsoir,

As-tu vérifié ta requête SQL ? C'est souvent la cause du problème.
Gabilach
Messages postés
201
Date d'inscription
mercredi 2 mars 2011
Statut
Membre
Dernière intervention
28 septembre 2014
-
J'ai déjà vérifié la requête SQL, aucun problème de ce coter.
NHenry
Messages postés
14423
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 avril 2019
155 -
As-tu essaye de remplacer :
mysqli_fetch_array($req0)
par
$req0->mysqli_fetch_array()
?
Gabilach
Messages postés
201
Date d'inscription
mercredi 2 mars 2011
Statut
Membre
Dernière intervention
28 septembre 2014
-
J'obtient cette erreur : "Call to undefined method mysqli_result::mysqli_fetch_array()"

Je ne suis pas sur d'avoir fait sa correctement :

$req0 = mysqli_query($dbkb, "SELECT id, clientid, panne, diag, hardware, fait, timestamp, stat, urgent FROM tbl_sav WHERE stat LIKE '0' OR stat LIKE '1' OR stat LIKE '2' OR stat LIKE '3'");
while($dn0 = $req0->mysqli_fetch_array()){
$req1 = mysqli_query($dbkb, 'SELECT name, phone FROM tbl_clients WHERE id="'.$dn0['clientid'].'"');
while($dn1 = $req1->mysqli_fetch_array()){
NHenry
Messages postés
14423
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 avril 2019
155 -
Où et comment est initialisé : $dbkb
Commenter la réponse de NHenry
Messages postés
201
Date d'inscription
mercredi 2 mars 2011
Statut
Membre
Dernière intervention
28 septembre 2014
0
Merci
Problème résolu, une erreur très idiote de ma part, je me suis tromper de colonne, et je faisait les tests SQL sur la mauvaise base...
Grosse erreur d'inattention de ma part, désoler !
Merci pour l'aide apporter !
Commenter la réponse de Gabilach

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.