Probleme scripts php pour suppression des données avec checkboxs

Signaler
Messages postés
43
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
8 juillet 2013
-
Messages postés
43
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
8 juillet 2013
-
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

Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
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';
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
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 -
Messages postés
43
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
8 juillet 2013

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
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
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;
}
?>
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27

J'ai tous essayer

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

Kohntark -
Messages postés
43
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
8 juillet 2013

Ç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
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
Comment as tu modifié $delete pour qu'elle soit définie ?



Kohntark -
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
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
Messages postés
43
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
8 juillet 2013

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
Messages postés
43
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
8 juillet 2013

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
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
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;
}
?>

Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
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 -
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
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 ?
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
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 -
Messages postés
43
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
8 juillet 2013

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>
//////////////////
Messages postés
43
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
8 juillet 2013

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
Messages postés
43
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
8 juillet 2013

Bonne et Heureuse nouvelle
J'ai trouvé la solution pour le chekboxs sur un forum
Le lien
Messages postés
43
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
8 juillet 2013

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]
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
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);
}
Messages postés
43
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
8 juillet 2013

Merci à tous le monde de m'avoir aidé c trés gentil à vous,
comment en signal un sujet résolu sur le forum