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

Langage PHP Discussion :

Uncaught PDOException SQLSTATE[23000] [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2018
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Novembre 2018
    Messages : 58
    Points : 48
    Points
    48
    Par défaut Uncaught PDOException SQLSTATE[23000]
    Bonjour,

    Je suis en train de créer un blog et sur la partie admin je lui donne la possibilité de supprimer un article. Quand il clique sur l'icône poubelle, l'article se supprime, jusque là rien de grave. J'ai décidé d'y rajouter un modal (" j'utilise materialize en framework) qui lorsqu'il clique sur la poubelle, un message apparaît lui demandant confirmation. Si il clique sur oui, l'article ne se supprime pas et un message d'erreur apparaît :
    Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails
    Le site est fait en POO, j'ai installé composer afin d'utiliser un autoloader et installer TWIG, sinon pas de framework côté php. Voici le côté vue client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     <td><a href="#modal1" class="delete modal-trigger"><i class="material-icons">delete</i></a>
                            <div id="modal1" class="modal">
                                    <div class="modal-content">
                                      <h4>Voulez-vous vraiment supprimer cet article ?</h4>
                                    </div>
                                    <div class="modal-footer">
                                      <a href="delete/{{ articles.id_article }}" class="modal-close waves-effect waves-green btn-flat">{{ articles.id_article }}</a>
                                      <a href="#" class="modal-close waves-effect waves-green btn-flat">Non</a>
                                    </div>
                                </div>
                        </td>
    Lorsque l'admin clique sur la poubelle, ça lui retourne la boîte de dialogue et lorsqu'il confirme, c'est censé l'envoyé vers le lien admin/delete/(idArticle) qui appelle mon controlleur avec la méthode DELETE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public function delete($idArticle){
                $admin = new Admin();
                $delete = $admin->delete($idArticle);
                header("Location: /admin/auth");
            }
    Problème j'ai ce message d'erreur et l'URL indique toujours un ID = 1.

    Un indice pour me sortir de ce problème ?

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut
    vous parlez de l'action "admin/delete/(idArticle)" mais dans le code HTML, j'ai l'impression que l'appel se fait vers "delete/(idArticle)" qui essaye donc de supprimer quelque chose d'autre qu'un article.

    regardez dans les outils de développement du navigateur pour vérifier que la requête HTTP est celle que vous prévoyiez.
    par exemple avec firefox, ça s'affiche avec CTRL + MAJ + E.

  3. #3
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2018
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Novembre 2018
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Bonjour Mathieu,

    L'appel fonctionne. Lors du clique, ma route est appelé : $router->getRoutes("admin/delete/:id", "ControllerAdmin+delete"); et j'ai bien cette route affiché dans mon URL mais avec toujours le même ID (1): /admin/delete/1.

    Par contre si je supprime la partie modal et que je remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><a href="#modal1" class="delete modal-trigger"><i class="material-icons">delete</i></a>
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><a href="delete/{{ articles.id_article }}" class="delete"><i class="material-icons">delete</i></a></td>
    Là tout ce qui concerne mon article est supprimé et je suis bien redirigé vers /admin/delete/ (bon numéro d'id) . Le rajout du modal me pose problème

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut
    donc l'étau se ressert autour du soucis, le problème est que twig ne place pas le bon identifiant et met "1". déjà vous pouvez vérifier que le problème est bien là en regardant la source du code HTML généré.

    ensuite, je vous conseille de modifier le titre de la discussion pour indiquer que le soucis est de twig parce qu'actuellement le titre parle de SQL.

  5. #5
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2018
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Novembre 2018
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Le problème était là.

    J'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <td><a href="#modal1" class="delete modal-trigger"><i class="material-icons">chrome_reader_mode</i></a>
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <td><a href="#modal{{ alertComm.id_comm }}" class="delete modal-trigger"><i class="material-icons">chrome_reader_mode</i></a>
    et le tour est joué.

    Merci Mathieu

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2018, 15h51
  2. [MySQL] Fatal error: Uncaught PDOException: SQLSTATE[22007]: Invalid datetime format: 1292
    Par jmtrivia dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/06/2017, 14h59
  3. [MySQL] Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000
    Par okoweb dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 03/12/2011, 08h32
  4. Réponses: 3
    Dernier message: 04/03/2011, 09h30
  5. Réponses: 7
    Dernier message: 29/11/2010, 17h34

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