SQL: INSERT INTO avec un $_GET

Résolu/Fermé
Martin - 4 nov. 2011 à 15:15
 Martin - 5 nov. 2011 à 01:53
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
A voir également:

9 réponses

please!
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
4 nov. 2011 à 16:18
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
0
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
}
?>
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
4 nov. 2011 à 17:33
>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
0
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!
0
Quelqu'un pourrait il JUSTE me donner la bonne syntaxe svp?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
irreligious Messages postés 110 Date d'inscription samedi 11 juin 2011 Statut Membre Dernière intervention 11 juin 2014 25
4 nov. 2011 à 17:59
Je suis pas sur de comprendre ta demande:
tu veus passer id_billet d'une table a l'autre ?
0
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...
0
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...
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
4 nov. 2011 à 22:31
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
0
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
0