Problème poster un commentaire

Résolu/Fermé
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - 20 mai 2015 à 18:10
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - 18 juin 2015 à 21:06
Bonjour,
je n'arrive pas a poster de commentaire via mon formulaire sur mon serveur MySQL.

Je vais vous expliquer comment est constituer la base de donnée:

nom de la db: 'test'

composé de 'coms':

_ 'post_id' et de 'post' ( la ou son stocker les commentaires )




addcom.php

<?php

try {
$db = new PDO('mysql:host=192.168.1.22;dbname=test', 'LOGIN', 'PASSWORD', array(1002 => 'SET NAMES utf8'));
$db->exec("SET CHARACTER SET utf8");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e) {
echo 'Erreur : '.$e->getMessage();
echo 'N° : '.$e->getCode();
}

$db->exec("INSERT INTO coms(post) VALUES ('".$_POST['commentaire']."')");

?>



formulaire.php

<?php include("addcom.php"); ?>

<p>Votre commentaire:</p>
<form action="formulaire.php" method="post" onsubmit="self.close()">
<input="text" name="post"/>
<textarea name="commentaire" style="width:500px;height:200px;"></textarea><br/>
<input type="submit" value="Envoyer"/>
</form>


Aider moi, je sais pas comment faire car mon commentaire au niveau du serveur j'ai un commentaire vide quoi que je marque.
A voir également:

3 réponses

jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 680
Modifié par jordane45 le 27/05/2015 à 23:24
Bonjour,

Si tu veux envoyer les données de ton formulaire dans la même page... pas besoin de faire ce que tu as fais :
<form action="formulaire.php" method="post" onsubmit="self.close()">

... il suffit de laisser l'attribut ACTION .. à vide.
Comme ceci :
<form action="" method="post" >


Ensuite...
Place le code de connexion à ta BDD dans un fichier à part ( et UNIQUEMENT CA...)
<?php
//--------------------------------------------//
// Fichier de connexion à la BDD
//  connexionBDD.php
//--------------------------------------------//
try {
    $db = new PDO('mysql:host=192.168.1.22;dbname=test', 'LOGIN', 'PASSWORD', array(1002 => 'SET NAMES utf8'));
    $db->exec("SET CHARACTER SET utf8");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e) {
    echo 'Erreur : '.$e->getMessage();
    echo 'N° : '.$e->getCode();
}
?>


Ne pas oublier des attributs pour les champs HTML ... comme le "type" de ton input "post" !

Vérifier, avec ISSET que les variables existent AVANT de les utiliser !

Utilisation des requête préparées pour éviter les problèmes d'injection sql, les soucis de quotes/ doubles quotes dans la requête......

Enfin... donc dans ta page formulaire.php :

<?php
//--------------------------------------------------//
// fichier : formulaire.php 
//--------------------------------------------------//
// connexion à la BDD:
require_once "connexionBDD.php";

// Le temps des tests.. pour voir ce qui est reçu dans la variable
// $_POST :
echo "<pre> <b>==> POST :</b><br>";
print_r($_POST);
echo "</pre>";

//------------------------------------
//traitement du submit :
//------------------------------------

//récupération des variables :
$post = isset($_POST['post']) ? $_POST['post'] : NULL;
$commentaire= isset($_POST['commentaire']) ? $_POST['commentaire'] : NULL;

try{
 $sql = "INSERT INTO coms(post) VALUES (:commentaire)";
 $params = array(":commentaire"=>$commentaire);
 $prepare = $db->prepare($sql);
 $prepare->execute($params);

}catch(PDOException $e) {
    echo 'Erreur : '.$e->getMessage();
    echo 'N° : '.$e->getCode();
}

?>
<!-- formulaire html -->
<form action="" method="post">
<p>Votre commentaire:</p>
<input type="text" name="post" value="<?php echo $post ;?>">
<textarea name="commentaire" style="width:500px;height:200px;"><?php echo $commentaire ;?></textarea><br/>
<input type="submit" value="Envoyer">
</form>




