IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requete delete ne s'executant pas [SQL-Server]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 19
    Points : 52
    Points
    52
    Par défaut Requete delete ne s'executant pas
    Bonjours,
    Dans mon Controller j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    case "deleteIgr":
        require("Class/Ingredient.php");
        require("Class/IngredientsManager.php");
        $data = array ('code'=> $_POST['code']);
        $deleterIngredient = new IngredientsManager;
        $deletedIngredient=$deleterIngredient->deleted(new Ingredient($data));
        break;
    Dans la classe IngredientsManager ma methode deleted est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function deleted(Ingredient $ingredient)
    	{
    		$db = $this->dbConnect();
    		$q=$db->prepare('DELETE FROM Products WHERE Code = :code ');
    		$q->bindValue(':code', $ingredient->code());
    		$q->execute();
    	}
    Le POST dans mon controller est recu par AJAX avec JQuerry :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $('.ButtonDelete').on('click', function() {
    		let id= $(this).val();
    		let code=$('#code'+id).val();
    		req = $.ajax({
    			url: "menu.php?Option=deleteIgr",
    			type : 'POST',
    			data : { code : code }
    		});
    		req.done(function (response, status, jqXHR){
    			console.log("Deleted with success");
    		});
    		req.fail(function (jqXHR, status, err){
    			console.error("An error occurred: " + status, err);
    		});
    	});
    La requete AJAX marche je suppose car la console m'affiche Deleted with success
    Mais la ligne n'est pas supprimeee et bien presente dans la base de donnees (SQL Server)
    Je ne sais pas ce que j'ai manque

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    bonjour,

    vérifies que tu récupères bien la propriété membre de la classe Ingredient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public function deleted(Ingredient $ingredient)
    {
            var_dump($ingredient->code()); // affiche-t-il le code?
    	$db = $this->dbConnect();
    	$q=$db->prepare('DELETE FROM Products WHERE Code = :code ');
    	$q->bindValue(':code', $ingredient->code());
     return $q->execute(); // renvoi true si la suppression a eu lieu sinon false
    }

  3. #3
    Membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 19
    Points : 52
    Points
    52
    Par défaut
    Merci,
    Je vien de tester, en fait je viens de me rendre compte grace a ta technique que ca marche mais pas sur tout les enregistrement, il y a toujours ingredient code mais pas toujours la suppression, la DB n'est pas de moi, est-ce possible que certain enregistrement soit tout simplement impossible a supprimer ? car ca marche normalement maintenant sauf sur quelque recalcitrants

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Par défaut, PDO ne va pas afficher les messages d'erreurs.

    1- Soit, pendant l’instanciation de ton PDO, fait en sorte pour que les messages d'erreurs s'affichent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new PDO($host, $user, $password,  array( PDO::ATTR_ERRMODE =>PDO::ERRMODE_EXCEPTION ) ); // Tu peux simplement faire un warning (ERRMODE_WARNING) au lieu de lancer une exception
    Tu peux aussi utiliser setAttribute pour affecter le paramètre.

    2- Soit de récupérer l'erreur si le dernier exécution a échoué: http://php.net/manual/fr/pdostatement.errorinfo.php

    Pour la gestion des erreurs PDO, regarde ici: http://php.net/manual/fr/pdo.error-handling.php

    Dans ton cas, je soupçonne l'échec de suppression dû à une contrainte de clé étrangère dans d'autre table qui est liée à celle ci.

    A+.

  5. #5
    Membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 19
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Bonjour,

    Par défaut, PDO ne va pas afficher les messages d'erreurs.

    1- Soit, pendant l’instanciation de ton PDO, fait en sorte pour que les messages d'erreurs s'affichent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new PDO($host, $user, $password,  array( PDO::ATTR_ERRMODE =>PDO::ERRMODE_EXCEPTION ) ); // Tu peux simplement faire un warning (ERRMODE_WARNING) au lieu de lancer une exception
    Tu peux aussi utiliser setAttribute pour affecter le paramètre.

    2- Soit de récupérer l'erreur si le dernier exécution a échoué: http://php.net/manual/fr/pdostatement.errorinfo.php

    Pour la gestion des erreurs PDO, regarde ici: http://php.net/manual/fr/pdo.error-handling.php

    Dans ton cas, je soupçonne l'échec de suppression dû à une contrainte de clé étrangère dans d'autre table qui est liée à celle ci.

    A+.
    Merci en effet j'avais zapper la table de jointure :facepalm:

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete DELETE qui ne retourne pas de résultat
    Par Duddy dans le forum Développement
    Réponses: 8
    Dernier message: 24/09/2012, 17h44
  2. Requete d'action qui ne s'execute pas
    Par userB dans le forum VBA Access
    Réponses: 3
    Dernier message: 23/08/2007, 13h47
  3. [ADO] Requete qui ne s'execute pas dans une transaction
    Par Faboul dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/07/2007, 13h30
  4. Requete insert ne s'execute pas depuis Delphi!
    Par bouzaidi dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/05/2007, 14h26
  5. Réponses: 1
    Dernier message: 03/05/2007, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo