Page 1 sur 1

lier checkbox avec input

Posté : 11 mai 2006, 14:02
par popi
Bonjour à tous,

je récupère d'une table un nom de page et des mot-clés, j'alimente mon formulaire
$formulaire.="<tr><td>".$this->Format($data["tag"])."</td><td>.....<input type=\"checkbox\" id=\"".$data["tag"]."\" name=\"paje[]\" value=\"".$data["tag"]."\">&nbsp;<input type=\"text\" name=\"mots_clefs[]\" size=\"70\" value=\"".$data["keywords"]."\" onclick=\"document.getElementById('".$data["tag"]."').checked=true;\"></td></tr>";
}        


je récupère les variables
$pajeu=$_POST["paje"];
$motclef=$_POST["mots_clefs"];    


je fais une boucle
foreach($pajeu as $piges){

	 echo "Page: $piges motclef $motclef<br>\n";
}
et çà donne çà
Page: BouTic motclef Array
Page: BalloT motclef Array
ok pour $pajeu mais je ne sais pas comment faire pour récupérer en même temps l'Array des mot-clés ?

Merci de votre aide

Posté : 11 mai 2006, 14:14
par guilt92
Tu ne peux pas passer un tableau, il faut que tu transformes ton tableau en chaine de caractère avant de le passer puis que tu le reformes dans la nouvelle page.
Pour cela il existe des fonctions comme implode() et explode()

Posté : 11 mai 2006, 14:34
par popi
Je connais implode d'ailleurs çà donne çà
Page: BalloT motclef machi gogo,machi gogo,machi gogo,ert,ert;
Page: SuiTe motclef machi gogo,machi gogo,machi gogo,ert,ert;
je crois que je suis pas clair dans ma question, je voudrais synchroniser le mot-clé avec la page, chaque checkbox cochée doit relever un nom de page et les mots-clés associés

Merci

Posté : 11 mai 2006, 14:41
par Invité
avec tout le code ce sera + clair
$pajeu=$_POST["paje"];

$motclef=$_POST["mots_clefs"];
$result=implode(",", $motclef);
foreach($pajeu as $piges){

	 echo "Page: ".$piges." motclef ".$result.";<br>\n";
}
	


$sql = "select * from ".$this->config["table_prefix"]."motsclefs where keywords <>''";
$resultat = $this->Query($sql); 

echo "<center><table cellspacing=\"11\"><form name=\"harmony_motclef\" action=\"".$this->Href()."\" method=\"post\">";
while($data = mysql_fetch_assoc($resultat))
{ 		  													

$formulaire.="<tr><td>".$this->Format($data["tag"])."</td><td>.....<input type=\"checkbox\" id=\"".$data["tag"]."\" name=\"paje[]\" value=\"".$data["tag"]."\">&nbsp;<input type=\"text\" name=\"mots_clefs[]\" size=\"70\" value=\"".$data["keywords"]."\" onclick=\"document.getElementById('".$data["tag"]."').checked=true;\"></td></tr>";
}                                                          
echo $formulaire."<td></td><td><input type=\"submit\" name=\"\" value=\"Mise à jour\"></td></form></table></center>";  
Criez pas hein je suis sur le forum Débuter ;-)

Posté : 11 mai 2006, 15:06
par popi
ceci
$motclef=$_POST["mots_clefs"];
print_r($motclef);
donne bien le bon contenu
Array ( [0] => machi gogo [1] => machi gogo [2] => machi gogo [3] => ert [4] => ert )

mais comment lier celui qui est avec la checkbox cochée ?

Posté : 11 mai 2006, 16:23
par popi
l'exemple en image
Image

je cherche donc à obtenir seulement les mots-clés qui correspondent à la case cochée

Encore merci

Posté : 12 mai 2006, 07:44
par Moosh
j'ai répondu en annexe mais déplacé dans le bon forum

http://www.phpfrance.com/forums/viewtopic.php?t=18310

Posté : 12 mai 2006, 08:47
par popi
Merci Moosh,
mais çà ne répond pas à ma question : :cry:

Comment récupérer la valeur de chaque checkbox ? c'est pas du php çà ?

Posté : 12 mai 2006, 09:04
par Cyrano
une case à cocher n'envoie de valeur que si elle a été cochée: tu peux donc savoir en faisant des choses du genre:
$macase1 = (isset($_POST['macase1'])) ? 1 : 0;
Par exemple.

Posté : 12 mai 2006, 09:07
par popi
je comprends, je récupère tout mais ce que je ne sais pas faire c'est de savoir quelle checkbox correspond à quel input ? il doit y avoir une astuce peut-être à la récupération de la requête ?

Posté : 12 mai 2006, 09:20
par Cyrano
Chacune de tes cases à cocher devrait avoir un attribut name avec une valeur distincte : partant de là, tu peux très facilement savoir lesquelles ont été cochées et lesquelles ne l'ont pas été.

Posté : 12 mai 2006, 11:59
par Invité
ok, c'est le cas dans mon code
<input type=\"checkbox\" id=\"".$data["tag"]."\" name=\"paje[]\" value=\"".$data["tag"]."\">
<input type=\"text\" name=\"mots_clefs[]\" size=\"70\" value=\"".$data["keywords"]
mais c'est à la récupération que çà marche pas ?

Posté : 12 mai 2006, 12:09
par Cyrano
Relis ce que j'ai écrit plus haut sur la récupération : l'index du tableau super-global $_POST correspond à cet attribut name.

Posté : 12 mai 2006, 12:28
par jpaul
Cyrano t'a donné les éléments :
ok, c'est le cas dans mon code
<input type="checkbox" id="".$data["tag"]."" name="paje[]" value="".$data["tag"]."">
<input type="text" name="mots_clefs[]" size="70" value="".$data["keywords"]
mais c'est à la récupération que çà marche pas ?
quand tu mets name="paje[]"
name="mots_clefs[]"

En fait tu crées des index dynamiquement.
Tu risques d'avoir un problème avec le fait que tuutilise des type TEXT et des type CHECKBOX.
Par exemple si tu oublies de cliquer une checkbox alors que tu as rentré un text, tes index vont être en désordre.

A ta place, je forcerais l'index avec un variable incrémentée par exemple :
$varinc++;
<input type="checkbox" id="".$data["tag"]."" name="paje[$varinc]" value="".$data["tag"]."">
<input type="text" name="mots_clefs[$varinc]" size="70" value="".$data["keywords"]
Tu auras ainsi une correspondance exacte entre les pages et les mots cle.
En suite ne reste plus qu'a parcourir les index :

$pajeu=$_POST["paje"];
$motclef=$_POST["mots_clefs"];
foreach($pajeu as $key => $piges){
       echo "Page: $piges motclef $motclef[$key]<br>\n";
}
ou pour uniformiser :
foreach($pajeu as $key => $piges){
       echo "Page: $pajeu[$key] motclef $motclef[$key]<br>\n";
}
Je ne sais pas s'il y a moyen de n'avoir que les index pour faire la boucle...

Posté : 12 mai 2006, 12:46
par popi
Yessss :D Super

Désolé ne n'avoir pas été assez clair

Merci à vous