SQL: INSERT INTO avec un $_GET [Résolu/Fermé]

Signaler
-
 Martin -
Bonjour,

Problème tout simple mais j'apprends actuellement le PHP MySQL:

Je suis entrain de peaufiner un blog (exercice) , je souhaite envoyer des commentaires dans ma bases de données afin de pouvoir les afficher à la suite d'un billet. 'auteur' et 'commentaire' j'y arrive, il parviennent bien jusqu'à ma base de donnée mais quand je souhaite récupérer "id_billet" avec le fonction $_GET je n'y arrive pas :( (syntaxe mauvaise) si quelqu'un pourrait m'aider SVP

// Insertion du message à l'aide d'une requête préparée
$req = $bdd -> prepare ('INSERT INTO commentaires (auteur, commentaire) VALUES (?, ?) WHERE id_billet = '$_GET['billet']'') or die (print_r ($bdd->errorInfo ()));
$req -> execute (array($_POST['auteur'], $_POST['commentaire'],$_GET['billet'])) or die (print_r ($bdd->errorInfo ()));

// Redirection du visiteur vers la page du blog
header('Location: commentairesblog.php');

Merci à vous

9 réponses

Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
987
Bonjour,

Oulà... Ta requête ne va pas, on ne met pas de WHERE avec un INSERT.
De plus tes guillemets sont mal placés.

Tu essaies de faire quoi exactement ? Récupérer dans une variable l'id du billet qui vient d'être inséré ?

Xavier
Looool je savais que j'allais passer pour un débile ^^

Bonjoru Xavier


En fait j'ai une page avec le billet et les commentaires sur ce billet:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Mon blog</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<h1>Mon super blog !</h1>
<p><a href="indexblog.php">Retour à la liste des billets</a></p>

<?php
// Connexion à la base de données
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', 'root', $pdo_options);

// Récupération du billet
$req = $bdd->prepare('SELECT id, titre, contenu, DATE_FORMAT(date_creation, \'%d/%m/%Y à %H:%i\') AS date_creation_fr FROM billets WHERE id = ?');
$req->execute(array($_GET['billet']));
$donnees = $req->fetch();
?>

<div class="news">
<h3>
<?php echo htmlspecialchars($donnees['titre']); ?>
<em>le <?php echo $donnees['date_creation_fr']; ?></em>
</h3>

<p>
<?php
echo nl2br(htmlspecialchars($donnees['contenu']));
?>
</p>
</div>

<h2>Commentaires</h2>

<?php
$req->closeCursor(); // Important : on libère le curseur pour la prochaine requête

// Récupération des commentaires
$req = $bdd->prepare('SELECT auteur, commentaire, DATE_FORMAT(date_commentaire, \'%d/%m/%Y à %H:%i\') AS date_commentaire_fr FROM commentaires WHERE id_billet = ? ORDER BY date_commentaire');
$req->execute(array($_GET['billet']));

while ($donnees = $req->fetch())
{
?>
<p><strong><?php echo htmlspecialchars($donnees['auteur']); ?></strong> le <?php echo $donnees['date_commentaire_fr']; ?></p>
<p><?php echo nl2br(htmlspecialchars($donnees['commentaire'])); ?></p>
<?php
} // Fin de la boucle des commentaires

$req->closeCursor();

}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
<form action = "commentairesblogpost.php" method = "post">
<p> <label for = "auteur"> Pseudo </label>: <input type = "text" name = "auteur" id = "auteur"/></p>
<p> <label for = "commentaire"> Message </label> : <input type = "text" name = "commentaire" id = "commentaire" ></p>
<input type="submit" name="button" value="Envoyer" />

</body>
</html>



Et ensuite, j'ai ma page qui me permet d'ajouter le nouveau commentaire (mes scripts sont loin d'être parfait mais je débute):

<?php

if (!empty($_POST['auteur']) && !empty($_POST['commentaire']) AND isset ($_POST ['auteur']) && isset ($_POST ['commentaire']))
{
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', 'root', $pdo_options);


// Insertion du message à l'aide d'une requête préparée
$req = $bdd -> prepare ('INSERT INTO commentaires (auteur, commentaire) VALUES (?, ?) WHERE id_billet = '$_GET['billet']'') or die (print_r ($bdd->errorInfo ()));
$req -> execute (array($_POST['auteur'], $_POST['commentaire'],$_GET['billet'])) or die (print_r ($bdd->errorInfo ()));

// Redirection du visiteur vers la page du blog
header('Location: commentairesblog.php');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
}
else // Sinon, on affiche un message d'erreur
{
?>
<script type="text/javascript">

alert('Vous avez oublié de remplir un ou plusieurs champs')
history.back();


</script>
<?php
}
?>
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
987
>Looool je savais que j'allais passer pour un débile ^^
Bien loin de moi cette idée.

Mais je ne comprends toujours pas ce que tu veux faire de ce id_billet = '$_GET['billet']'
Pour moi, il suffit d'enlever le WHERE ainsi que le ,$_GET['billet'] de la commande ->execute()

Xavier

PS : désolé pour le délai de réponse, je bosse en fait :p
Re Salut Xavier,

J'ai une base de donnée qui contient deux tables: billets et commentaires.

Dans ma table commentaires j'ai 5 colonnes: id, id_billet, auteur, commentaire, date_commentaire. Je souhaiterai envoyer dans ma base de donnée id_billet dans ma table "commentaires"afin qu'il puisse être enregistré sur la page du billet en question à le suite des autres commentaires. Sans ça, id_billet = 0 dans ma base de donnée et n'arrive donc nul part car aucun billet porte l'id de 0.

Donc je veux récupérer l'id_billet de la page commentairesblog.php et l'envoyer à ma base de donnée depuis commentairesblogpost.php.

Source: http://www.siteduzero.com/tutoriel-3-231261-tp-un-blog-avec-des-commentaires.html

Merci à toi!
Quelqu'un pourrait il JUSTE me donner la bonne syntaxe svp?
Messages postés
110
Date d'inscription
samedi 11 juin 2011
Statut
Membre
Dernière intervention
11 juin 2014
25
Je suis pas sur de comprendre ta demande:
tu veus passer id_billet d'une table a l'autre ?
non, de mon premier fichier php (commentairesblog.php vers commentairesblogpost.php)

J'ai voulu rectifié un petit peu commentairesblogpost.php:

// Insertion du message à l'aide d'une requête préparée
$req = $bdd -> prepare ('INSERT INTO commentaires (auteur, commentaire, id_billet) VALUES (?, ?, ?)') or die (print_r ($bdd->errorInfo ()));

$req -> execute (array($_POST['auteur'], $_POST['commentaire'], $_GET['id_billet'])) or die (print_r ($bdd->errorInfo ()));

// Redirection du visiteur vers la page du blog
header('Location: commentairesblog.php');


Mais je me retrouve avec ce message d'erreur:
Erreur : SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id_billet' cannot be null

Comme si $_GET['id_billet'] n'arrivait pas à trouver l'information de la page précédente commentairesblog.php.

Merci à vous tous de m'aider ^^, c'est tout bête mais je lui suis aussi...
non, de mon premier fichier php (commentairesblog.php vers commentairesblogpost.php)

J'ai voulu rectifié un petit peu commentairesblogpost.php:

// Insertion du message à l'aide d'une requête préparée
$req = $bdd -> prepare ('INSERT INTO commentaires (auteur, commentaire, id_billet) VALUES (?, ?, ?)') or die (print_r ($bdd->errorInfo ()));

$req -> execute (array($_POST['auteur'], $_POST['commentaire'], $_GET['id_billet'])) or die (print_r ($bdd->errorInfo ()));

// Redirection du visiteur vers la page du blog
header('Location: commentairesblog.php');


Mais je me retrouve avec ce message d'erreur:
Erreur : SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id_billet' cannot be null

Comme si $_GET['id_billet'] n'arrivait pas à trouver l'information de la page précédente commentairesblog.php.

Merci à vous tous de m'aider ^^, c'est tout bête mais je lui suis aussi...
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
987
OK j'ai compris.

Alors, dans la page où tu as le formulaire de commentaire, tu rajoutes un <input> hidden :
<p> <label for = "commentaire"> Message </label> : <input type = "text" name = "commentaire" id = "commentaire" ></p>
<input type="hidden" name="billet" value="<?php echo $_GET['billet']; ?>" />
<input type="submit" name="button" value="Envoyer" /> 


Ensuite, tu modifies ta requête d'insertion :
$req = $bdd -> prepare ('INSERT INTO commentaires (auteur, commentaire, id_billet) VALUES (?, ?, ?)') or die (print_r ($bdd->errorInfo ()));

$req -> execute (array($_POST['auteur'], $_POST['commentaire'], $_POST['id_billet'])) or die (print_r ($bdd->errorInfo ())); 



Xavier
Tu es au TOOOOOP Xav!!! il manquait juste ceci:


<input type="hidden" name="billet" id = "id_billet" value="<?php echo $_GET['billet']; ?>" />


Mais maintenant cela fonctionne merci bcp!!!!!


Martin