SQL: INSERT INTO avec un $_GET
Résolu/Fermé
A voir également:
- SQL: INSERT INTO avec un $_GET
- Logiciel sql - Télécharger - Bases de données
- Sql replace plusieurs valeurs - Forum Programmation
- Requete sql pix - Forum PHP
- Ora-00933: la commande sql ne se termine pas correctement ✓ - Forum Oracle
- Requête sql date supérieure à ✓ - Forum Programmation
9 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
4 nov. 2011 à 16:18
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
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
}
?>
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
}
?>
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
4 nov. 2011 à 17:33
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
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!
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!
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
4 nov. 2011 à 17:59
Je suis pas sur de comprendre ta demande:
tu veus passer id_billet d'une table a l'autre ?
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...
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...
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...
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
4 nov. 2011 à 22:31
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 :
Ensuite, tu modifies ta requête d'insertion :
Xavier
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