[Résolu] Implode, explode et boucle for

Selcontest
Invité n'ayant pas de compte PHPfrance

30 juin 2012, 00:48

Bonsoir à tous,

J'ai un petit soucis que je ne vois pas comment régler. Je suis débutant en PHP donc j'ai un peu de mal pour le moment.

J'expose mon problème :

J'ai un formulaire qui comporte des checkbox, lors de l'envoie de mon formulaire sur ma BDD j'implode mes checkbox dans un seul champ de la base de donnée. Par la suite, j'aimerais pouvoir modifier les informations du formulaire, je créer donc une page avec un formulaire identique et je récupérer les informations de ma BDD. J'aimerais donc pouvoir checker les checkbox qui ont était imploder dans ma BDD, j'effectue donc un explode puis une boucle for.

Voici l'exemple :
//Implode dans le BDD
$genre = $_POST['genre']; 
$genre = implode(', ',$genre);

//Explode sur mon nouveau formulaire
$genre = explode(', ',$donnees['Genre']);
for($i=0; $i<count($genre); $i++)
{
if($genre[$i] == "Rock")
{
	echo "<input type='checkbox'  name='genre[]' id='rock' value='Rock' checked/>
Rock<br />";
}
else{
	echo "<input type='checkbox'  name='genre[]' id='rock' value='Rock'/>
Rock<br />";
}
}
Mon soucis est que si il existe 2 genres (ex : Rock et Metal) dans ma base de donnée, il me génère 2 fois la même information mais en cochant a chaque fois la bonne information.

Exemple :

Image

La solution serait peut être de supprimer les doublons ? Mais je n'ai pas trouvé comment faire !

Merci d'avance ! :D

Mammouth du PHP | 2278 Messages

30 juin 2012, 10:07

Je suppose que ce n'est qu'une partie du code, vu l'image jointe,mais essaie pou nous faire comprendre ce qu'on récupère de la BDD
//Explode sur mon nouveau formulaire
$genre = explode(', ',$donnees['Genre']);
print_r($genre);// ajouté pour comprendre ce qu'on récupère de la BDD
for($i=0; $i<count($genre); $i++)
{
    if($genre[$i] == "Rock")
    {
        echo "<input type='checkbox'  name='genre[]' id='rock' value='Rock' checked='checked' />Rock<br />"; //modifié
}
else
{
        echo "<input type='checkbox'  name='genre[]' id='rock' value='Rock' />Rock<br />"; //modifié
}
}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Selcontest
Invité n'ayant pas de compte PHPfrance

30 juin 2012, 17:38

Effectivement ce n'est qu'une partie du code.

Si dans mon formulaire j'ai sélectionné 'Rock' et 'Metal' je stock dans ma BDD 'Rock, Metal' grâce a l'explode.

Donc mon print_r($genre) me donnera : Array ( [0] => Rock [1] => Metal )

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 juil. 2012, 08:30

En fait, ta boucle devrait uniquement parcourir la liste des différentes options possibles de tes checkbox pour les afficher (donc il ne faut pas boucler sur le tableau $genre, mais juste sur ta liste de cases). Ca c'est pour la liste des valeurs à afficher, indépendamment des valeurs sélectionnées que tu as en base.

Dans cette boucle, pour chaque valeur que tu affiches, tu dois tester si celle-ci a été sélectionnée (tu peux utiliser in_array() pour vérifier si la valeur que tu es en train d'afficher est dans le tableau $genre) pour ajouter ou non l'attribut checked :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Selcontest
Invité n'ayant pas de compte PHPfrance

01 juil. 2012, 17:37

Ah parfait Ryle, ça marche parfaitement !

Je te remercie ! :D

(Le sujet peut être mis résolu ou supprimer, comme vous le souhaitez ! :p )