Impossible de sortir le résultat voulu [Résolu]

Signaler
Messages postés
78
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2015
-
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
-
Bonjour à tous,

Je me suis fais une fonction qui va simplement rechercher le nom sois d'une compagnie qui est développeur, publieur ou bien les 2.

Dans la meme page je demande a 2 reprise cette function mais de facon différente. C'est-à-dire que la première fois je lui demande seulement les 'developper', et par la suite les 'publisher'.

Je réussis à faire afficher les publisher de ma table mais il n'y a rien pour les développeur. Il y a l'erreur suivante qui apparait dans mon code html.

[Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in on line 427
]

voici la partie de on fichier php ou je demande mes arrays (soit developper et publisher) :

-------------------------
$pi = new PTest;
....
$all_devgame = $pi->getAllGameCompanyName(1,0);
foreach($all_devgame as $devgame)
{
echo '<option value="' . $devgame . '" >' . $devgame . '</option>';
}
echo '
</select>
<label>Publisher :</label>
<select name="publisher">';

$all_pubgame = $pi->getAllGameCompanyName(0,1);
foreach($all_pubgame as $pubgame)
{
echo '<option value="' . $pubgame . '" >' . $pubgame . '</option>';
}
echo '
</select>';
....
-------------------------

Et voici la function en tant que tel que j'appelle :

----------------------------
public function getAllGameCompanyName($dev, $pub)
{
$all_gcomp = new ArrayObject;
$req = "";

if($dev 1 && $pub 0)
{
$req "SELECT * FROM gc_company_game WHERE developper 1 ORDER BY name";
}
else if($dev 0 && $pub 1)
{
$req "SELECT * FROM gc_company_game WHERE publisher 1 ORDER BY name";
}
else if($dev 1 && $pub 1)
{
$req "SELECT * FROM gc_company_game WHERE developper 1 AND publisher = 1 ORDER BY name";
}

echo'Requete [' . $req . ']';
$this->connect(); //appelle à la connexion et ça fonctionne :)
$res = mysqli_query($this->conn, $req);
$this->disconnect(); //appelle à la déconnexion et ça fonctionne :)

echo 'Result obtain [' . $res . ']';
while($row = mysqli_fetch_array($res)) // l'erreur apparait ici!!!
{
$all_gcomp->append($row['name']);
}

return $all_gcomp;
}
----------------------------


Comme j'ai dis plus haut les publisher (nom) apparaisse mais pas les développeurs ou l'erreur du mysqli_fetch_array apparait.

Quelqu'un aurait une idée???

SpaceHamAgent

5 réponses

Messages postés
78
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2015

Merci pour l'optimisation de code je vais la placer... et en passant j'ai trouvé le problème. Dans ma table l'élément que je recherche (c'est a dire 'développer' avait un espace au début d'ou le pourquoi il ne trouvais rien du tout.

Merci encore je vais optimiser mon code :)

SpaceHamAgent
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
41
- Dans ton cas, tu peux te passer de l'utilisation de la classe ArrayObject vu la simple utilisation que tu en fais.
- On peut optimiser un peu sur les conditions pour le choix des options de la requête à utiliser (ça viendra avec le temps...)
- mysqli_query($this->conn, $req); $this->conn correspond à quoi ?


Bon comme c'est de l'objet je vais te proposer un code :
<?php
public function getAllGameCompanyName($dev, $pub)
{
$req = 'SELECT * FROM gc_company_game WHERE '.
( ($dev && !$pub) ? 'developper=1' : (($dev && $pub) ? 'developper=1 AND publisher=1' : 'publisher=1')  : '').
' ORDER BY name';
$datas = array();
$conn = $this->connect();	
$res = $conn->query($req);	
while($row = $res->fetch_array(MYSQLI_ASSOC))
$datas[] = $row;	
        $this->disconnect(); 
return (!empty($datas)) ? $datas : FALSE;	
}
?>

Je ne garanti pas le bon fonctionnement du premier coup, car je me suis basé sur des hypothèses de logiques du code. Après teste, un retour de bon ou mauvais fonctionnement serait apprécié.

______________________________________________________________________
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
41
Oups !

[quote=Erroné]$req = 'SELECT * FROM gc_company_game WHERE '.
( ($dev && !$pub) ? 'developper=1' : (($dev && $pub) ? 'developper=1 AND publisher=1' : 'publisher=1') : '').
' ORDER BY name';/quote

[quote=Plutôt]$req = 'SELECT * FROM gc_company_game WHERE '.
( ($dev && !$pub) ? 'developper=1' : (($dev && $pub) ? 'developper=1 AND publisher=1' : 'publisher=1')).
' ORDER BY name';/quote
Un else en trop ! ça arrive lol
______________________________________________________________________
Messages postés
78
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2015

Je te reviens avec ton code pour te confirmer si le tout fonctionne d'accord?


SpaceHamAgent
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
41
J'en tire pas un réel intérêt, c'est plus pour te montrer qu'en ayant plus de logique et de méthodes on peut faire de plus jolie codes : optimisés et compréhensibles pour la suite (mais tout ça vient avec le temps, enfin si on s'en donne la peine). En gros c'est une base quoi !

Après OUI, j'aimerais bien avoir un retour mais bon ce n'est pas une obligation en soi; si le simple faite qu'il fonctionne maintenant te convient ça me convient aussi...


______________________________________________________________________