Probleme avec PDO et BDD
gintoxic Messages postés 566 Statut Membre -
je suis tout nouveau avec PDO et php (que j'essaie de comprendre depuis des années et alors que je souhaite entreprendre un apprentissage forcé, je tombe nez à nez avec un petit probleme sûrement de synthaxe d'ailleurs.
j'ai recherché partout des sujets[résolus], des tutos et des cours (le SDZ entre autre) sans arriver à trouver une solution.
où j'en suis ?
j'ai un formulaire basique et court (nom et commentaire) et je souhaite en premier lieu entrer dans ma base de donnée le pseudo et le message pour ensuite le ressortir via php
la connexion a l'air de se faire (pas de message d'erreur) mon script "formulaire" passe correctement, mais rien ne rentre dans la BDD
pourriez-vous m'aider svp que je comprenne et realise d'autre exercices de mon coté ?
merci à vous
le code de la page php :
<body>
<p>Commentaire</p>
<p>
<form method="post">
Login : <input type="text" name="pseudo" /><br />
commentaire : <br />
<input type="textarea" name="message" rows="10"><br />
<input type="submit" value="Valider" /><br />
</form>
</p>
<?php
$loggin = htmlspecialchars($_POST['pseudo']).' a écrit :<br />';
$mess = htmlspecialchars($_POST['message']);
if(empty($_POST['pseudo']) AND empty($_POST['message'])){
echo 'entrez un pseudo ou un commentaire';
}
elseif(empty($_POST['pseudo']) OR empty($_POST['message'])){
echo 'entrez un pseudo ou un commentaire';
}
else{
$hote='localhost';
$BD='ma_base';
$user='ich_me';
$pass='password';
try
{
$connexion = new PDO('mysql:host='.$hote.';dbname='.$BD, $user, $pass);
}
catch(Exception $e)
{
echo 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode();
}
$insertion_table = $connexion->prepare('INSERT INTO commentaires (pseudo, message) VALUES (:pseudo, :message)')
or exit(print_r($insertion_table->errorInfo()));
$insertion_table->exec(array('pseudo'=>$pseudo, 'message'=>$message));
echo $loggin;
echo $mess;
}
?>
</body>
l'url pour tester : http://symposion.fr
--
Si Dieu a créé l'homme, qui a créé Dieu, l'homme non ?
- Probleme avec PDO et BDD
- Bdd supervision - Forum Réseau
- BDD joomla ✓ - Forum Bases de données
- PDO problème d'execution requête ✓ - Forum PHP
- Problème ave PDO (PASSWORD()) ✓ - Forum PHP
- Import BDD Impossible - Forum MySQL
2 réponses
Le problème concerne l’insertion dans la base via PDO malgré une connexion réussie et l’absence de message d’erreur lors de l’envoi du formulaire. Les éléments de réponse essentiels indiquent que les variables associées au nom et au commentaire ne sont pas définies à partir des données POST, et que le formulaire HTML comporte des erreurs. En pratique, il faut récupérer les valeurs avec $nom = $_POST['nom']; $commentaire = $_POST['commentaire']; et corriger le champ texte vers une balise textarea, puis utiliser une exécution liée plutôt que exec. Des réponses ultérieures évoquent aussi de sécuriser l’insertion avec des paramètres liés et d’éviter les rechargements répétitifs; en pratique, cela conduit à une écriture fonctionnelle dans la table.
j'ai tenté une mise en page mais je ne connais pas suffisamment PDO pour realiser une zone de commentaire comme on en voit partout (d meme style qu'ici en fait
quelqu'un pourrait me guider svp ?
Imaginons :
$co = new PDO(); // on instancie (c'est un exemple)
$req = $co->query('SELECT * FROM messages');
while($datas = $req->fetch())
{
echo $datas['message'].' '.$datas['pseudo'];
}
$req->closeCursor();
Après, il faut juste ajouter des attributs html / css avant chaque sorties de texte :)
par exemple :
echo '<div class="message">$datas['message'].'</div> <div class="pseudo">'.$datas['pseudo'].'</div>';
voici le code
<meta charset="UTF-8">
<title>test pass</title>
<style>
#bloc_message{
min-width:300px;
min-height:200px;
border:1px solid #000;
/*overflow: auto;*/
}
</style>
</head>
<body>
<?php
$loggin = htmlspecialchars($_POST['pseudo']).' a écrit :<br />';
$mess = htmlspecialchars($_POST['message']);
if(empty($_POST['pseudo']) AND empty($_POST['message'])){
echo 'entrez un pseudo ou un commentaire';
}
elseif(empty($_POST['pseudo']) OR empty($_POST['message'])){
echo 'entrez un pseudo ou un commentaire';
}
else{
$hote='localhost';
$BD='ma_base';
$user='ich_me';
$pass='password';
try
{
$connexion = new PDO('mysql:host='.$hote.';dbname='.$BD, $user, $pass);
}
catch(Exception $e)
{
echo 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode();
}
$insertion_table = $connexion->prepare('INSERT INTO commentaires(pseudo, message) VALUES(:pseudo, :message)')
or exit(print_r($insertion_table->errorInfo()));
$insertion_table->execute(array('pseudo'=>$loggin, 'message'=>$mess));
$result= $connexion-> query('SELECT * FROM commentaires');
$donnees=$result->fetch();
while ($donnees = $result->fetch()){
echo $donnees['message'].' '.$donnees['pseudo'];
}
$req->closeCursor();
}
?>
<p>Commentaire</p>
<p>
<form method="post">
Login : <input type="text" name="pseudo" /><br />
commentaire : <br />
<input type="textarea" name="message" rows="10" cols="30"><br />
<input type="submit" value="Valider" /><br />
</form>
</p>
<?php
echo '</div> <div class="pseudo">'.$donnees['pseudo'].'</div>'.'<div id="bloc_message">'.$donnees['message'];
?>
</body>
</html>
mais en effet pas dans
$insertion_table->exec(array('pseudo'=>$pseudo, 'message'=>$message));les variables sont vides donc j'ai remplacé par mes variables de base $loggin et $mess et ça écrit dans ma table ;o)
donc merci beaucoup ^^^
me reste à mettre l'utf-8 et à ressortir ça pour l'affichage