Traitement de checkbox et gestion de session

Petit nouveau ! | 7 Messages

23 oct. 2005, 12:18

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.

Petit nouveau ! | 8 Messages

23 oct. 2005, 12:28

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 ?
Modifié en dernier par agabatur le 23 oct. 2005, 12:33, modifié 1 fois.

Mammouth du PHP | 1311 Messages

23 oct. 2005, 12:31

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];
Modifié en dernier par jeff le 23 oct. 2005, 12:47, modifié 2 fois.

Petit nouveau ! | 7 Messages

23 oct. 2005, 12:43

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.

Mammouth du PHP | 1311 Messages

23 oct. 2005, 12:49

tu utilise un formulaire avec la methode post pourquoi te complique tu la vie avec les sessions

Petit nouveau ! | 7 Messages

23 oct. 2005, 13:03

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

Mammouth du PHP | 1311 Messages

23 oct. 2005, 13:31

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

Petit nouveau ! | 7 Messages

23 oct. 2005, 17:13

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: