Aller au contenu

Un in_array ne veut pas de mon array


Sujets conseillés

Posté

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

Posté

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

Posté (modifié)

Merci de ta réponse portekoi mais ca ne m'aide pas.

En effet mon in_array fait toujours des siennes

Modifié par Locace
Posté (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 :whistling:

Modifié par georges
Posté

Bonjour,

Tu as inversé les paramètres :

if (in_array("un élément", $le_tableau)) {

echo "est dans le tableau";

Posté

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.

Posté

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 ;)

Posté

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...

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...