suppression d'articles

Eléphanteau du PHP | 38 Messages

23 avr. 2010, 07:48

Bonjour à tous :-)

Problème recherche solution **********************************:

Page Suppression: -> déja fait!!!!

Affichage d'une liste d'enregistrements, tout à droite de chaque enregistrement est associé une checkbox avec comme valeur son numéro de référence.

voici le code:

<?php

// tant qu'il y a des fiches
while ($val2 = mysql_fetch_array($result2)) { ?>

<td><input type="checkbox" value="<?php echo $val2["Reference"] ?>" name="check"></td>
<td><a href="F-Modification-Article.php?Reference=<?php echo $val2["Reference"] ?>"><?php echo $val2["Reference"] ?></a></td>
<td><?php echo $val2["Article"] ?></td></tr>
<? }
?>

code à trouver après envoi du formulaire dans la nouvelle page (enrSuppression.php)

- récupérer les checkboxs selectionnés dans la page précédente et faire les suppressions!

merci d'avance pour vos réponses!

Eléphant du PHP | 422 Messages

23 avr. 2010, 10:57

hello

tu fait un print_r($_POST) ou $_GET histoire de voir ton tableau de checkbox

Ensuite tu fait un foreach sur ton tableau pour parcourir tes id

tu test si c'est bien des chiffre (is_numeric)

ensuite soit tu fait x requet mysql soit tu en fait une en concatenenant avec des and pour faire une requet

++
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphanteau du PHP | 38 Messages

23 avr. 2010, 13:20

Dans la page supArticles, j'ai inséré ce code:

$c = $_POST['c'];

echo "c: ".$c;


Pour voir les valeur des éléments cochés mais il ne montre pas tout les éléments cochés il montre uniquement la dernière valeur.

Eléphant du PHP | 422 Messages

23 avr. 2010, 13:57

hello

fait un print_r($_POST);



++
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphanteau du PHP | 38 Messages

23 avr. 2010, 14:32

j'ai ce résultat:

Array ( [c] => 9 [Submit] => Supprimer les articles sélectionnés )

Eléphant du PHP | 422 Messages

23 avr. 2010, 15:10

hello

dans ton code tu met ca
<input type="checkbox" value="<?php echo $val2["Reference"] ?>" name="check">

et la tu nous parle de "c" et ca devrait être "check"

apres il faut mettre

<input type="checkbox" value="<?php echo $val2["Reference"] ?>" name="check[]">

pour que ce soit un tableau

++
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphanteau du PHP | 38 Messages

23 avr. 2010, 16:22

Oui j'ai changé le nom car check est un mot clé et ça posai des problèmes.....

j'ai aujouté les [] et maintenant j'ai l'affichage suivant si je coche 5,7,9,10:

Array ( [c] => Array ( [0] => 5 [1] => 7 [2] => 9 [3] => 10 ) [Submit] => Supprimer les articles sélectionnés )

et la suite maintenant... (j'ai l'habitude de programmer en asp, et là je me sens un peu perdu, peux tu me montrer un exemple de code pour pouvoir supprimer les articles qui ont les références sélectionnés?

Eléphant du PHP | 422 Messages

23 avr. 2010, 17:16

hello

il faut que tu utilise foreach (http://fr2.php.net/manual/fr/control-st ... oreach.php) pour parcourir ton tableau
il faut que tu test tes valeurs via is_numeric (http://fr2.php.net/manual/fr/function.is-numeric.php) pour filtrer les valeurs à passer dans ta requet

Ensuite il faut que tu fasse ta requet SQL soit en une fois (concaténation . ) soit en faisant autant de requet que de checkbox coché

++
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphanteau du PHP | 38 Messages

23 avr. 2010, 17:45

J'ai essayé avec ce code mais pas encore bon :-(

foreach ($c as $value){

$query = "DELETE FROM articles WHERE Reference=".$value;
$result = mysql_query($query);

}
?>

Eléphant du PHP | 422 Messages

23 avr. 2010, 21:14

hello

ajout des echo pour voir ce qu'il ce passe, et il a pas de honte a tester ces requetes directe dans phpmyadmin :)



foreach ($c as $value){

echo $c.' <br />';
$query = "DELETE FROM articles WHERE Reference=".$value;
echo $query.' <br />';
$result = mysql_query($query) or die(mysql_error());

}
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphanteau du PHP | 38 Messages

23 avr. 2010, 21:26

J'ai coché la case 7 et 9 voici le résultat:

Array DELETE FROM articles WHERE Reference=7 Array DELETE FROM articles WHERE Reference=9

mais là sur le coup ça march :-), je sais pas ce que javais écris de faux....

merci !!!!

Eléphanteau du PHP | 38 Messages

23 avr. 2010, 22:31

Quand je sélectionne rien il y a quand même une erreur, j'ai alors modifié le code:

foreach ($c as $value){

if ($value != ""){
$query = "DELETE FROM articles WHERE Reference=".$value;
$result = mysql_query($query) or die(mysql_error());
echo "<br><br><br><center>suppression effectuée!</center>";
}
}
?>

mais j'ai pas résolu le problème, réponse:

Notice: Undefined variable: c in d:\www\exya.ch\htdocs\Web\supArticles.php on line 11

Warning: Invalid argument supplied for foreach() in d:\www\exya.ch\htdocs\Web\supArticles.php on line 11

Eléphant du PHP | 422 Messages

25 avr. 2010, 10:30

hello

il faut utiliser isset() pour tester si une var est déclaré avant de passer au foreach

ensuite il faut que tu regarde du côté de mysql_real_escape_string() pour sécuriser tes valeur (moi je t'avais proposé de testé si c'était bien un chiffre avec is_numeric() ) tout ca pour eviter les injections sql !

++
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphanteau du PHP | 38 Messages

26 avr. 2010, 10:40

J'ai essayé ceci sans succès :

<?php

include 'connexion.php';

foreach ($c as $value){

if (isset($c) != "False"){
$query = "DELETE FROM personnel WHERE NumPersonnel=".$value;
$result = mysql_query($query) or die(mysql_error());
}
}
?>

Eléphant du PHP | 422 Messages

26 avr. 2010, 11:13

hello
<?php

include 'connexion.php';

//si $c existe et la taille de $c est plus grand que 0
if(isset($c) and count($c)>0){
    //pour chaque valeur de $c
    foreach ($c as $value){
        //si $value est un nombre
        if(is_numeric($value)){
             $query = "DELETE FROM personnel WHERE NumPersonnel=".$value;
             $result = mysql_query($query) or die(mysql_error());
        }
    }
}
?>
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)