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 :

Mise à jour des données à partir d'un formulaire en POO avec PDO [PDO]


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Par défaut Mise à jour des données à partir d'un formulaire en POO avec PDO
    Bonjour, lorsque je veut mettre à jour les données dans la base, cela se fait, mais j'ai comme même 3 messages d'erreurs qui s'affiche.

    Warning: Illegal string offset 'ville_id' in C:\wamp64\www\villes-site\process\process-edition.php
    Warning: Illegal string offset 'ville_nom' in C:\wamp64\www\villes-site\process\process-edition.php
    Warning: Illegal string offset 'ville_texte' in C:\wamp64\www\villes-site\process\process-edition.php

    Merci d'avance pour votre aide & bonne journée.

    edition.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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    <?php
     
         require('includes/inc-connexion.php');
         require('class/villeManager.php');
         require('process/process-edition.php');
     
         $manager = new villeManager($db);
         $city = $manager->getVille();
     
         $ville_nom = $city['ville_nom'];
         $ville_texte = $city['ville_texte'];
         $ville_id = $city['ville_id'];
    ?>
     
    <!DOCTYPE html>
     
    <html lang="fr">
     
    <head>
         <meta charset="utf-8">
         <title>Mettre à jour la ville</title>
         <link rel="stylesheet" href="css/style.css">
    </head>
     
    <body>
         <div id="wrapper">
             <main>
                 <header>
                     <h1>Mettre à jour la ville</h1>
                 </header>
     
                 <div id="bloc_form">
                     <form action="" method="post" id="update_form">
                         <fieldset>
                             <legend>Mettre à jour la ville</legend>
                             <p><label for="city_name">Nom de ville</label></p>
                             <p><input type="text" id="city_name" name="city_name_form" autofocus="autofocus" value="<?php echo $ville_nom; ?>"></p>
     
                             <p><label for="city_text">Texte de ville</label></p>
                             <p><textarea cols="64" rows="32" id="city_text" name="city_text_form"><?php echo $ville_texte; ?></textarea></p>
     
                             <p><input type="hidden" name="city_id_form" value="<?php echo $ville_id; ?>"></p>
     
                             <p>
                                 <input type="reset" id="reset_form" value="Effacer le formulaire">
                                 <input type="submit" id="submit_form" name="submit_form" value="Valider">
                             </p>
                         </fieldset>
                     </form>
     
                     <?php if(isset($message)) echo $message ?>
                 </div>
             </main>
     
             <?php require('includes/inc-footer.php'); ?>
    class/Ville.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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
     
    class Ville {
     
             private $_ville_id;
             private $_ville_nom;
             private $_ville_texte;
     
             private static $_error;
     
             const MSG_ERROR_VILLE_ID = 'VILLE_ID doît être un entier';
             const MSG_ERROR_VILLE_NOM = 'VILLE_NOM doît être une chaîne de caractères';
             const MSG_ERROR_VILLE_TEXTE = 'VILLE_TEXTE doît être une chaîne de caractères';
             const MSG_ERROR_END = 'L\'objet ne peut pas être crée';
     
             public function __construct(array $data) {
     
                 $this->setVilleId($data['ville_id']);
                 $this->setVilleNom($data['ville_nom']);
                 $this->setVilleTexte($data['ville_texte']);
     
                 if(!empty(self::$_error)) {
     
                     throw new Exception(self::$_error . self::MSG_ERROR_END);
                 }
             }
     
             public function setError($msg) {
     
                 self::$_error = $msg;
             }
     
             public function getError() {
     
                 return self::$_error;
             }
     
             public function setVilleId($_ville_id) {
     
                 if((is_int($_ville_id)) AND ($_ville_id > 0)) {
     
                     $this->_ville_id = $_ville_id;
                 }
                 else {
     
                     $this->setError(self::MSG_ERROR_VILLE_ID);
                 }
             }
     
             public function setVilleNom($_ville_nom) {
     
                 if(is_string($_ville_nom)) {
     
                     $this->_ville_nom = $_ville_nom;
                 }
                 else {
     
                     $this->setError(self::MSG_ERROR_VILLE_NOM);
                 }
             }
     
             public function setVilleTexte($_ville_texte) {
     
                 if(is_string($_ville_texte)) {
     
                     $this->_ville_texte = $_ville_texte;
                 }
                 else {
     
                     $this->setError(self::MSG_ERROR_VILLE_TEXTE);
                 }
             }
     
             public function getVilleId() {
     
                 return $this->_ville_id;
             }
     
             public function getVilleNom() {
     
                 return $this->_ville_nom;
             }
     
             public function getVilleTexte() {
     
                 return $this->_ville_texte;
             }
         }
    class/villeManager.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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
     
    class villeManager {
     
             private $_db;
     
             public function __construct($db) {
     
                 $this->setDb($db);
             }
     
             public function setDb(PDO $dbh) {
     
                 $this->_db = $dbh;
             }
     
             public function getVille($ville_id = '') {
     
                 $ville_id = $_GET['ville_id'];
     
                 if(empty($ville_id)) {
     
                     $sql = 'SELECT ville_id, ville_nom, ville_texte FROM villes';
     
                     $stmt = $this->_db->prepare($sql);
                 }
                 elseif(is_numeric($ville_id)) {
     
                     $sql = 'SELECT ville_id, ville_nom, ville_texte FROM villes WHERE ville_id = :ville_id';
     
                     $stmt = $this->_db->prepare($sql);
     
                     $stmt->bindParam(':ville_id', $ville_id);
                 }
     
                 $stmt->execute();
     
                 $city = $stmt->fetch();
     
                 return $city;
             }
     
             public function updateVille(Ville $ville) {
     
                 $sql = 'UPDATE villes SET ville_nom = :ville_nom, ville_texte = :ville_texte WHERE ville_id = :ville_id';
     
                 $ville_id = $ville->getVilleId();
                 $ville_nom = htmlspecialchars($ville->getVilleNom());
                 $ville_texte = htmlspecialchars($ville->getVilleTexte());
     
                 $stmt = $this->_db->prepare($sql);
     
                 $stmt->bindParam(':ville_id', $ville_id);
                 $stmt->bindParam(':ville_nom', $ville_nom);
                 $stmt->bindParam(':ville_texte', $ville_texte);
     
                 $stmt->execute();
             }        
    }
    process/process-edition.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
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
    require('includes/inc-connexion.php');
    require('class/Ville.php');
     
     
         if(isset($_POST['submit_form'])) {
     
             $ville_nom  = trim($_POST['city_name_form']);
             $ville_texte = trim($_POST['city_text_form']);
             $ville_id = trim($_POST['city_id_form']);        
     
     
             if((empty($ville_nom)) OR empty($ville_texte)) {
     
                 $message = '<p class="error">Tous les champs doivent être remplis !</p>';
             }
             else {
     
                 $manager = new villeManager($db);
     
                 $current_ville = $manager->getVille();
     
                 $new_content = array('ville_id' => (int) $current_ville[0]['ville_id'], 'ville_nom' => $current_ville[0]['ville_nom'],
                                      'ville_texte' => $current_ville[0]['ville_texte']);
     
                 $ville_to_update = new Ville($new_content);
     
                 $ville_to_update->setVilleNom($ville_nom);
                 $ville_to_update->setVilleTexte($ville_texte);
                 $ville_to_update->setVilleId($ville_id);
     
                 if($manager->updateVille($ville_to_update)) {
     
                     $message = '<p class="message">La mise à jour de la ville ' . $ville_nom . ' est effectuée.</p>';
                 }
                 else {
     
                     $message = '<p class="error">La mise à jour de la ville ' . $ville_nom . ' n\'est pas effectuée.</p>';
                 }
             }
         }

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 445
    Points : 4 958
    Points
    4 958
    Par défaut
    Bonjour,

    La méthode getVille() renvoi un objet avec fetch $city = $stmt->fetch();return $city;, donc pour récupérer le contenu pas la peine de mettre le [0] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $current_ville['ville_id']
    La même chose pour les autres valeurs...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Super Merci bien

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/04/2017, 18h56
  2. [AC-2007] Mise à jour des données à partir d'un formulaire
    Par jérix_kouame dans le forum IHM
    Réponses: 2
    Dernier message: 05/02/2013, 17h56
  3. [MySQL] Mise à jour des données à partir d'un formulaire
    Par runcafre91 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/08/2012, 19h56
  4. Réponses: 2
    Dernier message: 16/09/2010, 14h44
  5. [AC-2000] Mise à jour des données d'un formulaire à partir d'un autre
    Par Vincent79 dans le forum IHM
    Réponses: 6
    Dernier message: 03/09/2009, 14h45

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