Poster des données en ajax vers php

Résolu/Fermé
aldofkr Messages postés 35 Date d'inscription mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019 - Modifié le 25 oct. 2017 à 09:46
aldofkr Messages postés 35 Date d'inscription mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019 - 22 nov. 2017 à 20:40
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

4 réponses

jordane45 Messages postés 36372 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2022 4 366
25 oct. 2017 à 09:52
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 mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019
25 oct. 2017 à 21:19
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 36372 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2022 4 366
25 oct. 2017 à 21:26
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 mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019
25 oct. 2017 à 22:04
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 36372 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2022 4 366
25 oct. 2017 à 22:05
A quoi te sert le require de pages/menu.php pour un script ajax ??
0
aldofkr Messages postés 35 Date d'inscription mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019
25 oct. 2017 à 22:24
je crois bien que c'est le reflexe. c'est là le bug??
0
jordane45 Messages postés 36372 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2022 4 366
25 oct. 2017 à 22:33
Ca en fait parti en tout cas...
Regarde le message d'erreur
0
aldofkr Messages postés 35 Date d'inscription mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019 > jordane45 Messages postés 36372 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2022
25 oct. 2017 à 22:40
je l'ai enlevé, et maintenant c'est avec le connect.php qu'il a un problème
0
jordane45 Messages postés 36372 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2022 4 366 > aldofkr Messages postés 35 Date d'inscription mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019
25 oct. 2017 à 23:35
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 mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019 > jordane45 Messages postés 36372 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 octobre 2022
25 oct. 2017 à 23:55
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 mardi 25 février 2014 Statut Membre Dernière intervention 30 juillet 2019
26 oct. 2017 à 01:02
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