Impossible de sortir le résultat voulu

Résolu
SpaceHam Messages postés 78 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 22 octobre 2015 - 10 août 2011 à 21:57
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 - 12 août 2011 à 02:01
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

SpaceHam Messages postés 78 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 22 octobre 2015
11 août 2011 à 04:35
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
3
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
11 août 2011 à 02:01
- 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é.

______________________________________________________________________
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
11 août 2011 à 02:05
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
______________________________________________________________________
0
SpaceHam Messages postés 78 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 22 octobre 2015
11 août 2011 à 04:36
Je te reviens avec ton code pour te confirmer si le tout fonctionne d'accord?


SpaceHamAgent
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
12 août 2011 à 02:01
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...


______________________________________________________________________
0
Rejoignez-nous