Page 1 sur 1

Traitement de checkbox et gestion de session

Posté : 23 oct. 2005, 12:18
par Tr0n
Bonjour,

Je débute en php et je me suis récemment lancé dans la mise en place d'une petite boîte de messagerie. Ne souhaitant pas récupérer les multiples codes pré-existant sur la question, j'ai essayé de faire mon propre script mais voilà: problème.

Voici le script global simplifé et épuré:
		if ( isset($_SESSION['do_delete']) ){
		// Traitement des checkbox

	}
	

	echo "<form method=\"post\">";
	echo "<table>";
	echo "<tr><div class=\"TitreBloc\">BOITE DE RECEPTION</div></tr>";

	$i = 0;
	while ($row = mysql_fetch_array($result_r)) {

		$_SESSION['id_message[$i]'] = $row[0];
		echo "ID MESSAGE: ".$_SESSION['id_message[$i]'];
		echo "<tr><div class=\"Bloc\"><input type=\"checkbox\" id=\"delete[".$row[0]."]\" name=\"delete[]\">";
		echo $row[0]." ".$row[1]." ".$row[2]."</div><br></tr>";
		$i++;

	}
	echo "<tr><div class=\"Bloc\"><center><input type=\"submit\" name=\"do_delete\" value=\"Effacer\"></center></div></tr>";
	echo "</table>";
	echo "</form>";
	endBloc();
Voilà. Le traitement du formulaire se trouverait donc au début mais je vous avoue ne pas trop savoir comment m'y prendre.

Le but est de récupérer l'identifiant du/des messages à supprimer passant en paramètre dans l'id du formulaire de type checkbox. Ensuite je n'aurais plus qu'à envoyer une requête delete simple (ça je sais faire :wink: ).

En fait je ne vois pas trop comment traiter ces checkbox cochés ou non.

Je pense qu'elles sont bien définies ayant chacune un champ identifiant (id) dépendant du message à supprimer. D'après mes lectures il faudrait utiliser foreach... Mais je en vois pas comment insérer cela là dedans.

Posté : 23 oct. 2005, 12:28
par agabatur
déjà tu refermes ton accolade juste après l'avoir ouverte et sans avoir rien fait à la 3ième ligne...
ah pardon c'est là que tu veux de l'aide ?

Posté : 23 oct. 2005, 12:31
par jeff
salut
je suis pas sur de t'avoir suivi
deja corrigeons quelque erreurs
if ( isset($_SESSION['do_delete']) ){
        // Traitement des checkbox
foreach($_SESSION['do_delete'] as $cle=>$val)
{
echo $cle.'-'.$val;
}

    }
    

   echo '<form method="post" action="'echo $_serveur ['php_self'];'">';
    echo "<table>";
    echo "<tr><div class=\"TitreBloc\">BOITE DE RECEPTION</div></tr>";

    $i = 0;
    while ($row = mysql_fetch_array($result_r)) {

        $_SESSION['id_message'][$i] = $row[0];
        echo "ID MESSAGE: ".$_SESSION['id_message'][$i];
        echo '<tr><div class="Bloc"><input type="checkbox" value="'.$row[0].'" name="delete[]">';
        echo $row[0].'- '.$row[1].'-'.$row[2].'</div><br></tr>';
        $i++;

    }
    echo "<tr><div class=\"Bloc\"><center><input type=\"submit\" name=\"do_delete\" value=\"Effacer\"></center></div></tr>";
    echo "</table>";
    echo "</form>"
j'ai mis un exemple d'utilisation de foreach
peut tu nous en dire plus sur
$_SESSION['id_message[$i]'] = $row[0];
j'ai mis ceci a la place $_SESSION['id_message'][$i] = $row[0];
mais je suis pas sur que ca conviene a tes besions
sinon essaye $_SESSION['id_message.$i'] = $row[0];

Posté : 23 oct. 2005, 12:43
par Tr0n
Non pour l'accolade c'est juste un problème de recopie elle y était bel et bien :). Sinon,

Pour la variable $_SESSION['idmessage[$i]'] = $row[0] je m'explique.

