Supprimer une entrée avec ajax

Default
,

Bonjour,

J'essai de supprimer les entrées d'une table mysql sans devoir recharger la page et je n'obtiens aucune erreur dans la console. Mais rien est supprimé.

Je vous remercie de votre aide.

jQuery(function() {
  jQuery('#delete').click(function() {
    jQuery.ajax({
      type: 'GET',
      url: "./admin.php?page=delete_contenu_nouvelle",
      timeout: 3000,
      success: function() {
        alert "OK"; 
      },
      error: function() {
        alert('La requête n\'a pas abouti'); 
      }
    });    
  });  
});

8 Réponse

27754
,

Il faut que tu regardes dans l'onglet "network" et cliquer sur la requête "admin.php" pour savoir si il y a eu une erreur. Si ton code PHP ne retourne pas un code 500 ou autres ton JS ne peut pas savoir que le code php n'a pas "fonctionné".

As-tu déjà essayé dans ton navigateur de supprimer une entrée via l'url mentionné ?

17162
,

Bonjour.
Pour commencer, une url ne commence pas par ..
Ensuite, ce serait bien que tu nous montre le code PHP lié à la requête ajax.
Pour terminer, pour rappel :

Deprecation Notice: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks are removed as of jQuery 3.0. You can use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

Ou alors il te faut utiliser les callback de Promise, soit then et catch.
Donc si tu utilises une version égale ou supérieure à 3.0 de jQuery, il te faut modifier tes callbacks.

Default
,

Bonjour,

Voici mon code php qui fonctionne très bien sans ajax:

<!--*********************************************************************************************-->
<!--******************************** SUPPRESSION DES DONNEES *********************************** -->
<!--******************************************************************************************** -->
    <?php
    if (isset($_GET['id']))
    {
        include 'connect.php';
        global $wpdb;
        $nouvelles_table_name = $wpdb->prefix . 'nouvelles';

        $id = htmlspecialchars($_GET['id']);
        $requete = "
        SELECT *
        FROM  $nouvelles_table_name  
        WHERE id = $id
        ";

        $resultat = $wpdb->get_results($requete);
        $erreurSql = $wpdb->last_error;

        if ( $erreurSql == "" ) {

            try{
        // Vérification de la présence d'une nouvelle
                $titre= $_GET['titre'];
                $sql = "
                SELECT COUNT(titre) AS nb 
                FROM $nouvelles_table_name 
                WHERE titre = '$titre'";
                $result = $bdd->query($sql);
                $columns = $result->fetch();
                $nb = $columns['nb'];
                if ($nb[0] >0){  
                // On supprime la nouvelle
                    $id= $_GET['id'];
                        $req = $bdd->exec("
                        DELETE FROM $nouvelles_table_name 
                        WHERE id = ".$id."") or die('erreur de sql<br>'.mysql_error());
                }
                ?>
                <script>document.location.href="<?php echo admin_url()."admin.php?page=get_nouvelle_liste"; ?>"</script>
                <?php
            //$req->closeCursor(); // Termine le traitement de la requête
        }//try
        catch(Exception $e)
        {
                // en cas d'erreur :
            echo " Erreur ! ".$e->getMessage();
            echo " Les données : " ;
            print_r($req);
        }//catch
}//if
else 
{
    echo "<div class='container-fluid'><div class='row'><div class='col-lg-12'><p style='padding:10px;margin-top:10px' class='alert-danger'>Suppression impossible !</p></div></div></div>";
}//else
}//if
?>

Ma modal qui appelle le php:

<div class="modal fade"  tabindex="-1" role="dialog" aria-labelledby="basicModal" aria-hidden="true" id=basicModal><!-- id="<?= $donnees->id;?>" -->
    <div class="modal-dialog modal-dialog-centered">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title" id="myModalLabel">SUPPRESSION</h4>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                <p>Voulez-vous vraiment supprimer la nouvelle
                    <b style="text-transform:uppercase"><?= $donnees->titre; ?></b> ?
                </p>
            </div>
            <div class="modal-footer">
                <?php 
                $id = $donnees->id; 
                $titre = $donnees->titre; 
                ?>
                <a id="delete" class="btn btn-secondary">OUI</a>

                <a href="#!" data-dismiss="modal" class="btn btn-primary">NON</a>
            </div>
        </div>
    </div>
</div>

et l'ajax:

jQuery(function() {
  jQuery('#delete').click(function() {
    jQuery.ajax({
      type: 'GET',
      url: "./admin.php?page=delete_contenu_nouvelle",
      timeout: 3000,
      success: function() {
        alert ("OK"); 
      },
      error: function() {
        alert('La requête n\'a pas abouti'); 
      }
    });    
  });  
});

Cela me renvoie l'alert avec "OK" (ilfaut que j'appuie 6 fois sur ok pour la faire disparaitre mais le status dans network est ok (200)

17162
,

Ton code PHP s'attend à avoir l'attribut id dans l'url, sauf que dans ta requête ajax, tu ne lui envoie ni le paramêtre ni une valeur, donc le script côté PHP ne s'exécute pas, par conséquent la requête SQL n'est pas exécutée.

Default
,

Alors je fais:

jQuery(function() {
  jQuery('#delete').click(function() {
    jQuery.ajax({
      url: "./admin.php?page=delete_contenu_nouvelle",
      type: 'GET',
      data: 'id=' + id,
      timeout: 3000,
      success: function() {
        ""; 
      },
      error: function() {
        alert('La requête n\'a pas abouti'); 
      }
    });    
  });  
});

Cela me renvoie l'erreur "id" n'est pas défini alors que je le reçois bien en GET

17162
,

Cela me renvoie l'erreur "id" n'est pas défini alors que je le reçois bien en GET

La variable id n'est pas défini dans ton code JavaScript et si tu veux récupérer un paramêtre qui se situe dans l'url de la page courante, ce n'est pas comme ça qu'il faut faire.

Default
,

Bonjour,
J'aimerais bien avoir aussi les pistes de solutions à ce problème.
Merci,

17162
,

@MartinLaura: Il te suffit de lire les réponses qui ont été données à l'auteur du sujet.
Nous n'allons quand même pas le répéter alors que les réponses sont situées dans le sujet.