2017-10-21 68 views
0

Je rencontre des problèmes pour récupérer les erreurs d'un script php appelé avec Ajax. J'ai un ajax qui dirige vers un script de suppression.
Voici mon Js:Traitement des erreurs php après un appel ajax

$('.js-delete-link').click(function (e) { 
    e.preventDefault(); 
    let id = $(this).closest('tr').find('.id').text(); 
    if (confirm('Voulez-vous vraiment supprimer le message ?')) { 
     let href = $(e.currentTarget).attr('href'); 
     $.ajax({ 
      url:href, 
      type:'post', 
      success:function(data){ 
       let msgJson = JSON.parse(data);     
       bootstrapNotify(msgJson.msg,msgJson.type); 
      }, 
     }) 
    } 
}); 

et voici mon script php où je supprime en fait les articles.

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 

if (isset($_GET['id'])) { 

    $id = FILTER_INPUT(INPUT_GET, 'id', FILTER_VALIDATE_INT); 
    if ($id === false) { 
     $arr = array("msg" => "Id incorrect ou non spécifié", "type" => 'danger'); 
    } else { 
     if ($messageModelDb->delete($id)) { 
      $arr = array("msg" => "Le ou les messages ont été supprimés", "type" => 'success'); 
     } else { 
      $arr = array("msg" => "Le message n'existe pas !", "type" => 'danger'); 
     } 
    } 
} 

echo json_encode($arr); 

} else { 
    $_SESSION['error'] = "Vous n'êtes pas autorisé."; 
    redirect('liste-messages'); 
} 

Dans mon php j'essaie de capturer toute erreur qui pourrait se produire lors de la requête et si elle arrive i passer un message selon l'erreur.
Cependant, peu importe ce que je reçois toujours un message de réussite, même si l'ID n'existe pas.
Désolé si cela peut sembler totalement évident mais je suis nouveau à tout cela et je suis coincé ici!
Nous vous remercions de votre aide!

+0

ne rediriger la page du navigateur tout en faisant un appel ajax – charlietfl

+0

Merci je ne savais pas que – Simondebn

Répondre

1

si isset ($ _ GET [ 'id']) est faux, rien ne se passera parce que vous devez mettre l'instruction else comme ceci:

<?php 

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    if (isset($_GET['id'])) { 

     $id = FILTER_INPUT(INPUT_GET, 'id', FILTER_VALIDATE_INT); 
     if (!$id) { 
      $arr = array("msg" => "Id incorrect ou non spécifié", "type" => 'danger'); 
     } else { 
      if ($messageModelDb->delete($id)) { 
       $arr = array("msg" => "Le ou les messages ont été supprimés", "type" => 'success'); 
      } else { 
       $arr = array("msg" => "Le message n'existe pas !", "type" => 'danger'); 
      } 
     } 
    } else { 
     $arr = array("msg" => "ID is not set", "type" => 'danger'); 
    } 
} else { 
    $arr = array("msg" => "Invalid request method", "type" => 'danger'); 
} 

echo json_encode($arr); 

Puis dans le fichier Javascript, vous pouvez ajouter un rappel d'erreur :

success: function(){ 
    ... 
}, 
error: function(XMLHttpRequest, textStatus, errorThrown) { 
    alert("Status: " + textStatus + " - Error: " + errorThrown); 
} 
+0

Ok qui l'a fait, mais je 'ai-je à gérer les erreurs dans le rappel ajax droit? pas dans le script PHP? – Simondebn

+0

Vous avez raison, j'ai édité mon anwser. –

+0

Ok merci beaucoup! Encore une chose cependant, quand j'essaie de mettre un mauvais identifiant dans mon lien, j'obtiens toujours une réponse comme si l'article existait et je ne comprends pas vraiment pourquoi? – Simondebn

0

AFAIK, le filter_input pourrait revenir trop NULL, alors $id === false sera faux dans ce cas. Essayez d'utiliser à la place if(!$id), si vous sûr que votre $ id ne pouvait pas être 0

redirect côté serveur
+0

Merci pour ça! – Simondebn

+0

Si $ id = NULL, c'est toujours faux: http://php.net/manual/en/types.comparisons.php. Je pense qu'il est préférable de faire si (! Isset ($ id) && $ id! == "") ici –

+0

@jeroene wait ... 'if (! $ Id)' sera vrai dans les deux cas, quand $ id est null et quand $ id est faux, donc nous pouvons l'utiliser pour tester $ id, non? – AlexandrX