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>
<html lang="fr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<title>Les délices de Gui</title>
</head>

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

</html>

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>
<html lang="fr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<title>Les délices de Gui</title>
</head>

<body>

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

</body>

</html>

15 réponses


Guizmo
Auteur
Réponse acceptée

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 !

Carouge10
Réponse acceptée

de rien, passe ton sujet en résolu

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

Guizmo
Auteur

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

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

Guizmo
Auteur

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

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

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 ?

Guizmo
Auteur

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.

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>

Guizmo
Auteur

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

Guizmo
Auteur

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

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"

Guizmo
Auteur

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

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

Guizmo
Auteur

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