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.

5 réponses


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 :)

Siphris
Auteur

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

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