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 -
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:
la partie php donc traitement:
et mon formulaire de tchat:
le code ajax reçoit bien les données mais ne les poste pas. j'aimerais savoir pourquoi.
merci d'avance
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:
- Poster des données en ajax vers php
- Fuite données maif - Guide
- Trier des données excel - Guide
- Sauvegarde des données - Guide
- Supprimer les données de navigation - Guide
- Windows 7 vers windows 10 - Accueil - Mise à jour
4 réponses
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.
- Modifie ton code JS :
par
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.
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.
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
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
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);
?>
<?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);
?>
je crois bien que c'est le reflexe. c'est là le bug??
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é
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é