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

AJAX Discussion :

[php et Jquery] Pas d'erreur avec Ajax si mon DELETE ne fonctionne pas


Sujet :

AJAX

  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 [php et Jquery] Pas d'erreur avec Ajax si mon DELETE ne fonctionne pas
    Bonjour,
    J'ai le probleme dit dans le titre, pour plus d'information j'ai une grid qui me mon les ingredients dans ma base de donnee (jusque la pas de probleme seulement du php et du html) voici la partie concerne pour une meilleur comprehension (le form est la uniquement pour debugger auquel cas je passe un button en type submit et le form avec un page action et un echo en php) :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php foreach($ingredients as $object)
    			{ ?>
    				<form method="post" >
    					<div id=<?='row'.$object->code()?> class="grid">
    						<span><input type="text" id=<?='code'.$object->code()?> class="cellCode" name="code" value=<?=$object->code()?> readonly></span>
    						<span><input type="text" id=<?='name'.$object->code()?> class="cellName" name="name" value=<?=$object->name()?>></span>
    						<span><button id=<?=$object->code()?> class="ButtonEdit" type="button" ></button></span>
    						<span><button class="ButtonDelete" type="button" value=<?=$object->code()?>></button></span>
    					</div>
    				</form>
     
    			<?php } ?>

    voici maintenant mon jquery :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $('.ButtonDelete').on('click', function() {
    		let id= $(this).val();
    		let code=$('#code'+id).val();
    		let confimation = confirm("Are you sure you want to delete " + code + "?");
    		if (confimation==true){
    			req = $.ajax({
    				url: "menu.php?Option=deleteIgr",
    				type : 'POST',
    				data : { code : code }
    			});
    			req.done(function (response, status, jqXHR){
    				var error = (typeof(response.error) !='undefined' && response.error!=null) ? response.error : null;
    				if(error){
    				alert("this element cannot be delete" + error);
    				}
    				else {
    				console.log("Deleted with success");
    				$('#row'+id).remove();
    				}
     
    			});
    			req.fail(function (jqXHR, status, err){
    				console.error("An error occurred: " + status, err);
    			});
    		}
    	});
    et le php où il s'applique :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    try {
    //autre partie de mon code
        case "deleteIgr":
    		require("Class/Ingredient.php");
    		require("Class/IngredientsManager.php");
    		$data = array ('code'=> $_POST['code'],'name'=>$_POST['name']);
    		$deleterIngredient = new IngredientsManager;
    		$deletedIngredient=$deleterIngredient->deleted(new Ingredient($data));
    		break;
    //suite de mon code
    }
    catch(Exception $e) { 
        $result['error'] = $e->getMessage();
    	echo  $result['error'];
    }
    je precise que ma connexion pdo est configurer pour remonter les erreur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $db = new PDO('sqlsrv:Server=######;Database=######', $this->_user, $this->_password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    		$db->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_UTF8);

    Pour rappel mon problem est que lorsque je delete un element la console me renvoie Deleted with success et enleve la ligne aussi lorsque l'element n'est pas vraiment supprime (toujours present dans la database et reaparait bien sur lorque je rafraichit la page. Je precise aussi que si je pense que le probleme vien de mon Jquery/Ajax c'est car lorsque je debug uniquement en php (en utilisant le form etc...) il me renvoie bien un warning lorsque l'element ne peux pas etre supprimer.
    Je ne voit pas d'ou vient mon probleme. quelqu'un aurait il une idee ?

  2. #2
    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 autre essaie
    J'ai changer mon jQuery par :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    $('.ButtonDelete').on('click', function() {
    		let id= $(this).val();
    		let code=$('#code'+id).val();
    		let confimation = confirm("Are you sure you want to delete " + code + "?");
    		if (confimation==true){
    			req = $.ajax({
    				url: "menu.php?Option=deleteIgr",
    				type : 'POST',
    				data : { code : code },
    				error(xhr,status,error) {
    					console.error("An error occurred: " + status, error);
    				},
    				success(result,status,xhr) {
    					var error = (typeof(result.error) !='undefined' && result.error!=null) ? result.error : null;
    					if(error){
    					alert("this element cannot be delete" + error);
    					}
    					else {
    					console.log("Deleted with success");
    					$('#row'+id).remove();
    					}
    				}
    			});
    ca ne marche pas non plsu et me renvoie deleted with success alors que non l'element est toujour la

  3. #3
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 396
    Points : 4 825
    Points
    4 825
    Par défaut
    Les callback error ou fail d'ajax, ne sont exécutées que seulement s'il y a une erreur dans ton fichier php, si par-contre le php est bon, ajax passe au success.
    Il va falloir ajouter une condition dans la fonction deleted(), qui permet de vérifier si la suppression d'un id a été faite ou non.
    d'après ton code, la variable $deletedIngredient est une instance de la classe IngredientsManager qui contient une fonction nommée deleted().
    Normalement c'est cette fonction deleted() qui doit renvoyer le id qui vient d'être supprimé, comment tu fais la suppression dans deleted() ?

  4. #4
    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
    Ma methode deleted est comme ceci :
    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();
    	}
    elle prend en parametre un objet ingredient :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    class Ingredient
    {
    	Private $_code;
    	private $_name;
    	public function code(){ return $this->_code;}
    	public function name(){return $this->_name;}
     
    	public function __construct(array $data)
    	{
        $this->hydrate($data);
    	}
     
    	public function hydrate(array $data)
    	{
    		foreach ($data as $key => $value)
    		{
    			$method = 'set'.ucfirst($key);
    			if (method_exists($this, $method))
    			{
    				$this->$method($value);
    			}		
    		}
    	}
    	public function setCode($code)
    	{
    		if (is_string($code))
    		{
    			$this->_code = $code;
    		}
    	}
    	public function setName($name)
    	{
    		if (is_string($name))
    			{
    			$this->_name = $name;
    			}
    	}
    }
    Le php seul fonctionne et renvoie bel et bien un warning si il ne peux pas supprimer l'element, y a t-il un moyen de passer proprement ce warning a Ajax ? Autrement que :
    JS:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    $('.ButtonDelete').on('click', function() {
    		let id= $(this).val();
    		let code=$('#code'+id).val();
    		let confimation = confirm("Are you sure you want to delete " + code + "?");
    		if (confimation==true){
    			req = $.ajax({
    				url: "menu.php?Option=deleteIgr",
    				type : 'POST',
    				data : { code : code }
    			});
    			req.done(function (response, status, jqXHR){
    				if (response!='ok') {
    				alert("this element cannot be delete" + response);
    				}
    				else {
    				console.log("Deleted with success");
    				$('#row'+id).remove();
    				}
    				
    			});
    			req.fail(function (jqXHR, status, error){
    				console.error("An error occurred: " + status, error);
    			});
    		}
    	});
    PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    case "deleteIgr":
    				require("Class/Ingredient.php");
    				require("Class/IngredientsManager.php");
    				$data = array ('code'=> $_POST['code']);
    				$deleterIngredient = new IngredientsManager;
    				$deletedIngredient=$deleterIngredient->deleted(new Ingredient($data));
    				echo 'ok';
    				break;

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Comme on t'a dit, c'est à toi de récupérer les erreurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public function deleted(Ingredient $ingredient)
    {
       try(){
    		$db = $this->dbConnect();
    		$q=$db->prepare('DELETE FROM Products WHERE Code = :code ');
    		$q->bindValue(':code', $ingredient->code());
    		$q->execute();
    		return true;
    	} catch(..........){
    		return false;
    	}
    }
    PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    case "deleteIgr":
    				require("Class/Ingredient.php");
    				require("Class/IngredientsManager.php");
    				$data = array ('code'=> $_POST['code']);
    				$deleterIngredient = new IngredientsManager;
    				$deletedIngredient=$deleterIngredient->deleted(new Ingredient($data));
     
    				if( !$deletedIngredient ){ echo 'delete-error'; } // ou autre formulation, pour traitement en JS
     
    				break;

Discussions similaires

  1. Réponses: 21
    Dernier message: 12/12/2014, 16h04
  2. [Wamp] [MAMP] PHP n'affiche pas les erreurs, même avec display_errors On
    Par Galdon dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 01/02/2010, 19h33
  3. [AJAX] IE7 : mon script ne fonctionne plus
    Par Oluha dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 24/01/2007, 16h48

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