PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 13-11-2020 11:27:28

cyci60
Membre
Inscription : 13-03-2019
Messages : 2

MISE A JOUR DES DONNEES A 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

<?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

<?php

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

<?php

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

<?php

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>';
             }
         }
     }
?>

 

Dernière modification par cyci60 (13-11-2020 11:35:56)

Hors ligne

Pied de page des forums