Locace Posté 8 Février 2007 Posté 8 Février 2007 Bonjour, Je vous livre en pature un bout de code qui reste mysterieux a mes yeux de néophyte. <fieldset> <legend>Accessoires disponibles</legend> <table> <tr class="head"> <td>Ref</td> <td>Nom</td> <td>Lier</td> </tr> <? // On récupère TOUS les accessoires $requete_tous_accessoires = mysql_query("SELECT * FROM accessoire"); while ($data_tous_accessoire = mysql_fetch_array($requete_tous_accessoires)); { $id_tous_accessoire = $data_tous_accessoire['id']; $requete_liaisons = mysql_query("SELECT id_accessoire FROM couple_pdt_acc WHERE id_produit='$id_produit'"); while ([b]$id_accessoire_liaison [/b] = mysql_fetch_array($requete_liaisons)); { echo '<pre>'; print_r($id_accessoire_liaison); echo '</pre>'; if (!in_array ("$id_tous_accesoire", [b]$id_accessoire_liaison[/b])) { echo '<tr>'; echo '<td>'; echo $data_tous_accessoire['ref']; echo '</td>'; echo '<td>'; echo $data_tous_accessoire['nom']; echo '</td>'; echo '<td><input name="liaison['.$id.']" type="checkbox" value="'.$id_tous_accessoire.'" /></td>'; echo '</tr>'; } } } ?> </table> </fieldset> Le problème est sur ma variable $id_accessoire_liaison . La fonction in_array ne la reconnait pas en tant que array puisque PHP me sort l'erreur suivante : Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home.10.8/emphasel/www/case_a_vins/admin/produit.php on line 301 Chose d'autant plus étrange que quand je vire le WHILE qui encadre ma variable $id_accessoire_liaison, alors ce problème d'argument n'apparait plus, mais (car il y a toujours un mais) le array $id_accessoire_liaison ne contient que un seul enregistrement au lieu de plusieurs. Qu'en pensez vous ? Bonne journée
Portekoi Posté 8 Février 2007 Posté 8 Février 2007 Bonjour, Déjà, tu récupères la variables $id_tous_accessoire alors que dans ta requête, tu as $id_produit. Remplace ceci : $requete_liaisons = mysql_query("SELECT id_accessoire FROM couple_pdt_acc WHERE id_produit='$id_produit'"); par : $requete_liaisons = mysql_query("SELECT id_accessoire FROM couple_pdt_acc WHERE id_produit='$id_produit'") or die(mysql_error()); ++ Portekoi
Locace Posté 8 Février 2007 Auteur Posté 8 Février 2007 (modifié) Merci de ta réponse portekoi mais ca ne m'aide pas. En effet mon in_array fait toujours des siennes Modifié 8 Février 2007 par Locace
georges Posté 8 Février 2007 Posté 8 Février 2007 (modifié) if (!in_array ("$id_tous_accesoire", $id_accessoire_liaison)) retire les "" if (!in_array ($id_tous_accesoire, $id_accessoire_liaison)) edit je dis des betises Modifié 8 Février 2007 par georges
Portekoi Posté 8 Février 2007 Posté 8 Février 2007 Et si tu fais un is_array() juste au dessus, il renvoie quoi?
Anonymus Posté 12 Février 2007 Posté 12 Février 2007 Bonjour, Tu as inversé les paramètres : if (in_array("un élément", $le_tableau)) { echo "est dans le tableau";
TheRec Posté 12 Février 2007 Posté 12 Février 2007 Euh... non il les a mis dans le bon ordre, mais effectivement le nom des variables qu'il a utilisé peuvent porter à confusion. Sinon je penche pour la même solution que georges, les guillemets sont de trop. Mais je pense plutôt que tu devrais essayer d'utiliser les jointures entre tes tables pour faire ce genre de requêtes (c'est à ça que ça sert), car une requête dans une boucle peut s'avérer très coûteuse en ressource lors de la montée en charge.
Sarc Posté 12 Février 2007 Posté 12 Février 2007 Bonjour, Gardez en tête que print_r() place le pointeur de tableau à la fin du tableau. Utilisez reset() pour le ramener au début. Je ne sais pas si ça change quelque chose pour un in_array, mais sait-on jamais... De plus, il manque un s à ta première variable if (!in_array ($id_tous_accesoire, $id_accessoire_liaison)) accesoire => accessoire Essaye avec tout ce qui a été dit
TheRec Posté 12 Février 2007 Posté 12 Février 2007 Oh oui Comme quoi, on est tous passé à côté de cette faute "d'orthographe" sauf sarc, bravo Les guillemets restent superflus mais ne doivent pas gêner...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant