Problème pour modifier un commentaire PHP/Mysql

Ce sujet est résolu
Default
,

Bonjour,

Voila je rencontre un petit problème avec mon code PHP car j'essaie de faire en sorte que l'on puisse modifier un commentaire,
seulement quand je clique sur modifier cela me renvoie sur la page modification.php mais j'ai une page vide sans le formulaire de commentaires.
Je met à disposition le code de mes différentes pages qui se lient entre elles, merci de votre aide :)

*Voici le formulaire de contact avec la session active : *

                if(!empty($_SESSION['id'])){
                    ?>
                    <form method= "POST">
                        <div id="pseudo"><?php echo '<b>Pseudo : </b>' . $_SESSION['pseudo'] ?></div>
                        <textarea name="commentaire" id="commentaire" placeholder=" Taper votre commentaire..." cols="50" rows="5"></textarea><br />
                        <a href="#scroll"><input type="submit" id="poster" value="Poster" name="submit_commentaire" /></a>
                    </form>

                    <?php
                   }    

Ma page : modifications.php >>>

<?php
try
{
$bdd = new PDO('mysql:host=localhost; port=3308;dbname=espace_membre;charset=utf8', '', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

//Préparation de la requête
$modifier = $bdd->prepare('SELECT * FROM commentaires WHERE id=:commentaire');

//Lliaison de paramètre nommé
$modifier->bindValue(':commentaire', $_GET['commentaireUtilisateur'], PDO::PARAM_INT);

//exécution de la requête
$executeOk = $modifier->execute();

$utilisateur = $modifier->fetch();

?>

<!DOCTYPE html>






Les délices de Gui
<body>

    <h2 class="h-2">Modifier le commentaire</h2></div>

   <?php if(!empty($_SESSION['id'])){
        ?>
            <form action ="modifier.php" method= "POST">
                <div id="pseudo"><?php echo '<b>Pseudo : </b>' . $_SESSION['pseudo'] ?></div>
                <textarea name="commentaire" id="commentaire" placeholder=" Taper votre commentaire..." cols="50" rows="5" 
                value="<?= $utilisateur['commentaire']; ?>"></textarea><br />
                <input type="submit" id="poster" value="Poster" name="submit_commentaire" />
            </form>

            <?php
        } ?>
</body>

Ma page modifier.php

<?php
try
{
$bdd = new PDO('mysql:host=localhost; port=3308;dbname=espace_membre;charset=utf8', '', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

//Préparation de la requête
$modifier = $bdd->prepare('UPDATE commentaires set id=:commentaire WHERE id=:commentaire LIMIT 1');

//Lliaison de paramètre nommé
$modifier->bindValue(':commentaire', $_GET['commentaireUtilisateur'], PDO::PARAM_INT);

//exécution de la requête
$executeOk = $modifier->execute();

if($executeOk) {
$message = "Le contact a été modifié";

} else {
$message = "Le contact n'a pas été modifié";
}
?>

<!DOCTYPE html>






Les délices de Gui
<body>

    <h2 class="h-2">Résultat de la modification</h2></div>
    <p><?= $message ?></p>

</body>

15 Réponse

Default
,

Mais oui biensur, le session_start(); enfaite tu finis tellement par être a fond sur comment faire ta structure que tu oublis l'essentiel et c'est logique qu'il fallait y penser !! Merci franchement sa m'a bien débloqué pour ça et ça fait plaisir !

40917
,

de rien, passe ton sujet en résolu

40917
,

Bonsoir,
Le textarea n'a pas de value. Le commentaire se met entre les balises de textarea
Ta page modifier.php est fausse puisque ton form est en POST

Default
,

Bonsoir,
d'accord j'ai rajouté value="commentaire" dans le textarea et la page modifier.php n'est pas bonne du tout ?

40917
,

"j'ai rajouté...." .... euh non justement
tu confonds $_POST et $_GET
$_POST rependra le "name" du textarea

Default
,

Ok pourtant dans ma page modifications.php j'ai bien mis value="<?= $utilisateur['commentaire']; ?>">
Et dans modifier.php je viens de mettre $_POST

$modifier->bindValue(':commentaire', $_POST['commentaireUtilisateur'], PDO::PARAM_INT);

40917
,

revois comment on transmets les données d'un textarea.... et les valeurs autorisés : https://www.w3schools.com/tags/tag_textarea.asp
Je répète : $_POST rependra le "name" du textarea
-> ou vois-tu name="commentaireUtilisateur" dans ton textarea ?
et depuis quand un commentaire est un INT ?

Default
,

Je suis débutant. Je ne comprends pas ce que tu essaies de m'expliquer. Je sais quand il faut utiliser le $_POST ou le $_GET et concernant le INT cela m'a été expliqué dans un cours vidéo.

40917
,

alors tu sais ajouter un commentaire (cf ton autre poste) donc modifier c'est exactement la même chose sauf que tu recupères le commentaire depuis la BDD pour le mettre en la balise < textarea > et </ textarea>

Default
,

Okay bon je vais revoir ça demain matin à tête reposé, bonne soirée

Default
,

Salut Carouge10,
Ben écoute j'ai beau chercher à améliorer ma structure de code je bloque toujours sur le faîte de modifier un commentaire pourtant il ne doit pas manquer grand chose ...

40917
,

Salut

On supprime le value du textarea et on met le commentaire à modiifer entre les balises du textarea

<form action ="modifier.php?id=<?= $_GET['commentaireUtilisateur']; ?>" method= "POST">
                <div id="pseudo"><?php echo '<b>Pseudo : </b>' . $_SESSION['pseudo'] ?></div>
                <textarea name="commentaire" id="commentaire" placeholder=" Taper votre commentaire..." cols="50" rows="5"><?= $utilisateur['commentaire']; ?></textarea><br />
                <input type="submit" id="poster" value="Poster" name="submit_commentaire" />
            </form>

Dans modifier.php
On récupère le commentaire modifier en POST grace au " name="commentaire" " => $_POST['commentaire']
On récupère l'id en GET car il est dans l'url (on peut le faire en POST si on ajoute un champ de type hidden dans le formulaire)

<?php
try
{
    $bdd = new PDO('mysql:host=localhost; port=3308;dbname=espace_membre;charset=utf8', '', '');
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

//Préparation de la requête
$modifier = $bdd->prepare('UPDATE commentaires SET commentaire = :commentaire WHERE id = :id');

//Liaison de paramètre nommé
$modifier->bindValue(':commentaire', $_POST['commentaire'], PDO::PARAM_STR);
$modifier->bindValue(':id', $_GET['id'], PDO::PARAM_INT);

//exécution de la requête
$executeOk = $modifier->execute();

if($executeOk) {
$message = "Le contact a été modifié";

} else {
$message = "Le contact n'a pas été modifié";
}
?>

<!DOCTYPE html>

Par contre : $_GET['commentaireUtilisateur'] n'est pas claire car dedans tu as un id... mais il porte le nom de "commentaireUtilisateur"

Default
,

Ahhh d'accord il fallait placer le <?= $_GET['commentaireUtilisateur']; ?> dans form action !! C'était vraiment tout bête quoi xD

Par contre si je laisse la SESSION['id'] j'ai toujours la page blanche tandis qu'en enlevant uniquement la structure de SESSION[id] j'ai le formulaire qui s'affiche et j'ai la possibilité de modifier mais un message d'erreur Notice: Undefined variable: _SESSION in C:\wamp64\www\projet_5\modifications.php on line 44

C'est logique seulement pourquoi si j'enlève SESSION['id'] le formulaire n'apparaît plus bizzarre; autrement dit c'est fonctionnelle !

   <?php if($_SESSION['pseudo'])){
        ?>
        <form action ="modifier.php?id=<?= $_GET['commentaireUtilisateur']; ?>" method= "POST">
            <div id="pseudo"><?php echo '<b>Pseudo : </b>' . $_SESSION['pseudo'] ?></div>
            <textarea name="commentaire" id="commentaire" placeholder=" Taper votre commentaire..." cols="50" rows="5"><?= $utilisateur['commentaire']; ?></textarea><br />
            <input type="submit" id="poster" value="Poster" name="submit_commentaire" />
        </form>

            <?php
        } ?>
40917
,

Notice: Undefined variable: _SESSION in C:\wamp64\www\projet_5\modifications.php on line 44
Pas de session_start, pas de session

Default
,

Voilà c'est fait, merci encore pour ta patience !