Probleme scripts php pour suppression des données avec checkboxs

issaconan Messages postés 43 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 8 juillet 2013 - 10 nov. 2010 à 22:16
issaconan Messages postés 43 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 8 juillet 2013 - 12 nov. 2010 à 22:38
Slt j'ai un petit problème pour supprimer des données d'une table avec case, tous marche sauf la suppression des données, le script ce compose de 2 "page sup.php et sup-action.php" :

page "sup.php" :
*******************************
*******************************
<form method='POST' action='sup-action.php'>


id,
Marque voiture,
Date début,
Date fin,
Supprimer,

<?
$db = mysql_connect('localhost', 'root', '')
or die('Désolé mais vous ne pouvez voir les infos de la data-base');
mysql_select_db('location_voiture',$db);
$query=\"Select * from flotte_partenaire\" ;
$result = mysql_query( $query )or exit ('Erreur SQL !'.$query.'
'.mysql_error());
while($data = mysql_fetch_array($result))
{
echo\"----
".$data['id'].", \";
echo\"".$data['marque_voiture'].", \";
echo\"".$data['date_debut'].", \";
echo\"".$data['date_fin'].", \";
echo\", \";
echo\"\";
}
mysql_close();

?>

</form>


************************
************************
page "sup-action.php" :

************************
<?
if (sizeof($delete)==0){
header('Location:sup.php');
exit;}
else{

$db = mysql_connect('localhost', 'root', '')
or die('Désolé mais vous ne pouvez voir les infos de la data-base');
mysql_select_db('location_voiture',$db);
foreach ($delete as $valeur){
$sql="DELETE FROM flotte_partenaire where id='$id'";
$req= mysql_query($sql);
}
mysql_close();
header('Location:sup.php');
exit;
}
?>
*****************************

20 réponses

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
10 nov. 2010 à 22:39
bonsoir

foreach ($delete as $valeur){
$sql="DELETE FROM flotte_partenaire where id='$id'";

tu devrais faire
echo $sql="DELETE FROM flotte_partenaire where id='$id'";
pour voir comment est ta requete

ça serait pas
foreach ($delete as $valeur){
$sql="DELETE FROM flotte_partenaire where id='$valeur';
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
10 nov. 2010 à 23:10
Salut,

Déjà, en un seul coup d'oeil ça m'étonnerait fort que $delete soit définie dans sup_action.php, sauf à utiliser une vieille, vieille version de PHP.

Tu devrais sans doute activer l'affichage des erreurs.

Cordialement,

Kohntark -
0
issaconan Messages postés 43 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 8 juillet 2013
11 nov. 2010 à 15:44
J'ai tous essayer mais rien ne marche la suppression ne ce fait toujours pas !!!!

Que faire??

Y a t'il un autre script plus compatible.

Merci
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
11 nov. 2010 à 17:19
bonjour

<?php

//verifie si tu as quelque chose d'envoyé
echo $delete=$_REQUEST['delete'].'
';


if (sizeof($delete)==0){
header('Location:sup.php');
exit;}
else{

$db = mysql_connect('localhost', 'root', '')
or die('Désolé mais vous ne pouvez voir les infos de la data-base');
mysql_select_db('location_voiture',$db);
foreach ($delete as $valeur){

//verifie l'état de ta requête
echo $sql="DELETE FROM flotte_partenaire where id='$valeur'";
//test la query
if(!mysql_query($sql)) {
echo 'erreur mysql_query';
} else {
$req = mysql_query($sql);
}

}
mysql_close();
header('Location:sup.php');
exit;
}
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
11 nov. 2010 à 18:28

J'ai tous essayer

Donc que disent les erreurs affichées ?
Comment as tu modifié $delete pour qu'elle soit définie ?

Kohntark -
0
issaconan Messages postés 43 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 8 juillet 2013
11 nov. 2010 à 18:32
Ça donne ca:

Array

Warning: Invalid argument supplied for foreach() in W:\var\www\location-scripts\sup-action.php on line 15

Warning: Cannot modify header information - headers already sent by (output started at W:\var\www\location-scripts\sup-action.php:4) in W:\var\www\location-scripts\sup-action.php on line 28
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
11 nov. 2010 à 18:49
Comment as tu modifié $delete pour qu'elle soit définie ?



Kohntark -
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
11 nov. 2010 à 19:58
BONSOIR

si tu places ça en tête de sup-action.php
<?php
$delete=array();

if( isset($_REQUEST['delete']) && !empty($_REQUEST['delete']) ) {
$delete=$_REQUEST['delete'];
  
  foreach($delete as $value){
  echo $value.'
';
  }

} else {
echo 'envoi tableau delete manqué ?';
}
//suite du code
?>


ça donne quoi
0
issaconan Messages postés 43 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 8 juillet 2013
11 nov. 2010 à 23:10
ca donne ca:
mais je crois que la vérification ce fait déjà par la fonction "if (sizeof($delete)==0)"

7
Array

Warning: Invalid argument supplied for foreach() in W:\var\www\location-scripts\sup-action.php on line 32

Warning: Cannot modify header information - headers already sent by (output started at W:\var\www\location-scripts\sup-action.php:8) in W:\var\www\location-scripts\sup-action.php on line 45
0
issaconan Messages postés 43 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 8 juillet 2013
11 nov. 2010 à 23:13
Est ce que quel qu'un aurais un simple script pour supprimer une ligne de table, car je commence a avoir mare de 100 scripts qui marche pas
merci
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
12 nov. 2010 à 09:08
BONJOUR

Voila deux bouts de codes qui marche chez moi. (mini blog)
En effet les foreach ça ... ? je sais pas pourquoi ... c'est un peu vite fait faudra donc adapter.



form.php

<?php
mysql_connect('localhost','root','') or die('BDD ?');
mysql_select_db('blog') or die('BDD ?');
?>
<html>
<head>
</head>

[login.php Espace membres]

Bienvenue sur mon blog !


<?php

$sql= "SELECT * FROM articles";

if($query=mysql_query($sql)){
                                 
////////////////////////////////////////////////////////////////////////////////
echo '<form action="del.php" method="post">';

  while($lignes=mysql_fetch_array($query) ) {
  echo ' '.$lignes['titre'].' 
';
  echo $lignes['contenu'].'
';
  echo 'Publié le : '.$lignes['date'].'
';
  echo 'supprimer
';
  }

echo '

<form>';
////////////////////////////////////////////////////////////////////////////////

}else{
echo "AUCUN ARTICLE";
}

?>


</html>


del.php

<?php
if( isset($_REQUEST['delete']) && !empty($_REQUEST['delete']) ) {
$delo =array();
$delo=$_REQUEST['delete'];
$count=count($delo);
    for($i=0;$i<$count;$i++) {
    $val=$delo[$i].'
'; 
    $db = mysql_connect('localhost', 'root', '') or die('Désolé mais vous ne pouvez voir les infos de la data-base'); 
    mysql_select_db('blog',$db); 
    $sql="DELETE FROM articles where id='".$val."'"; 
    mysql_query($sql);//test la query 
    }
    mysql_close(); 
    header('Location:index.php');exit; 
}else {
echo 'envoi tableau delete manqué ?';exit;
//ou comme tu faisais
//header('Location:index.php');exit;
}
?>

0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
12 nov. 2010 à 10:41
En effet les foreach ça ... ?

Il n'y a pas de raison que ça ne fonctionne pas, même si il y a plein d'erreurs.

je sais pas pourquoi ...

Ben faut dire que l'auteur du thread ne prend pas la peine de fournir le code modifié.
Moi je vois bien ton code de 19:58:47 au dessus de celui de 17:19:34, ça donnerait le message d'erreur cité.

Est ce que quel qu'un aurais un simple script pour supprimer une ligne de table, car je commence a avoir mare de 100 scripts qui marche pas
merci

Point 9 du règlement que tu as approuvé :
On ne demande pas un programme tout fait, on ne demande que de l'aide sur un problème concret.
Dirigez-vous directement dans la recherche de sources pour les programmes complets. Inutile de demander du "code tout cuit", vous n'obtiendrez aucune réponse.

... et qui devrait être d'ailleurs respecté par d'autres personnes.

mais je crois que la vérification ce fait déjà par la fonction "if (sizeof($delete)==0)"

Non, ce n'est pas du tout pareil : cf doc de count(), empty() et isset()

c'est un peu vite fait faudra donc adapter.

Effectivement.
- un mysql_connect() / mysql_select_db() dans une boucle !! Bonjour les bugs !

- pourquoi utiliser $_REQUEST alors qu'il s'agit de la méthode POST ? Là aussi bonjour les bugs potentiels

- pourquoi utiliser une boucle for sur un tableau alors que foreach est bien plus adaptée ?

- aucun contrôle des valeurs retournées par le formulaire

- aucune (ou presque) gestion des erreurs

- <form>'; => </form>

- HTML invalide

-
$val=$delo[$i].'
'; 

... je doute fort que la requête SQL qui suit aime ce


- etc ...


Cordialement,

Kohntark -
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
12 nov. 2010 à 12:01
bonjour
@Kohntark
Oui le script fonctionne comme ça,
c'est vrai que la connection dans la boucle c'est nul !
$_REQUEST pourquoi ça devrait bugger ?
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
12 nov. 2010 à 12:57
Re Cod57,

c'est vrai que la connection dans la boucle c'est nul !

Je ne sais pas si "nul" est le mot adapté, mais ce qui est certain c'est que c'est très très sale, et que ça risque de poser bien des problèmes :
Tu as 100 enregistrements à supprimer => c'est "100 ouvertures de connexions vers le serveur" (entre guillemets car c'est sans doute plus complexe que ça)
Je serai surpris qu'un hébergement mutualisé permette cela.

$_REQUEST pourquoi ça devrait bugger

"bugs potentiels", parce que le jour où le script sera modifié et que le formulaire pointera vers http://machin/sup-action.php?delete=truc (idem avec les cookies) il y aura un gros risque de confusion, et ça pourra peut être ouvrir des failles de sécurité, puisque tu ne contrôles pas la réelle provenance des données.
Il faut toujours tester ce qu'on attends :
- les valeurs proviennent de la méthode POST => $_POST
- de la méthode GET => $_GET
- on attends un entier comme valeur postée ? => on vire tout ce qui ne l'est pas
- etc ...

Oui le script fonctionne comme ça,

Je ne suis pas de ton avis pour (entre autre) les raisons évoquées ci dessus.
Qu'un script soit fonctionnel est la moindre des choses, mais ça n'en fait pas forcement un exemple à suivre, et c'est clairement le cas du code que tu donnes trop gracieusement, une nouvelle fois, à un questionneur qui attends du code tout fait.

Cordialement,

Kohntark -
0
issaconan Messages postés 43 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 8 juillet 2013
12 nov. 2010 à 15:16
Bon j'ai trouvé un autre script d'une seul page, c bien mais c toujours le même problème : no delet !!

///////////
<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name="test"; // Database name
$tbl_name="test_mysql"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

?>
<form name="form1" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
----, </td>
Delete multiple rows in mysql,

----

#,
Id,
Name,
Lastname,
Email,

<?php
while($rows=mysql_fetch_array($result)){
?>
----

">,
<? echo $rows['id']; ?>,
<? echo $rows['name']; ?>,
<? echo $rows['lastname']; ?>,
<? echo $rows['email']; ?>,

<?php
}
?>
----

,

<?
// Check if delete button active, start this
if($delete){
for($i=0;$i<$count;$i++){
$del_id = $checkbox[$i];
$sql = \"DELETE FROM $tbl_name WHERE id='$del_id'\";
$result = mysql_query($sql);
}

// if successful redirect to delete_multiple.php
if($result){
echo \"<meta http-equiv=\\"refresh\\" content=\\"0;URL=delete_multiple.php\\">\";
}
}
mysql_close();
?>

</form>
</td>
</tr>
</table>
//////////////////
0
issaconan Messages postés 43 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 8 juillet 2013
12 nov. 2010 à 15:22
Aussi j'ai trouvé un autre script mais sans les checkboxs avec lien de suppression est qui MARCHE FORT!!! sans problème
le voila sur ce tutorial :
[url]http://www.phpeasystep.com/mysql/7.html/url

mais pour le checkboxs ca marche pas:
le lien par là

je ne sais pas ou est le problème
0
issaconan Messages postés 43 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 8 juillet 2013
12 nov. 2010 à 15:41
Bonne et Heureuse nouvelle
J'ai trouvé la solution pour le chekboxs sur un forum
Le lien
0
issaconan Messages postés 43 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 8 juillet 2013
12 nov. 2010 à 15:42
voici mon code modifier et ça marche :

[code=php]<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="location_voiture"; // Database name
$tbl_name="flotte_partenaire"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

?>
<form name="form1" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
----, </td>
Delete multiple rows in mysql,

----

#,
Id,
Marque voiture,
Date début,
Date fin,

<?php
while($rows=mysql_fetch_array($result)){
?>
----

">,
<? echo $rows['id']; ?>,
<? echo $rows['marque_voiture']; ?>,
<? echo $rows['date_debut']; ?>,
<? echo $rows['date_fin']; ?>,

<?php
}
?>
----

,

<?
// Check if delete button active, start this
if(isset($_POST['delete'])){
for($i=0;$i<$count;$i++){
$del_id = $_POST['checkbox'][$i];$sql \"DELETE FROM $tbl_name WHERE id'$del_id'\";
$result = mysql_query($sql);
}

// if successful redirect to delete_multiple.php
if($result){
echo \"<meta http-equiv=\\"refresh\\" content=\\"0;URL=sup2.php\\">\";
}
}
mysql_close();
?>

</form>
</td>
</tr>
</table>[code=php]
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
12 nov. 2010 à 20:09
Bonsoir
issaconan
ferme le post S.T.P.

Bonsoir
@Kohntark
EN EFFET $_GET coté sécurité il y a mieux.
(int)$_GET ...
voir utiliser in_array() ...
Ta remarque est pertinente !

En effet issaconan n'a pas lu mon post, ça boucle qui marche c'est la même que la mienne !

if(isset($_POST['delete'])){
for($i=0;$i<$count;$i++){
$del_id = $_POST['checkbox'][$i];
$sql "DELETE FROM $tbl_name WHERE id'$del_id'";
$result = mysql_query($sql);
}
0
issaconan Messages postés 43 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 8 juillet 2013
12 nov. 2010 à 22:38
Merci à tous le monde de m'avoir aidé c trés gentil à vous,
comment en signal un sujet résolu sur le forum
0
Rejoignez-nous