Cordialement,
Jordane
2
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
Modifié par flo39400 le 28/05/2015 à 02:07
Trop bien ça marche ce que vous m'avez mis, un grand merci a vous j'aimerai juste une dernière chose si cela est possible.

Car la il me met deux champs de textes a remplir alors que il devrai en avoir que 1 seul non ?

Mais ce que j'aimerai sais que le membre connecter qui écris le commentaire sois enregistré comme tel que son pseudo apparaisse comme les autres que j'ai entré manuellement mais sais dans une autre table les membres ( "membre" ).
Avec l'id, le pseudo ( "login" ) , le mot de passe ( " pass_md5 ") et l'e-mail ( " email " ).
Je vous met un lien afin que vous constaté par vous même:
http://www.dieutopgun.synology.me/test/index.php

pseudo: admin mp: admin ( sais informations seront supprimé sous peu de temps )
0
jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 680 > flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021
28 mai 2015 à 09:45
Car la il me met deux champs de textes a remplir alors que il devrai en avoir que 1 seul non ?

J'ai repris le code que tu nous avais montré ....
Il y a un INPUT ... ET un TEXTAREA .. donc DEUX champs !
Si tu n'en veut qu'un .. il te faut en retirer un !


Mais ce que j'aimerai sais que le membre connecter qui écris le commentaire sois enregistré comme tel que son pseudo apparaisse comme les autres que j'ai entré manuellement mais sais dans une autre table les membres ( "membre" ).

Je n'ai rien compris .....
Pourrais-tu être un peu plus clair et précis ?

PS : on écrit " c'est" ... et non "sais" !

PS2 : Le proxy de ma boite m'empêche d'accéder à ton site.. je ne peux pas aller regarder.

PS3 : Il s'agit là d'une nouvelle question ... il serait donc souhaitable que tu place celle-ci en RESOLU .. et que tu en ouvres une autre. Cela facilite les recherches sur le site.....
Merci.
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
Modifié par flo39400 le 28/05/2015 à 22:17
Oui je vais le mettre résolu, mais j'ai un message d'erreur type:

Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'post' cannot be null in /volume1/web/test/postcom2.php on line 25
0
jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 680
28 mai 2015 à 22:19
Elle ne peut pas être NULL .. dans ce cas mettons là à vide ...
$commentaire= isset($_POST['commentaire']) ? $_POST['commentaire'] : '';
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21 > jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024
29 mai 2015 à 00:59
Super il n'y a pu d'erreur, dite voir quand je clique sur envoyer il serai possible de changer de page après l'envoie au serveur ? Car avec action sais pas possible vu que cela ferme la fenêtre directement. Vous auriez une idée ?
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
20 mai 2015 à 18:24
Bonjour,

vous devriez faire le
<?php include("addcom.php"); ?>

dans le fichier formulaire.php car c'est lui qui est appelé par le bouton subit et qui reçoit les données
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
27 mai 2015 à 22:32
Bonjour je comprend pas trop ce que vous voulez dire...
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
18 juin 2015 à 20:17
Bonjour, le problème sais la page pour poster le commentaire dès qu'elle est ouverte ça poste même quand il y a rien
0
jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 680
18 juin 2015 à 20:31
Tu peux ajouter un IF
//------------------------------------

//récupération des variables :
$post = isset($_POST['post']) ? $_POST['post'] : NULL;
$commentaire= isset($_POST['commentaire']) ? $_POST['commentaire'] : NULL;
if($post && $commentaire){
 try{
  $sql = "INSERT INTO coms(post) VALUES (:commentaire)";
  $params = array(":commentaire"=>$commentaire);
  $prepare = $db->prepare($sql);
  $prepare->execute($params);

 }catch(PDOException $e) {
     echo 'Erreur : '.$e->getMessage();
     echo 'N° : '.$e->getCode();
 }
}
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
18 juin 2015 à 21:06
merci beaucoup résolut
0