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 :

UPDATE en POO - MVC


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chef de Projet et futur développeur web qui s'entraîne dur
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de Projet et futur développeur web qui s'entraîne dur

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 30
    Points
    30
    Par défaut UPDATE en POO - MVC
    Bonjour,

    Je me permets de faire appel à vous car je rencontre un soucis d'UPDATE dans le cadre de POO MVC avec lequel je m'exerce.

    Je n'arrive pas a faire fonctionner ce bout de code, et je ne rentre même pas dans mes conditions, le résultat reste toujours la même (redirection dans le 'else')
    Voici mes bouts de code qui parleront mieux que moi :

    Routeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                switch ($action) {
                    case 'pageModifierChapitre':
                        $this->ctrlPageModifierChapitre = new ControleurEspaceAdmin();
                        $this->ctrlPageModifierChapitre->pageModifierChapitre();
                        break;
                    case 'modifierChapitre':
                        $this->ctrlModifierChapitre = new ControleurEspaceAdmin();
                        $this->ctrlModifierChapitre->modifierChapitre();
                        break;
    Contrôleur :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
        public function pageModifierChapitre($msgErreurModifChapitre = '', $msgValideModifChapitre = '') {
            if (!isset($_SESSION['isAdmin'])) {
                header("Location:index.php?");
            }
            if (isset($_REQUEST['idPost'])) {
                $idPost = $_REQUEST['idPost'];
                $titrePost = $_REQUEST['titrePost'];
            }
            $post = $this->postManager->getPost($idPost);
            $vue = new Vue("PageModifierChapitre", "Modification : " . $titrePost);
            $vue->genererPageEspaceAdmin(array(
                'msgErreurModifChapitre' => $msgErreurModifChapitre,
                'msgValideModifRoman' => $msgValideModifChapitre,
                'post' => $post
            ));
        }
     
        public function modifierChapitre() {
            $msgErreurModifChapitre = '';
            $msgValideModifChapitre = '';
            if (isset($_POST['modifierChapitre']) && isset($_POST['auteurPost']) && isset($_POST['titrePost']) && isset($_POST['contenuPost']) && ($_GET['idPost'])) {
                $post = new Post([
                    'auteurPost' => $_POST['auteurPost'],
                    'titrePost' => $_POST['titrePost'],
                    'contenuPost' => $_POST['contenuPost'],
                    'idPost' => $_GET['idPost']
                ]);
                if (!$post->auteurValide()) {
                    echo 'erreur auteur';
                    $msgErreurModifChapitre = '<p style="color:red">Erreur : Le nom de l\'auteur ne peut être vide</p>';
                    $this->espaceAdmin($msgErreurModifChapitre, '');
                } elseif (!$post->titreValide()) {
                    echo 'erreur titre';
                    $msgErreurModifChapitre = '<p style="color:red">Erreur : Le titre du chapitre ne peut être vide</p>';
                    $this->espaceAdmin($msgErreurModifChapitre, '');
                } elseif (!$post->contenuValide()) {
                    echo 'erreur contenu';
                    $msgErreurModifChapitre = '<p style="color:red">Erreur : Le contenu du chapitre ne peut être vide</p>';
                    $this->espaceAdmin($msgErreurModifChapitre, '');
                } else {
                    echo 'modif réussi';
                   $this->postManager->update($post);
                   $msgValideModifChapitre = '<p style="color:green">Votre chapitre a bien été mis à jour</p>';
                   $this->espaceAdmin('', $msgValideModifChapitre);
                }
            } else {
                echo 'rien passé';
                $this->espaceAdmin();
            }
        }
    Lorsque je tente un essai, je rentre tout le temps dans le cas 'rien passé'




    Modele :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        public function update(Post $post) {
            // Connexion à la BDD
            // Prépare une requête de type UPDATE
            // Assignation des valeurs à la requête
            // Exécution de la requête
            $bdd = $this->getBdd();
            $update = $bdd->prepare('UPDATE posts SET date_post = :date_post, titre_post = :titre_post, contenu_post = :contenu_post WHERE id_post = :id_post');
            $update->bindValue(':date_post', $post->datePost());
            $update->bindValue(':titre_post', $post->titrePost());
            $update->bindValue(':contenu_post', $post->contenuPost());
            $update->execute();
        }
    Vue :
    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
     
    			<h2 class="sub-header">Modification "<strong><?= $post->titrePost()?></strong>"</h2>
    			<form method="post" action="index.php?action=modifierChapitre">
    			<div class="table-responsive">
    				<div class="form-group">
    					<label for="usr">Auteur :</label> <input type="text"
    						class="form-control" id="usr" value="<?= $post->auteurPost()?>">
    				</div>
    				<div class="form-group">
    					<label for="pwd">Titre du chapitre :</label> <input type="text"
    						class="form-control" id="pwd" value="<?= $post->titrePost()?>">
    				</div>
    				<div class="form-group">
    					<label for="comment">Contenu :</label>
    					<textarea rows="" cols=""><?= $post->contenuPost()?></textarea>
    					<!-- <textarea>Next, get a free Tiny Cloud API key!</textarea> -->
    				</div>
    			</div>
    			<a href="index.php?action=modifierChapitre&idPost=<?= $post->id()?>" class="btn btn-warning">
    			<input type="submit" name="modifierChapitre" value="Modifier"><span class="glyphicon glyphicon-download-alt"></span></a>
    			</form>
    <?php
    if (!empty($msgErreurModifChapitre)) {
    echo $msgErreurModifChapitre;
    } ?>

    Merci d'avance pour tout vos retours

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    plusieurs remarques :
    après une redirection, tu dois toujours sortir du script donc header("Location:index.php?"); doit être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header("Location:index.php?");
    exit;
    ensuite si tu sors toujours par le else c'est qu'une de tes condition n'est pas remplie. Note que ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST['modifierChapitre']) && isset($_POST['auteurPost']) && isset($_POST['titrePost']) && isset($_POST['contenuPost']) && ($_GET['idPost']))
    peut être remplacé par cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST['modifierChapitre'], $_POST['auteurPost'], $_POST['titrePost'], $_POST['contenuPost'], $_GET['idPost']) && is_int($_GET['idPost']))
    enfin si tu avais testé tes conditions une par une tu aurais vu qu'il te manque le nom des contrôles sur ton formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type="text" class="form-control" id="usr" value="<?= $post->auteurPost()?>">
    // par 
    <input type="text" name="auteurPost" class="form-control" id="usr" value="<?= $post->auteurPost()?>">
    et pour finir tu dois TOUJOURS échapper les valeurs que tu envoies au navigateur avec htmlspecialchars() et pas faire simplement : value="<?= $post->auteurPost()?>" à moins que $post->auteurPost() soit déjà sécurisé

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chef de Projet et futur développeur web qui s'entraîne dur
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de Projet et futur développeur web qui s'entraîne dur

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Salut,

    Je te remercie pour toutes tes remarques, ça m'aide beaucoup !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (isset($_POST['modifierChapitre'], $_POST['auteurPost'], $_POST['titrePost'], $_POST['contenuPost'], $_GET['idPost']) && is_int($_GET['idPost']))
    un seul "isset" pour tout vérifier ? J'avais d'abord rédigé mon code de cette manière (sans la vérification is_int à la fin), mais on m'avait corrigé en ajoutant un "isset" sur chaque "$_POST" donc je me retrouve un peu confus
    Le fait de l'écrire avec un && et "," doit être différent si je comprend bien ? Avec un && je suis obligé de revérifier tandis qu'avec "," ça reste dans la même vérification ?



    Erreur d'inattention de ma part pour les name dans le formulaire... je ne suis pas encore très à l'aise avec le debug.
    Par contre, malgré les "name" ajouté, mon script part toujours dans le else...

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Poste voir ton code corrigé stp

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Chef de Projet et futur développeur web qui s'entraîne dur
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de Projet et futur développeur web qui s'entraîne dur

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Contrôleur :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
        public function pageModifierChapitre($msgErreurModifChapitre = '', $msgValideModifChapitre = '') {
            if (!isset($_SESSION['isAdmin'])) {
                header("Location:index.php?");
                exit();
            }
            if (isset($_REQUEST['idPost'])) {
                $idPost = $_REQUEST['idPost'];
                $titrePost = $_REQUEST['titrePost'];
            }
            $post = $this->postManager->getPost($idPost);
            $vue = new Vue("PageModifierChapitre", "Modification : " . $titrePost);
            $vue->genererPageEspaceAdmin(array(
                'msgErreurModifChapitre' => $msgErreurModifChapitre,
                'msgValideModifRoman' => $msgValideModifChapitre,
                'post' => $post
            ));
        }
     
        public function modifierChapitre() {
            $msgErreurModifChapitre = '';
            $msgValideModifChapitre = '';
            if (isset($_POST['modifierChapitre'], $_POST['auteurPost'], $_POST['titrePost'], $_POST['contenuPost'], $_GET['idPost']) && is_int($_GET['idPost'])){
                $post = new Post([
                    'auteurPost' => $_POST['auteurPost'],
                    'titrePost' => $_POST['titrePost'],
                    'contenuPost' => $_POST['contenuPost'],
                    'idPost' => $_GET['idPost']
                ]);
                if (!$post->auteurValide()) {
                    echo 'erreur auteur';
                    $msgErreurModifChapitre = '<p style="color:red">Erreur : Le nom de l\'auteur ne peut être vide</p>';
                    $this->espaceAdmin($msgErreurModifChapitre, '');
                } elseif (!$post->titreValide()) {
                    echo 'erreur titre';
                    $msgErreurModifChapitre = '<p style="color:red">Erreur : Le titre du chapitre ne peut être vide</p>';
                    $this->espaceAdmin($msgErreurModifChapitre, '');
                } elseif (!$post->contenuValide()) {
                    echo 'erreur contenu';
                    $msgErreurModifChapitre = '<p style="color:red">Erreur : Le contenu du chapitre ne peut être vide</p>';
                    $this->espaceAdmin($msgErreurModifChapitre, '');
                } else {
                    echo 'ajout réussi';
                   $this->postManager->update($post);
                   $msgValideModifChapitre = '<p style="color:green">Votre chapitre a bien été mis à jour</p>';
                   $this->espaceAdmin('', $msgValideModifChapitre);
                }
            } else {
                echo 'rien passé';
                $this->espaceAdmin();
            }
        }
    Vue :
    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
     
    			<form method="post" action="index.php?action=modifierChapitre">
    			<div class="table-responsive">
    				<div class="form-group">
    					<label for="usr">Auteur :</label> 
    					<input type="text" class="form-control" id="usr" name="auteurPost" value="<?= htmlspecialchars($post->auteurPost()) ?>">
    				</div>
    				<div class="form-group">
    					<label for="pwd">Titre du chapitre :</label> 
    					<input type="text" class="form-control" id="pwd" name="titrePost" value="<?= htmlspecialchars($post->titrePost()) ?>">
    				</div>
    				<div class="form-group">
    					<label for="comment">Contenu :</label>
    					<textarea name="contenuPost"><?= htmlspecialchars($post->contenuPost()) ?></textarea>
    					<!-- <textarea>Next, get a free Tiny Cloud API key!</textarea> -->
    				</div>
    			</div>
    			<a href="index.php?action=modifierChapitre&idPost=<?= $post->id() ?>" class="btn btn-warning">
    			<input type="submit" name="modifierChapitre" value="Modifier"><span class="glyphicon glyphicon-download-alt"></span></a>
    			</form>
    <?php
    if (!empty($msgErreurModifChapitre)) {
    echo $msgErreurModifChapitre;
    } ?>
    Le Modèle et le Routeur n'ont pas bougé

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    euh action="index.php?action=modifierChapitre", il ne manquerait pas idPost comme tu testes $_GET['idPost'], je dis ça par hasard...
    si tu ne fais un poil de débogage, je pense que ce fil va s'étirer mais s'étirer...

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Chef de Projet et futur développeur web qui s'entraîne dur
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de Projet et futur développeur web qui s'entraîne dur

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form method="post" action="index.php?action=modifierChapitre&idPost=<?= $post->id() ?>">
    Même sous ce format la, j'ai le résultat "rien passé", pourtant l'idPost arrive bien à se balader de page en page

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    donc il semblerait que le souci se balade du côté de $_GET['idPost'].
    Tu n'as pas d'idée ?
    remplace && is_int($_GET['idPost']) par && ctype_digit($_GET['idPost']) && ((int)$_GET['idPost'] > 0)

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Chef de Projet et futur développeur web qui s'entraîne dur
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de Projet et futur développeur web qui s'entraîne dur

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    J'aimerais bien te dire "problème résolu ! merci énormement" mais malheureusement toujours pas...

    En revanche j'ai trouvé une petite variante; quand je teste simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            if (isset($_POST['modifierChapitre'], $_POST['auteurPost'], $_POST['titrePost'], $_POST['contenuPost'], $_GET['idPost'])){
    J'arrive a rentrer dans la condition "ajout réussi", et l'étape suivante était le message d'erreur :
    SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
    Erreur qui par la suite a été rectifiée en modifiant le Modele, car 'date_post' n'existe pas dans ce contexte et qu'il manquait également le bind 'id_post'.
    A l'heure actuelle, l'UPDATE fonctionne, mais du coup, il ne contient pas la vérification que tu souhaites y ajouter...

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

Discussions similaires

  1. [POO] MVC Half-Edge et polymorphisme
    Par TanEk dans le forum C++
    Réponses: 8
    Dernier message: 14/12/2008, 17h28
  2. [POO] POO & MVC => arborescence ?
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 27/10/2007, 19h34
  3. Réponses: 2
    Dernier message: 14/09/2007, 08h55
  4. [POO] MVC : Gestion des "pages"
    Par Dinan dans le forum Langage
    Réponses: 4
    Dernier message: 18/02/2007, 19h44
  5. [POO] MVC : Vue composée
    Par Neuromancien2 dans le forum Langage
    Réponses: 3
    Dernier message: 18/02/2007, 10h38

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