Vous n'êtes pas identifié(e).
Pages : 1
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>';
}
}
}
?>
Bonjour, j'ai une table villes et une autre pays. La jointure ne ce fait pas. Besoin d'aide. Merci d'avance.
villes.php
<?php
$mysqli = new mysqli('localhost', 'root', '', 'exercice_projet_villes');
$mysqli->set_charset("utf8");
?>
<?php
$result = $mysqli->query('SELECT ville_id, ville_nom FROM villes');
while ($row = $result->fetch_array()) {
$villes[$row['ville_id']] = $row['ville_nom'];
}
$result = $mysqli->query('SELECT pays.pays_id, pays_nom FROM pays INNER JOIN villes
WHERE pays.pays_id = villes.pays_id GROUP BY pays_nom ORDER BY pays_nom');
while ($row = $result->fetch_array()) {
$pays_liste[$row['pays_id']] = $row['pays_nom'];
echo '<pre>';
print_r($pays_liste);
echo '</pre>';
}
?>
<ul>
<?php
if (!empty($villes)) {
foreach ($villes as $id => $ville) : ?>
<li><a href="ville.php?id=<?php echo $id; ?>"><?php echo $ville; ?></a></li>
<?php endforeach ?>
<?php } ?>
</ul>
<ul>
<?php
if (!empty($pays_liste)) {
foreach ($pays_liste as $id => $pays) : ?>
<li><a href="pays.php?id=<?php echo $id; ?>"><?php echo $pays; ?></a></li>
<?php endforeach ?>
<?php } ?>
</ul>
<?php
$result->free();
$mysqli->close();
?>
pays.php
<?php require('includes/inc-connexion.php'); ?>
<?php
$pays_id = $_GET['id'];
$result = $mysqli->query('SELECT pays_nom, ville_nom, ville_id FROM pays INNER JOIN villes
WHERE villes.pays_id = pays.pays_id AND pays.pays_id = ' . $pays_id);
while ($row = $result->fetch_array()) {
$pays_nom = $row['pays_nom'];
$villes[$row['ville_id']] = $row['ville_nom'];
}
?>
<?php
$result->free();
$mysqli->close();
?>
Pages : 1