Poster des données en ajax vers php

Résolu
aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   -  
aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   -
bonjour les amis, j'ai vu un tuto et repeté le tuto dans mon projet mais ça ne fonction pas pour moi. je voudrais vous montrer pour que vous me dites s'il y a une erreur quelque part dans le code. en fait, c'est un tchat.

voici le code ajax:

var url = 'pages/fonction-chat.php';
var act = 'ajoutmsg';
$(document).ready(function(){ 
$('.tchat').submit(function(){
       
     var pseudo = $('.form-control').val(); // on sécurise les données
     var message = $('.msg_input').val();

    if(pseudo != "" && message != ""){ // on vérifie que les variables ne sont pas vides
       $.post(url,{action:act,pseudo:pseudo,message:message},function(data){
   if(data.erreur == 'ok'){
    alert('ok');
   }else{
    alert(data.erreur); 
   }

  },'json');
    }
 return false;
 });
 });


la partie php donc traitement:

<?php
require_once 'pages/connect.php';

$d = array();

 $psd = $_POST['pseudo'];
    $msg = $_POST['message']; // on sécurise nos données
 $_SESSION['pseudo'] = $_POST['pseudo'];
 
 if($_POST['action'] == "ajoutmsg"){
   $msg = htmlentities($message);
   $req = $pdo->prepare("INSERT INTO message (pseudo, message, date) VALUES ( :psd, :msg, NOW())");
   $req->execute(array(':psd'=>$psd, ':msg'=>$msg));
   $d['erreur'] = 'ok';
 }
echo json_encode($d);
?>


et mon formulaire de tchat:
<form method="post" class="tchat">
 <?php if(!empty($_SESSION['pseudo'])): ?>
  <div class="chat_body">
    <?php
    $req =$pdo->prepare("SELECT message, date FROM message WHERE pseudo =:psd ORDER BY Date ASC");
    $req->execute(array(':psd'=>$_SESSION['pseudo']));
    $result=$req->fetchAll();   
    ?>
   <div class="chat_body">
   <?php foreach ($result as $res):?>
    <div class="msg2">
     <?= $res->message; ?>
    </div>
   <?php endforeach; ?>
   </div>
  </div>
 <?php else: ?>
 <div class="form-group">
  <input class="form-control" placeholder="pseudo" type="text" name="pseudo">
 </div>
 <div class="chat_body" style="height:200px;">
  <div class="msg_insert">
  </div>
 </div>
 <?php endif;  ?>
 <div class="chat_foot">
  <textarea class="msg_input" placeholder="Message" rows="3" name="message"></textarea>
  <button type="submit" class="btn btn-primary form-control"><span class="glyphicon glyphicon-send"></span></button>
 </div>
</form>


le code ajax reçoit bien les données mais ne les poste pas. j'aimerais savoir pourquoi.
merci d'avance
A voir également:

4 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Pour commencer :
- Active la gestion des erreurs PDO dans la connexion à ta bdd et place CHAQUE requête dans des blocs try/catch (comme expliqué ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs )

Puis, applique ceci (concernant la structure / l'écriture de ton code ) https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code


Et enfin :
- Remplace ton bouton SUBMIT par un bouton : BUTTON et donne lui un id.
 <button type="button" id="envoyer" class="btn btn-primary form-control"><span class="glyphicon glyphicon-send"></span></button>

- Modifie ton code JS :
$('.tchat').submit(function(){

par
$('#envoyer').click(function(){



NB: Regarde également dans la console de ton navigateur les retours ajax. Si tu es sur chrome, tu peux installer un petit plugin pour ça (cherche ajax tu le trouveras ). Si tu es sur firefox, penses à activer le hxr dans la console.

0
aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
merci jordane pour ta reponse. j'ai fait les modificatios que tu m'a conseillé.
mais dans ma console, je reçois ce messae quans je poste mes données

<br />↵<font size='1'><table class='xdebug-error xe-warning' dir='ltr' border='1' cellspacing='0' cellpadding='1'>↵<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Warning: require_once(pages/menu.php): failed to open stream: No such file or directory in C:\wamp\www\bootstrap\pages\fonction-chat.php on line <i>2</i></th></tr>↵<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>↵<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>↵<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0320</td><td bgcolor='#eeeeec' align='right'>138456</td><td bgcolor='#eeeeec'>{main}( )</td><td title='C:\wamp\www\bootstrap\pages\fonction-chat.php' bgcolor='#eeeeec'>..\fonction-chat.php<b>:</b>0</td></tr>↵</table></font>↵<br />↵<font size='1'><table class='xdebug-error xe-fatal-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>↵<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Fatal error: require_once(): Failed opening required 'pages/menu.php' (include_path='.;C:\php\pear') in C:\wamp\www\bootstrap\pages\fonction-chat.php on line <i>2</i></th></tr>↵<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>↵<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>↵<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0320</td><td bgcolor='#eeeeec' align='right'>138456</td><td bgcolor='#eeeeec'>{main}( )</td><td title='C:\wamp\www\bootstrap\pages\fonction-chat.php' bgcolor='#eeeeec'>..\fonction-chat.php<b>:</b>0</td></tr>↵</table></font>↵"

je ne sais pas trop ce que ça veut dire, mais j'ai pu decoder certaine ligne comme le fait que mon fichier connect.php ne contient pas les données nécessaire à la connexion a la bd
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Quel est le code exact du fichier pages\fonction-chat.php

Et celui du connect.php
0
aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
voici celui de connect.php

<?php

try{

$pdo= new PDO('mysql:dbname=gzconseils; host=localhost', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

}catch(PDOException $e){

die('Erreur : ' .$e -> getMessage());
}


et celui de fonction-chat.php

<?php
require_once 'pages/menu.php';
require_once 'pages/connect.php';

error_reporting(E_ALL);
$d = "";
try{
$psd = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
$msg = !empty($_POST['message']) ? $_POST['message'] : NULL;
$act = !empty($_POST['action']) ? $_POST['action'] : NULL;

$_SESSION['pseudo'] = $msg;
if($act == "ajoutmsg"){
$req = $pdo->prepare("INSERT INTO message (pseudo, message, date) VALUES ( :psd, :msg, NOW())");
$req->execute(array(':psd'=>$psd, ':msg'=>$msg));
}
}catch(PDOException $e){
echo " Erreur ! ".$e->getMessage();
}

json_encode($d);
?>
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
A quoi te sert le require de pages/menu.php pour un script ajax ??
0
aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
je crois bien que c'est le reflexe. c'est là le bug??
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Ca en fait parti en tout cas...
Regarde le message d'erreur
0
aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
je l'ai enlevé, et maintenant c'est avec le connect.php qu'il a un problème
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
Il ne le trouve pas.
Es tu sûr du chemin ?
Il se trouve où par rapport a la racine du serveur ?
0
aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
il se trouve dans un dossier interne au dossier de mon projet. d'où le

<?php
require_once 'pages/connect.php';
?>
0
aldofkr Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai trouvé le souci
il n'accepte seulement pas que la connexion vienne d'autre part donc j'ai fait comme ceci

<?php
$pdo= new PDO('mysql:dbname=gzconseils; host=localhost', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$d = "";
try{
$psd = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
$msg = !empty($_POST['message']) ? $_POST['message'] : NULL;
$act = !empty($_POST['action']) ? $_POST['action'] : NULL;

$_SESSION['pseudo'] = $psd;
if($act == "ajoutmsg"){
$req = $pdo->prepare("INSERT INTO message (pseudo, message, date) VALUES ( :psd, :msg, NOW())");
$req->execute(array(':psd'=>$psd, ':msg'=>$msg));
}
}catch(PDOException $e){
echo " Erreur ! ".$e->getMessage();
}

json_encode($d);
?>

et ça marche à merveille.
merci jordane pour ta disponibilité
0