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 :

PHP - modifier un article


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 119
    Par défaut PHP - modifier un article
    Bonjour,

    j'aimerais pouvoir modifier un article que j'ai créé en PHP mais ça ne fonctionne pas. j'aimerais comprendre mon erreur, je vous montre le code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <a href="index.php?action=edit&amp;id=<?= $post['id'] ?>">Modifier</a>
    La vue où je modifie l'article (UpdateView.php) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <h3>Modifiez un billet existant à l'aide des champs ci-dessous :</h3>
     
             <form action="index.php?action=listPosts&amp;id=<?= $post['id']?>" method="POST">
                 <p><label for="title">Titre :</label><input type="text" name="newtitle" value="<?= $post['title']?>"></p>
                 <p><label for="content">Saisissez l'article modifié :</label><textarea name=" newcontent" ><?= $post['content']?></textarea></p>
                 <p><input type="submit"></p>
             </form>

    Modèle :

    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
     
     
    //Récupération du post que l'on veut modifier
    function getEditPost() {
        $db = dbConnect();
        $req = $db->prepare('SELECT * FROM posts WHERE id = ?');
        $req->execute(array($id));
        $post = $req->fetch();
        return $post;
    }
     
     
    //Modifier le post
    function getUpdatePost($id) {
        $db = dbConnect();
        $update = $db->prepare('UPDATE posts SET title = ?, content = ? WHERE id = ?');
        $update->execute(array($_POST['newtitle'], $_POST['newcontent'], $id));
        return $update;
    }


    Controller :

    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
     
     
    function editPost() {
        $post = getEditPost();
        if ($post === false) {
            print "Impossible d'accéder à la page demandé";
        }else {
            require('View/frontend/UpdateView.php');
        }
    }
     
    function updatePost($id) {
        if(isset($_POST['title']) && isset($_POST['content'])) {
            if(!empty($_POST['title'])&& !empty($_POST['content'])) {
                $update = getUpdatePost($id);
            }else {
                print "Tout les champs ne sont pas remplis !";
            }
        } else {
            print "Les champs n'existent pas !";
        }    
    }


    et enfin le routeur (l'index) :

    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
    //Afficher les posts
    if (isset($_GET['action'])) {
        if ($_GET['action'] == 'listPosts') {
            listPosts();
     
            if(isset($_POST['title']) && isset($_POST['content'])) {
                if(!empty($_POST['title']) && !empty($_POST['content'])) {
                    updatePost($_GET['id']);   
                }else {
                    print "Les champs sont pas remplis !";
                }
            } 
     
        //Afficher le post et ses commentaires
        } elseif ($_GET['action'] == 'post') {
            if (isset($_GET['id']) && $_GET['id'] > 0) {
                post();   
            } else {
                echo 'Erreur : aucun identifiant de billet envoyé';
            }
       // Affiche la vue UpdateView.php
        } elseif ($_GET['action'] == 'edit') {
            if (isset($_GET['id']) && $_GET['id'] > 0) {
                editPost();
            }
        }else {
            print "Les champs title et content n'existent pas !";
        }
    } 
     
    else {
        listPosts();
    }
    J'accède bien à UpdateView.php pour pouvoir modifier l'article mais quand j'envoie il n'y a aucune modification. Merci pour votre aide

  2. #2
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjour

    Je ne pourrais que tu suggérer d'utiliser xDebug qui permet de faire un suivi, ligne de code par ligne de code, de ton script.

    Tu actives xDebug, tu mets un breakpoint sur ta fonction et, depuis ton navigateur préféré, localhost, tu lances ton action.

    Perso, j'utilise xDebug avec Visual Studio Code; voici un lien vers un article : https://dev.to/zeegcl/debugging-a-ph...th-xdebug-2anp

    Note : ton script est que très peu sécurisé et gaffe aux petits malins qui vont tomber dessus. Prends ta fonction getEditPost, tu supposes que $id est un chiffre mais quid si je mets "1 or 1=1" dans l'id ? Ben j'aurais tous les articles de ton site et pas juste un seul et ça, comme tu le vois, c'est tout gentil comme hack. En outre où est défini $id dans cette fonction ? Ce n'est pas un paramètre de la fonction et donc une variable globale (à éviter; bugs en perspective)

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 119
    Par défaut
    Merci pour ta réponse,

    Oui mon script n'est pas encore bien sécurisé car je ne l'ai pas encore fait. je me concentre d'abord sur les fonctionnalités (tout est en off line de toute manière)

    Je viens de passer en paramètre la variable $id en tant que variable globale dans la fonction getEditPost($id), puis dans editPost($id), et dans le routeur j'écris : editPost($_GET['id']);


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function getEditPost($id) {
        $db = dbConnect();
        $req = $db->prepare('SELECT * FROM posts WHERE id = ?');
        $req->execute(array($id));
        $post = $req->fetch();
        return $post;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //Afficher le post qu'on souhaite modifier dans UpdateView
    function editPost($id) {
        $post = getEditPost($id);
        if ($post === false) {
            print "Impossible d'd'accéder à la page demandé";
        }else {
            require('View/frontend/UpdateView.php');
        }
    }

    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
     
    //Afficher les posts
    if (isset($_GET['action'])) {
        if ($_GET['action'] == 'listPosts') {
            listPosts();
     
            if(isset($_POST['title']) && isset($_POST['content'])) {
                if(!empty($_POST['title']) && !empty($_POST['content'])) {
                    updatePost();   
                }else {
                    print "Les champs sont pas remplis !";
                }
            } 
     
        //Afficher le post et ses commentaires
        } elseif ($_GET['action'] == 'post') {
            if (isset($_GET['id']) && $_GET['id'] > 0) {
                post();   
            } else {
                echo 'Erreur : aucun identifiant de billet envoyé';
            }
        } elseif ($_GET['action'] == 'edit') {
            if (isset($_GET['id']) && $_GET['id'] > 0) {
                editPost($_GET['id']);
            }
        }else {
            print "Les champs title et content n'existent pas !";
        }
    } 
     
    else {
        listPosts();
    }
    Mais c'est toujours la même chose il ne se passe rien , le commentaire n'est pas modifé

  4. #4
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Utilise xDebug et tu seras assez vite fixé.

    xDebug mérite de s'y arrêter car c'est une connaissance que tu vas acquérir et qui sera valable pour tous tes projets à venir; tous tes "oui mais pourquoi cela ne fonctionne pas" à venir.

    Fais l'investissement, tu ne seras pas déçu. Il se passe rarement une semaine où je ne l'utilise pas pour savoir par où passe mon code, quel est l'état de mes variables, le contenu du XML que je suis occupé à parser, pourquoi telle exception est générée de temps à autre, ...

    Autre conseil, déplace tes exceptions dans la fonction où l'exception est logique : dans getEditPost; il n'est pas normal d'avoir un false comme valeur de retour du fetch => c'est là, dans cette fonction, que tu devrais "jeter" l'exception "Oups... l'article n'a pas été trouvé" et pas dans les fonctions qui appelle getEditPost. Que doit retourner getEditPost ? Un article et jamais autre chose qu'un article. Il ne devrait pas retourner un booléen parce qu'un booléen est une erreur => gère l'erreur dans getEditPost et permet donc à la fonction qui appelle getEditPost d'être certain que, si le code continue, c'est qu'un article est bien retrouvé.

    (bravo pour le triple égal !)

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 119
    Par défaut
    Ca fonctionne !!!

    comme tu l'avais souligné il fallait bien définir une variable globale si on l'a définis à l'intérieur d'une fonction.


    Model :
    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
    function getEditPost($id) {
        $db = dbConnect();
        $req = $db->prepare('SELECT id, title, content, DATE_FORMAT(creation_date, \'%d/%m/%Y à %Hh%imin%ss\') AS creation_date_fr FROM posts WHERE id = ?');
        $req->execute(array($id));
        $post = $req->fetch();
        return $post;
    }
     
    function getUpdatePost($id) {
        $db = dbConnect();
     
        $title = $_POST['title'];
        $content = $_POST['content'];
     
        $update = $db->prepare('UPDATE posts SET title = ?, content = ? WHERE id = ?');
        $update->execute(array($title, $content, $id));
        return $update;
    }
    Controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //Afficher le post qu'on souhaite modifier dans UpdateView
    function editPost($id) {
        $post = getEditPost($id);
        if ($post === false) {
            print "Impossible d'd'accéder à la page demandé";
        }else {
            require('View/frontend/UpdateView.php');
        }
    }
     
    function updatePost($id) {
        $update = getUpdatePost($id);
        header('Location: index.php?action=listPosts&id=' . $id);
    }

    Et dans l'index.php j'ai simplement passer en paramètre un $_GET['id] aux 2 fonctions editPost() et updatePost()


    ps: je ne connaissais pas Xdebug, l'installation n'a pas l'air très facile mais je vais regarder ça.

  6. #6
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Si tu souhaites être plus efficace face à des "comportements bizarres", oui, XDebug n'est pas simple à installer mais à terme tu vas gagner un temps précieux (combien de temps as-tu passé à comprendre la solution à ton problème actuel ? À multiplier par le nombre de problèmes que tu auras dans le futur... XDebug te fera gagner ce temps-là)

    Bonne soirée et bonne programmation

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

Discussions similaires

  1. [Joomla!] Afficher (sans exécuter) du code php dans un article
    Par jekif dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 11/04/2011, 14h12
  2. [MySQL] PHP > Modifier, supprimer des champs via un site web
    Par celinecassiope dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/02/2009, 21h14
  3. [Spip] Intégration d'un script PHP dans un article Spip
    Par Devs+ dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 19/11/2008, 11h36
  4. [Joomla!] Est-il possible de placer du code PHP dans un article ?
    Par laurent77 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 20/08/2008, 09h53
  5. balise <?php modifie l'apparence ?
    Par mindover280 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 28/02/2007, 11h18

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