SpaceHam
Messages postés78Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention22 octobre 2015
-
10 août 2011 à 21:57
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 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) :
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 :)
SpaceHam
Messages postés78Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention22 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.
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 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é.
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 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
______________________________________________________________________
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 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...