Bouton supprimer !

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Bouton supprimer !

par steph29 » 12 juin 2008, 11:18

j'ai cru que sa marcher mais non !

Code : Tout sélectionner

if(isset($_GET['action'])) { mysql_query("DELETE FROM clients_prospects WHERE id='{$_GET['id']}'"); mysql_query("DELETE FROM clients WHERE id='{$_GET['id']}'"); mysql_query("DELETE FROM devis WHERE id='{$_GET['id']}'"); mysql_query("DELETE projets.* FROM projets,clients WHERE projets.num_client = clients.num_client AND clients.id='{$_GET['id']}'"); }
Là, ça me dépasse :(
Quelqu'un pourrais m'aider a trouver l'erreur ?? j'y suis depuis ce matin, et je comprend pas :s
Si tu supprime ton client AVANT ta requete des projets où il y aune jointure sur des elements qui n'existent plus a ce moment la... forcement ca ne marche pas ;)
donc l'ordre serait plutot:

Code : Tout sélectionner

mysql_query("DELETE projets.* FROM projets,clients WHERE projets.num_client = clients.num_client AND clients.id='{$_GET['id']}'"); mysql_query("DELETE FROM clients_prospects WHERE id='{$_GET['id']}'"); mysql_query("DELETE FROM clients WHERE id='{$_GET['id']}'");
et surtout cette ligne:

Code : Tout sélectionner

mysql_query("DELETE FROM devis WHERE id='{$_GET['id']}'");
ne correspond a rien du tout a ce que j'ai compris... il n'y a aucune relation avec le client :?
Comment fait tu le lien entre tes clients et les devis?

par flippaeti » 12 juin 2008, 11:05

j'ai le easyphp 1.7 !

par iclo » 11 juin 2008, 14:23

DBMS: Data Base Management System. Si tu utilises une base de donnée, tu en utilises un, même sans le savoir: par exemple MySql est un bien un DBMS.
Il y a des dbms plus perfectionnés que d'autres, qui proposent des fonctionnalités bien utiles pour certaines choses.

par flippaeti » 11 juin 2008, 14:12

j'aimerai bien faire des DBMS ! mais je ne connais pas :s

par iclo » 11 juin 2008, 14:00

D'où l'intérêt des DBMS qui gérent les delete en cascade: par ex: la suppression d'un client, entraine automatiquement la supression de toutes ses commandes, etc

par d0m » 11 juin 2008, 13:33

pour trouver l'erreur tu peux utiliser des méthodes simples :

- afficher ta requête générée dynamiquement en php. En effet la requête qui est executée n'est peut être pas celle que tu penses, surtout au niveau des identifiants introduit par des variables php. Pour controler cela, place ta requête dans une variable et affiche là avant de l'éxecuter :
$requete = "DELETE projets.*
            FROM projets,clients
            WHERE projets.num_client = clients.num_client
            AND clients.id=".$_GET['id'].")";
echo 'requete : '.$requete;
- afficher les erreurs SQL lorsque tu exécutes la requête :
mysql_query($requete) or die(mysql_error());
Cela t'aidera à faire fonctionner ta requête. Par contre comme l'a dit Berzemus, on peut detourner ta page et agir sur ta base. Renseigne toi sur les problèmes d'injection sql et leurs solutions.

par Berzemus » 11 juin 2008, 12:25

Code : Tout sélectionner

DELETE projets.* FROM projets,clients WHERE projets.num_client = clients.num_client AND clients.id='{$_GET['id']}'
Pourquoi mettre des apostrophes ?
Pourquoi s'amuser avec des accolades ?
Et si on s'amuse à mettre du SQL dans l'url (en lieu et place de ID) pour effacer toute ta DB ?

par flippaeti » 11 juin 2008, 10:41

j'ai cru que sa marcher mais non !

alors :

Code : Tout sélectionner

DELETE projets.* FROM projets,clients WHERE projets.num_client = clients.num_client AND clients.id=10
Cela marche sur phpmyadmin mais pas lorsque je l'intègre a mon code !

Code : Tout sélectionner

if(isset($_GET['action'])) { mysql_query("DELETE FROM clients_prospects WHERE id='{$_GET['id']}'"); mysql_query("DELETE FROM clients WHERE id='{$_GET['id']}'"); mysql_query("DELETE FROM devis WHERE id='{$_GET['id']}'"); mysql_query("DELETE projets.* FROM projets,clients WHERE projets.num_client = clients.num_client AND clients.id='{$_GET['id']}'"); }
Là, ça me dépasse :(
Quelqu'un pourrais m'aider a trouver l'erreur ?? j'y suis depuis ce matin, et je comprend pas :s

par d0m » 11 juin 2008, 09:56

le champ id est un entier donc pas de quotes autour des valeurs :

Code : Tout sélectionner

DELETE FROM projets WHERE num_client IN ( SELECT num_client FROM clients WHERE id=10 )
par contre quel est ta version de mysql? sur des versions antérieures, les requêtes imbriquées ne sont pas autorisées.

Tu peux par contre essayer une jointure :

Code : Tout sélectionner

DELETE projets.* FROM projets,clients WHERE projets.num_client = clients.num_client AND clients.id=10

par vince_weed » 10 juin 2008, 17:15

bah la j comprend pas...

si tu fait juste la sous-requete elle passe ?
( 
SELECT num_client 
FROM clients 
WHERE id = '10' 
)

par flippaeti » 10 juin 2008, 17:10

requête SQL :

Code : Tout sélectionner

DELETE FROM projets WHERE num_client IN ( SELECT num_client FROM clients WHERE id = '10' )
MySQL a répondu:

#1064 - Erreur de syntaxe près de 'SELECT num_client
FROM clients
WHERE id = '10' )' à la ligne 1


Si je met = au lieu de IN c'est pareil !

par vince_weed » 10 juin 2008, 17:04

tu peut poster l'erreur?

par flippaeti » 10 juin 2008, 16:59

ouais mais c'est la première que j'ai fais elle n'a pas fonctionner !
mysql sous phpmyadmin m'a sorti des erreurs !

par vince_weed » 10 juin 2008, 16:37

ok tu doit donc passer par ta table client

 mysql_query("DELETE FROM projets WHERE num_client IN
                                (SELECT num_client FROM clients WHERE id='{$_GET['id']}')");
          
(solution avec sous-requete)

par flippaeti » 10 juin 2008, 16:32

Code : Tout sélectionner

mysql_query('DELETE FROM projets WHERE num_client = '.$_GET['id']);
cela est impossible car num_ client est différent de l'id !