$row[0] représente l'id du message dans ma base de données.
$idmessage[$i] est censée représenter un tableau contenant les identifiants de tous les messages affichés.

Ensuite je souhaite simplement récupérer les identifiants des messages dans cette variable idmessage lorsque les checkbox ont été activées.

Par exemple

J'ai l'affichage suivant

Code : Tout sélectionner

5 row1 row2 19 row5 row18 23 row0 row17
Dans idmessage il me faut les valeurs 5 19 23.

Ensuite si je sélectionne la ligne 19 row5 row18, il faut qu'il récupère 19 et envoie la requête delete. Si j'en récupère plusieurs, il faut qu'ils les traitent tous. Voilà.

En gros je veux pouvoir passer en paramètre de ma variable session un tableau que j'affecte à chaque tour de boucle while au départ (si cela n'avait pas été saisi), d'où cette ligne $_SESSION['idmessage[$i]'] = $row[0]. Je l'a met sous forme de session pour pouvoir m'en reservir dans le code de traitement des checkbox voir peut être ailleurs.

Posté : 23 oct. 2005, 12:49
par jeff
tu utilise un formulaire avec la methode post pourquoi te complique tu la vie avec les sessions

Posté : 23 oct. 2005, 13:03
par Tr0n
Parce que sinon j'obtiens la Notice très classique d'absence de variable,

Code : Tout sélectionner

Notice: undefined variable id_message
J'avais dans l'idée d'utiliser cette variable session dans mon traitement de formulaire d'où le fait qu'elle soit déclarée en variable global de manière à ce qu'elle ne soit pas écrasée. Mais s'il est possible de traiter les checkbox sélectionnées sans repasser par cette variable, oui c'est idiot de l'avoir en session :cry: .

Mon but en fait est juste de récupérer cette identifiant d'un message à effacer qui est codé dans l'id de la checkbox.
<input type=\"checkbox\" id=\"id_delete[".$row[0]."]\" name=\"delete[]\">
Je veux en gros pouvoir récupérer cet id et plus précisément ce qui se trouve entre les crochets de id_delete (soit l'identifiant du message à effacer).

Posté : 23 oct. 2005, 13:31
par jeff
ok
<?php
if(isset($_post['valider']) && isset[$_post['tab'])
{
foreach($tab as $cle=>$val)
{
echo $cle.'-'.$val;

}

?>
<form action="<?php echo $_serveur['php_self']; ?>" metdod="post">
<?php
 while ($row = mysql_fetch_array($result_r))
{
echo '<input type="checkbox" name="tab[]" value="'.$row[0].'"/>'.$row[0];
}
?>
<input type="submit" name="valider"/>
</form>
fait un essai avec ce code pour voir

Posté : 23 oct. 2005, 17:13
par Tr0n
Warning: Invalid argument supplied for foreach() in d:\easyphp1-8\www\messagepanel.php on line 20
	if ( isset($_POST['do_delete']) && isset($_POST['tab']) ){
		foreach($tab as $cle=>$val){
			echo $cle.'-'.$val;
		} 
	}
	

	echo "<form method=\"post\">";
	echo "<table>";
	echo "<tr><div class=\"TitreBloc\">BOITE DE RECEPTION</div></tr>";

	$i = 0;
	while ($row = mysql_fetch_array($result_r)) {
		echo "<tr><div class=\"Bloc\"><input type=\"checkbox\" name=\"tab[]\" value=\"".$row[0]."\">";
		echo $row[0]." ".$row[1]." ".$row[2]."</div><br></tr>";
		$i++;

	}
	echo "<tr><div class=\"Bloc\"><center><input type=\"submit\" name=\"do_delete\" value=\"Effacer\"></center></div></tr>";
	echo "</table>";
	echo "</form>";
	endBloc();
En modifiant la ligne
foreach($tab as $cle=>$val)
Par
foreach($_POST['tab'] as $cle=>$val)
Ca marche déjà mieux.

Je ne savais pas qu'on pouvait disposer de ce genre de boucles qui permettent d'afficher directement les résultats d'une sélection dans un tableau d'association clé/valeur.

Merci de l'indication, je partais dans une direction bien lointaine pour un truc aussi simple :roll: