Tom's Guide > Forum > Programmation > Problème variable foreach

Problème variable foreach

Forum Programmation : Problème variable foreach

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour,

Je me permet de revenir vous voir car j'ai besoin de votre aide.
J'ai créer une messagerie sur le site qui marche à merveille. Les messages devaient être supprimés un par un sans checkbox avec un lien unique.
Seulement j'ai voulu faire en sorte que les messages pouvaient être supprimés en masse avec un checkbox.

Mais quand je sélectionnais plusieurs messages et que je cliqué sur supprimer, cela en supprimé qu'un seul.
J'ai donc essayer en vain la fonction foreach que voici mais cela m'affiche Warning: Invalid argument supplied for foreach() in ...

Voici ma requête (formulaire):

Citation :

<form name="myform" action="" method="post">
<table>
<tr>
<th class="row2">Cocher</th>
<th class="row2">Sujet</th>
<th class="row2">Reçu</th>
<?php


$retour = mysql_query("SELECT * FROM dossier WHERE id_receiver='$pseudo_membre' ORDER BY id DESC" ) or die(mysql_error());
while ($donnees = mysql_fetch_array($retour))
{

[ J'ai enlevé une partie pour alléger le code ]

?>

<tr>
<td align="center"><input type="checkbox" name="erase" value="<? echo $donnees['id']; ?>" /></td>
<td width="350" class="row1"><? echo $titre; ?></td>
<td class="row1"><? echo $recu; ?></td>


<?
}
?>


Voici le traitement :

Citation :

if (isset($_POST['delete']))
{

$asupprimer=htmlentities($_POST['erase']);
if(isset($_POST['erase'])){

foreach($asupprimer as $key=>$value)
{
$sql = "DELETE FROM $folder WHERE id = '$eraser'";
$query = mysql_query($sql) OR die("Erreur Mysql : <br />".mysql_error());
echo 'Les messages sélectionnés ont bien été supprimé !';
}

mysql_close();

}else{
echo 'Les champs sont vides !';
}

}




Merci pour votre aide.
Cordialement.

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

D'après la doc, la sortie de htmlentities est très clairement un string.

$asupprimer n'est donc surement pas un tableau et il est donc impossible de faire un foreach avec.

$_POST['erase'] peut être un tableau si ton url ressemble à index.php?erase=1&erase=2 mais dans ce cas tu dois faire un test is_array() sur cette variable puis appliquer via array_map() la fonction html_entities().

Je te conseille pour une meilleur sécurité de plutôt utiliser du code ressemblant à :

Code :
  1. foreach($asupprimer as $key=>$value)
  2. {
  3. if(!is_numeric($value)) trigger_error("Données invalides, risque de détrusion de la base de donnée", E_USER_ERROR);
  4. $sql = "DELETE FROM $folder WHERE id = $value;
  5. $query = mysql_query($sql) OR trigger_error("Erreur Mysql : <br />".mysql_error());
  6. echo 'Les messages sélectionnés ont bien été supprimé !';
  7. }



Avec l'usage de trigger_error() au lieu de die() tu peux facilement masquer les messages d'erreurs aux visiteurs en diminuant le niveau d'affichage d'erreur avec error_reporting() :) C'est pas beau d'afficher des "Erreur MySQL" aux visiteurs :D

------------------------------ 20minutes.fr, l'information en continu.
Répondre à SiM07

Il me semble qu'il faut aussi rajouter [] à erase pour dire qu'il s'agit d'un tableau.
Je me rappel avoir proceder comme ça il y'a quelques temps quand j'ai voulu faire la meme chose ;)

<input type="checkbox" name="erase[]" value="<? echo $donnees['id']; ?>" />

------------------------------ La boutique Sexy : http://www.dream-shop.fr pour toutes vos envies à petits prix !
Webmaster, rentabilisez votre trafic : http://www.dream-shop.fr/affiliation 28% de commission !
Répondre à okinou

Voilà après avoir pris en compte ce que vous m'avez dit et fait les modifications nécessaire, ça marche :P
Je vous remercie du fond du cœur :)

Répondre à bOoSt_
Tom's Guide > Forum > Programmation > Problème variable foreach
Aller à :

Il y a 351 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Liens