Bonjour à tous, j'essaye de mettre à jour ma base de donnée SQL. Dans un premier temps j'affiche ma bdd, voici le code :
if($_SERVER'REQUEST_METHOD'] == "POST"){
$id =intval($_POST'id']);
$validate = true;
$data= array(
'id' => $id,
'name'=>$_POST'name']
);
if(empty($_POST'name'])){
$validate =false ;
$erreur_name = "* Veuillez remplir ce champ !";
}
if($validate){
$nb= $DB->insert("UPDATE sommaire_dao_cao SET name=:name WHERE id=:id",$data);
if($nb){
$_SESSION'message'] = "l'article a été mis a jour avec succès.";
header('location:dao-cao.php');
exit();
}else{
$_SESSION'erreur'] = "Un problème de sauvegarde !";
}
}
}
if(isset($_GET'id'])){
$post = $DB->query("SELECT * FROM sommaire_dao_cao WHERE post_id=:id",array('id'=>$_GET'id']));
}
?>
Ensuite je fais une boucle comme ceci :
<form action="chapitre.php?id=<?php echo $post[0]->post; ?>" method="POST" enctype="multipart/form-data">
<input type="hidden" name ="id" value ="<?php echo $post[0]->post; ?>">
<div class="form-group">
<h3 class="align-left c-blue">Chapitre
<?php if (!empty($erreur_name)): ?>
<span class="asterisk error"><?php echo $erreur_name; ?>
<?php endif ?>
</span></h3>
<?php foreach ($post as $chapitre): ?>
<input class="form-control f-18" id="name" name="name" value ="<?php echo $chapitre->name ;?>">
</p></br>
<?php endforeach ?>
</div>
<div class="text-center">
<button value="Envoyer" id="submit" name="submit" type="submit" class="btn btn-success m-t-10"><i class="fa fa-check"></i>Envoyer</button>
</div>
</form>
Mais le souci c'est que ma base de donnée ne se met pas à jour.
Comment faire, merci de m'aider.
Lors de ton update, il me semble que
$nb= $DB->insert("UPDATE sommaire_dao_cao SET name=:name WHERE id=:id",$data);
peut être remplacé par :
$sth = $DB->prepare('UPDATE sommaire_dao_cao SET name=:name WHERE id=:id');
$sth->execute(array(':name' => $_POST'name'], ':id' => $id));
Car je doute qu'une fonction intitulée insert() fonctionne pour un UPDATE. Après je peux me tromper :)
En faite je voudrais savoir comment peut-on faire pour n'afficher que les lignes qui ont le même "post_id".
Je vous montre mon tableau de la base de donnée:
id:1-->post_id:1-->name:test1
id:2-->post_id:1-->name:test2
id:3-->post_id:2-->name:test3
id:4-->post_id:2-->name:test4
id:5-->post_id:2-->name:test5
Voici mon code :
<?php include("INC/includes.php");
if($_SERVER'REQUEST_METHOD'] == "POST"){
$id =intval($_POST'id']);
$validate = true;
$data= array(
'id' => $id,
'name'=>$_POST'name']
);
if($validate){
$nb= $DB->insert("UPDATE sommaire_dao_cao SET name=:name WHERE id=:post_id",$data);
if($nb){
$_SESSION'message'] = "l'article a été mis a jour avec succès.";
header('location:dao-cao.php');
exit();
}else{
$_SESSION'erreur'] = "Un problème de sauvegarde !";
}
}
}
if(isset($_GET'id'])){
$post = $DB->query("SELECT * FROM sommaire_dao_cao WHERE post_id=:id",array('id'=>$_GET'id']));
}
?>
<form action="chapitre.php?id=<?php echo $post[0]->post_id; ?>" method="POST" enctype="multipart/form-data">
<input type="hidden" name ="id" value ="<?php echo $post[0]->post_id; ?>">
<div class="form-group">
<h3 class="align-left c-blue">Chapitre
<?php if (!empty($erreur_name)): ?>
<span class="asterisk error"><?php echo $erreur_name; ?>
<?php endif ?>
</span></h3>
<input class="form-control f-18" id="title" name="name" value ="<?php echo $post[0]->name ;?>">
</p></br>
</div>
<div class="text-center">
<button value="Envoyer" id="submit" name="submit" type="submit" class="btn btn-success m-t-10"><i class="fa fa-check"></i>Envoyer</button>
</div>
</form>
Le probléme, c'est qu'il ne m'affiche que la première ligne, c'est à dire "test1", or je voudrais qu'il m'affiche "test1 et test2"
$post[0] n'affichera toujours que la première ligne des résultats, il faut itérer avec un foreach sur tes résultats.
$posts = $DB->query("SELECT * FROM sommaire_dao_cao WHERE post_id=:id", array('id' => $_GET'id']));
<?php foreach($posts as $i => $post): ?>
Résultat <?php echo $i ?> : <input class="form-control f-18" id="title" name="name" value ="<?php echo $post->name ;?>">
<?php endforeach ?>
Merci à toi kujira, ta réponse à résolu mon probléme en utilsant un foreach. Le résultat s'affiche correctement. Par contre il me reste un dernier souci, c'est que la mise à jour ne se fait pas dans la base de donnée. Why ???
Comme t'as dit maximeshr, si tu utilises PDO pour accéder à la base de donnée, pour éxécuter une requête utilise les fonctions PDO::prepare() PDOStatement::execute()
Tu as des exemples ici http://fr2.php.net/manual/en/pdostatement.execute.php