Bonjour à vous, j'ai actuellement un script qui reprend le message posté dans un formulaire.
Le travail de ce script est d'afficher le message une fois posté. Mais celui-ci ne s'affiche pas chez les autres utilisateur et n'inscrit pas les données dans la base de données.
Je ne trouve malheureusement pas l'erreur dans le script.
$('#envoyer').click(function(e)
{
e.preventDefault(); // on empêche le bouton d'envoyer le formulaire
var pseudo = encodeURIComponent( $('#pseudo_expediteur').val() );//pseudo de l'expediteur
var msg = encodeURIComponent( $('#message_expediteur').val() );//message envoyé
var id_salon = encodeURIComponent( $('#id_salon').val() );//id du salon
var id = encodeURIComponent( $('#id_expediteur').val() );//id de l'expediteur
var timer = new Date(); //création variable timer
var annee = timer.getFullYear();
var mois = timer.getMonth()+1;
var jour = timer.getDate();
var hrs = timer.getHours();
var mins = timer.getMinutes();
var secs = timer.getSeconds();
var heure = ((hrs<10)?"0":"")+hrs;
var minute = ((mins<10)?"0":"")+mins;
var seconde = ((secs<10)?"0":"")+secs;
var date = jour+"/"+mois+"/"+annee;
var time = heure+":"+minute+":"+seconde;
if(msg != "")
{ // on vérifie que les variables ne sont pas vides
$.ajax(
{
url : "../include/post_shoutbox.php", // on donne l'URL du fichier de traitement
type : "POST", // la requête est de type POST
data : "date=" + date + "&time=" + time + "&message=" + msg + "&id_salon=" + id_salon + "&id=" + id// et on envoie nos données
});
$('#messages').append("<font>" + date + " à " + time + " " + pseudo + " dit : " + msg + "</font>"); // on ajoute le message dans la zone prévue
}
else
{
alert('Votre message est vide');
}
});
function charger()
{
setTimeout( function()
{
var premierID = $('#messages p:first').attr('id'); // on récupère l'id le plus récent
$.ajax(
{
url : "../include/get_shoutbox.php?id=" + premierID, // on passe l'id le plus récent au fichier de chargement
type : GET,
success : function(html)
{
$('#messages').prepend(html);
}
});
charger();
}, 500);
}
charger();
Voici get_shoutbox.php
<?php
if(!empty($_GET['id']))
{
// on vérifie que l'id est bien présent et pas vide
$id = (int) $_GET['id']; // on s'assure que c'est un nombre entier
// on récupère les messages ayant un id plus grand que celui donné
$requete = $bdd->prepare('SELECT * FROM messages WHERE id > :id ORDER BY id DESC');
$requete->execute(array("id" => $id));
$messages = 'Ce message n\'existe pas';
// on inscrit tous les nouveaux messages dans une variable
while($donnees = $requete->fetch())
{
$messages .= "<font id=\"" . $donnees['id'] . "\">".$msg['date']." à ".$msg['time']." ".$msg['author']." dit : ". $msg['message']."<hr/></font>";
}
echo $messages; // enfin, on retourne les messages à notre script JS
}
?>
Voici post_shoutbox.php
<?php
if (!empty($_POST))
{
if(!empty(strip_tags($_POST['message'])) && strlen(strip_tags($_POST['message'])) >= 1)
{
$message= strip_tags($_POST['message']);
if(isset($_SESSION))
{
$id_salon=$_POST['id_salon'];
$id_session=$_SESSION['id'];
$erreur['msg']='Vous pouvez maintenant faire de nouvelle vérifications';
$requete = $bdd->prepare("SELECT * FROM shoutbox_msg WHERE id_expediteur = ? AND id_salon = ?");
$requete->bindParam(1, $id_session);
$requete->bindParam(2, $id_salon);
$requete->execute();
if($requete->fetch())
{
$erreur['msg']='La requête indique que vous avez déjà posté des messages dans ce salon';
$flood=false;
//$flood=true;
}
else
{
$erreur['msg']='La requête indique que vous n\'avez pas posté de message dans ce salon';
$flood=false;
}
if($flood==false)
{
$erreur['msg']='Votre message peut-être enregistré';
$requete = $bdd->prepare("INSERT INTO shoutbox_msg (id_expediteur, time_msg, date_msg, msg, id_salon) VALUES (?,?,?,?,?)");
$requete->bindParam(1, $id_session);
$requete->bindParam(2, $time);
$requete->bindParam(3, $date);
$requete->bindParam(4, $message);
$requete->bindParam(5, $id_salon);
$requete->execute();
if($requete)
{
$erreur['msg']='Votre message a été envoyé';
$erreur=array();
$message=array();
}
else
{
$erreur['msg']='Votre message n\'a pas été envoyé';
}
}
else
{
$erreur['msg']='Ce message a déjà été envoyé ses 10 derniére secondes';
}
}
else
{
$erreur['msg']='Vous devez être connecté pour pouvoir discuter';
}
}
else
{
$erreur['msg']='Votre message doit contenir au minimum 1 caractére';
$message= strip_tags($_POST['message']);
}
}
?>
Voici shoutbox.php
<?php
if(empty($subtitle))
{
$subtitle='Shoutbox';
include 'include/header.php';
include 'include/body.php';
if (!isset($nbrs_admin))
{
$nbrs_admin='0';
}
if (!isset($nbrs_modo))
{
$nbrs_modo='0';
}
if (!isset($nbrs_membre))
{
$nbrs_membre='0';
}
if($maintenance == 'off')
{
if(empty($id_salon))
{
$id_salon='2';
}
$erreur=array();
$_SESSION['id']='1';
$_SESSION['pseudo']='Administrateur';
include('include/post_shoutbox.php');
?>
<div height="100%" width="100%" align="center" valign="middle">
<form method="POST" action="shoutbox.php">
<table border="1" align="bottom" class="shoutbox">
<tr valign="middle" width="100%" class="shout1"><td colspan="2" align="center">Bienvenue dans la Shoutbox <font color="#444444"><?php echo $_SESSION['pseudo'];?></font></td></tr>
<tr valign="middle" align="left" class="shout2"><td colspan="2"><u>Liste des salons</u> | <u>#Aide</u> | <u>#Général</u></td></tr>
<tr valign="middle" align="center" class="shout1"><td width="80%" align="center">Suivi de discution</td><td>Membre en ligne</td></tr>
<tr align="left" height="423px" class="shout2">
<td valign="bottom" height="423px">
<div style="height:100%;width:100%;display: block;overflow:hidden;overflow-x: hidden;overflow-y: auto;overflow : -moz-scrollbars-vertical;" id="messages">
<input type="hidden" name="id_salon" value="<?php echo $id_salon?>" />
<?php
include ('include/affichage_msg_salon.php');
?>
</div>
</td>
<td valign="top" height="423px">
<div style="height:100%;width:100%;display: block;overflow:hidden;overflow-x: hidden;overflow-y: auto;overflow : -moz-scrollbars-vertical;"><?php
echo '<font color="#660000">Administrateurs :<br /><br />';
if ($nbrs_admin!='0')
{
echo 'Des administrateurs sont en ligne <br />';
}
else
{
echo 'Aucun administrateur en ligne';
}
echo '</font><hr/>';
echo '<font color="#006600">Modérateurs :<br /><br />';
if ($nbrs_modo!='0')
{
echo 'Des modérateurs sont en ligne<br />';
}
else
{
echo 'Aucun modérateur en ligne';
}
echo '</font><hr/>';
echo '<font color="000066">Membres :<br /><br />';
if ($nbrs_membre!='0')
{
echo 'Des membres sont en ligne<br />';
}
else
{
echo 'Aucun membre en ligne';
}
echo '</font>';
?>
</td>
</tr>
<tr valign="middle" align="left" class="shout1"><td colspan="2">Actions : | <b>G</b> | <i>I</i> | <s>B</s> | <u>S</u> | | | | | | | | | </td></tr>
<tr valign="middle" align="left"><td style="background-color:#dddddd;">
<input type="hidden" name="pseudo" id="pseudo_expediteur" value="<?php echo $_SESSION['pseudo'];?>" />
<input type="hidden" name="id" id="id_expediteur" value="<?php echo $_SESSION['id'];?>" />
<input type="texte" name="message" id="message_expediteur" size="100%" placeholder="Votre message ici" style="width:90%;" />
<font size="1">
<input type="submit" name="envoyer" id="envoyer" value="Envoyer" />
</font>
</td><td align="center" class="shout2">Shoutbox version : Alpha</td></tr>
</table>
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="js/main_shoutbox.js">
</script>
</div>
<?php
}
else
{
echo $img_maintenance;
}
include 'include/no-body.php';
}
else
{
echo 'La shoutbox est indisponnible pour cette page !';
echo 'Veuillez-vous rendre sur <a href="shoutbox.php" rel="nofollow noopener noreferrer" target="_blank">cette page</a>';
}
?>
Pourriez-vous m'aider à trouver la/les source(s) du (des) problème(s) ?
il y aurait beaucoup de choses à dire sur tes codes... mais bon.
Déjà.. je ne vois pas dans tes script ajax (php) la connexion à la BDD.
Ensuite, vu que tu sembles utiliser la PDO... pense à activer la gestion des erreurs PDO et à mettre tes requêtes dans des blocs try/catch
Comme ici :
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
N'hésites pas non plus à utiliser les success / error de l'ajax (jquery) pour afficher (via des console.log) ce qui est retourné par ton php.
Et enfin.. regarde dans la console de ton navigateur ce qui apparait lorsque tu postes un message... histoire de voir si il n'y aurait pas des erreurs... ou au moins voir le résultat des console.log
$('#envoyer').click(function(e)
{
e.preventDefault(); // on empêche le bouton d'envoyer le formulaire
var pseudo = encodeURIComponent( $('#pseudo_expediteur').val() );//pseudo de l'expediteur
var msg = encodeURIComponent( $('#message_expediteur').val() );//message envoyé
var id_salon = encodeURIComponent( $('#id_salon').val() );//id du salon
var id = encodeURIComponent( $('#id_expediteur').val() );//id de l'expediteur
var timer = new Date(); //création variable timer
var annee = timer.getFullYear();
var mois = timer.getMonth()+1;
var jour = timer.getDate();
var hrs = timer.getHours();
var mins = timer.getMinutes();
var secs = timer.getSeconds();
var heure = ((hrs<10)?"0":"")+hrs;
var minute = ((mins<10)?"0":"")+mins;
var seconde = ((secs<10)?"0":"")+secs;
var date = jour+"/"+mois+"/"+annee;
var time = heure+":"+minute+":"+seconde;
if(msg != "")
{ // on vérifie que les variables ne sont pas vides
$.ajax(
{
url : "../include/post_shoutbox.php", // on donne l'URL du fichier de traitement
type : "POST", // la requête est de type POST
data : "message=" + msg + "&id_salon=" + id_salon + "&id=" + id,// et on envoie nos données
success : function(data, statut)
{
alert ('success');
},
error : function(data, statut, erreur)
{
alert ('error');
},
complete : function(data, statut)
{
alert ('complete');
}
});
$('#messages').append("<font>" + date + " à " + time + " " + pseudo + " dit : " + msg + "</font>"); // on ajoute le message dans la zone prévue
}
else
{
alert('Votre message est vide');
}
});
j'ai ajouter la connexion à la base de données dans les page de traitement (get_shoubox.php et post_shoutbox.php).
Quand j'envois un message, j'ai a chaque fois 2 alert (error et complete)
Qu'elle est la différence entre succes et complete ?
la console me dit :
Page main_shoutbox.js ligne 47:4
ReferenceError: GET is not defined
type : GET,
L’utilisation de « getPreventDefault() » est obsolète. Utiliser « defaultPrevented » à la place. (il semble que la librairie ajax 1.8 soit la cause de cette erreur)
je suppose que ça veut dire que GET n'est pas défini dans mon javascript
La page main_shoutbox.js
$('#envoyer').click(function(e)
{
e.preventDefault(); // on empêche le bouton d'envoyer le formulaire
var pseudo = encodeURIComponent( $('#pseudo_expediteur').val() );//pseudo de l'expediteur
var msg = encodeURIComponent( $('#message_expediteur').val() );//message envoyé
var id_salon = encodeURIComponent( $('#id_salon').val() );//id du salon
var id = encodeURIComponent( $('#id_expediteur').val() );//id de l'expediteur
var timer = new Date(); //création variable timer
var annee = timer.getFullYear();
var mois = timer.getMonth()+1;
var jour = timer.getDate();
var hrs = timer.getHours();
var mins = timer.getMinutes();
var secs = timer.getSeconds();
var heure = ((hrs<10)?"0":"")+hrs;
var minute = ((mins<10)?"0":"")+mins;
var seconde = ((secs<10)?"0":"")+secs;
var date = jour+"/"+mois+"/"+annee;
var time = heure+":"+minute+":"+seconde;
if(msg != "")
{ // on vérifie que les variables ne sont pas vides
$.ajax(
{
url : "./include/post_shoutbox.php", // on donne l'URL du fichier de traitement
type : "POST", // la requête est de type POST
data : "message=" + msg + "&id_salon=" + id_salon + "&id=" + id,// et on envoie nos données
success : function(data, statut)
{
console.log(data);
}
});
$('#messages').append("<font>" + date + " à " + time + " " + pseudo + " dit : " + msg + "</font><hr />"); // on ajoute le message dans la zone prévue
}
else
{
alert('Votre message est vide');
}
});
function charger()
{
setTimeout( function()
{
var premierID = $('#messages p:first').attr('id'); // on récupère l'id le plus récent
$.ajax(
{
url : "./include/get_shoutbox.php?id=" + premierID, // on passe l'id le plus récent au fichier de chargement
type : GET,
success : function(html)
{
$('#messages').append("<font>" + date + " à " + time + " " + pseudo + " dit : " + msg + "</font><hr />");
}
});
charger();
}, 500);
}
charger();
Tu as activé les erreurs PDO comme je te l'ai indiqué ?
Tu as quelque chose qui s'affiche dans ta console ?
Tu peux montrer ton code modifié suite à mes remarques précédentes ?
Les erreur PDO sont activé à la requete de connexion de connect-bdd.php
Dans la console, ça me dis que la valeur date n'existe pas (et ça me fait la boucle pour afficher les nouveau messages)
erreur console :
[En savoir plus]main_shoutbox.js:46:5
ReferenceError: date is not defined
Voici les pages actuelle avec leur dossiers parents :
dossier racine
-shoutbox.php
<?php
if(empty($subtitle))
{
$subtitle='Shoutbox';
include 'include/header.php';
include 'include/body.php';
if (!isset($nbrs_admin))
{
$nbrs_admin='0';
}
if (!isset($nbrs_modo))
{
$nbrs_modo='0';
}
if (!isset($nbrs_membre))
{
$nbrs_membre='0';
}
if($maintenance == 'off')
{
if(empty($id_salon))
{
$id_salon='2';
}
$erreur=array();
$_SESSION['id']='1';
$_SESSION['pseudo']='Administrateur';
?>
<div height="100%" width="100%" align="center" valign="middle">
<form method="POST" action="shoutbox.php">
<table border="1" align="bottom" class="shoutbox">
<tr valign="middle" width="100%" class="shout1"><td colspan="2" align="center">Bienvenue dans la Shoutbox <font color="#444444"><?php echo $_SESSION['pseudo'];?></font></td></tr>
<tr valign="middle" align="left" class="shout2"><td colspan="2"><u>Liste des salons</u> | <u>#Aide</u> | <u>#Général</u></td></tr>
<tr valign="middle" align="center" class="shout1"><td width="80%" align="center">Suivi de discution</td><td>Membre en ligne</td></tr>
<tr align="left" height="423px" class="shout2">
<td valign="bottom" height="423px">
<div style="height:100%;width:100%;display: block;overflow:hidden;overflow-x: hidden;overflow-y: auto;overflow : -moz-scrollbars-vertical;" id="messages">
<input type="hidden" name="id_salon" value="<?php echo $id_salon?>" />
<?php
include ('include/affichage_msg_salon.php');
?>
</div>
</td>
<td valign="top" height="423px">
<div style="height:100%;width:100%;display: block;overflow:hidden;overflow-x: hidden;overflow-y: auto;overflow : -moz-scrollbars-vertical;"><?php
echo '<font color="#660000">Administrateurs :<br /><br />';
if ($nbrs_admin!='0')
{
echo 'Des administrateurs sont en ligne <br />';
}
else
{
echo 'Aucun administrateur en ligne';
}
echo '</font><hr/>';
echo '<font color="#006600">Modérateurs :<br /><br />';
if ($nbrs_modo!='0')
{
echo 'Des modérateurs sont en ligne<br />';
}
else
{
echo 'Aucun modérateur en ligne';
}
echo '</font><hr/>';
echo '<font color="000066">Membres :<br /><br />';
if ($nbrs_membre!='0')
{
echo 'Des membres sont en ligne<br />';
}
else
{
echo 'Aucun membre en ligne';
}
echo '</font>';
?>
</td>
</tr>
<tr valign="middle" align="left" class="shout1"><td colspan="2">Actions : | <b>G</b> | <i>I</i> | <s>B</s> | <u>S</u> | | | | | | | | | </td></tr>
<tr valign="middle" align="left"><td style="background-color:#dddddd;">
<input type="hidden" name="pseudo" id="pseudo_expediteur" value="<?php echo $_SESSION['pseudo'];?>" />
<input type="hidden" name="id" id="id_expediteur" value="<?php echo $_SESSION['id'];?>" />
<input type="texte" name="message" id="message_expediteur" size="100%" placeholder="Votre message ici" style="width:90%;" />
<font size="1">
<input type="submit" name="envoyer" id="envoyer" value="Envoyer" />
</font>
</td><td align="center" class="shout2">Shoutbox version : Alpha</td></tr>
</table>
</form>
<script src="js/main_shoutbox.js">
</script>
<script type="text/javascript">
element = document.getElementById('messages');
element.scrollTop = element.scrollHeight;
</script>
</div>
<?php
}
else
{
echo $img_maintenance;
}
include 'include/no-body.php';
}
else
{
echo 'La shoutbox est indisponible pour cette page !';
echo 'Veuillez-vous rendre sur <a href="shoutbox.php" rel="nofollow noopener noreferrer" target="_blank">cette page</a>';
}
?>
<?php
if(!empty($_GET['id']))
{
include ('connect-bdd.php');
// on vérifie que l'id est bien présent et pas vide
$id = (int) $_GET['id']; // on s'assure que c'est un nombre entier
// on récupère les messages ayant un id plus grand que celui donné
$requete = $bdd->prepare('SELECT * FROM shoutbox_msg WHERE id > :id ORDER BY id DESC');
$requete->execute(array("id" => $id));
$messages = 'Ce message n\'existe pas';
// on inscrit tous les nouveaux messages dans une variable
while($donnees = $requete->fetch())
{
$messages .= "<font id=\"" . $donnees['id'] . "\">".$msg['date']." à ".$msg['time']." ".$msg['author']." dit : ". $msg['message']."<hr/></font>";
}
echo $messages; // enfin, on retourne les messages à notre script JS
}
?>
post_shoutbox.php
<?php
if (!empty($_POST))
{
include ('connect-bdd.php');
if(!empty(mysql_real_escape_string($_POST['message'])) && strlen(mysql_real_escape_string($_POST['message'])) >= 1)
{
$messag= strip_tags($_POST['message']);
$message= mysql_real_escape_string($_POST['message']);
if(isset($_SESSION))
{
$id_salon=$_POST['id_salon'];
$id_session=$_SESSION['id'];
$erreur['msg']='Vous pouvez maintenant faire de nouvelle vérifications';
$requete = $bdd->prepare("SELECT * FROM shoutbox_msg WHERE id_expediteur = ? AND id_salon = ?");
$requete->bindParam(1, $id_session);
$requete->bindParam(2, $id_salon);
$requete->execute();
if($requete->fetch())
{
$erreur['msg']='La requête indique que vous avez déjà posté des messages dans ce salon';
$flood=false;
//$flood=true;
}
else
{
$erreur['msg']='La requête indique que vous n\'avez pas posté de message dans ce salon';
$flood=false;
}
if($flood==false)
{
$erreur['msg']='Votre message peut-être enregistré';
$requete = $bdd->prepare("INSERT INTO shoutbox_msg (id_expediteur, time_msg, date_msg, msg, id_salon) VALUES (?,?,?,?,?)");
$requete->bindParam(1, $id_session);
$requete->bindParam(2, $time);
$requete->bindParam(3, $date);
$requete->bindParam(4, $message);
$requete->bindParam(5, $id_salon);
$requete->execute();
if($requete)
{
$erreur['msg']='Votre message a été envoyé';
$erreur=array();
$message=array();
}
else
{
$erreur['msg']='Votre message n\'a pas été envoyé';
}
}
else
{
$erreur['msg']='Ce message a déjà été envoyé ses 10 derniére secondes';
}
}
else
{
$erreur['msg']='Vous devez être connecté pour pouvoir discuter';
}
}
else
{
$erreur['msg']='Votre message doit contenir au minimum 1 caractére';
$message= strip_tags($_POST['message']);
}
}
?>
j'ai maintenant ceci :
j'ai ajouter la connexion à la base de données dans les page de traitement (get_shoubox.php et post_shoutbox.php).
Quand j'envois un message, j'ai a chaque fois 2 alert (error et complete)
Qu'elle est la différence entre succes et complete ?
Par contre... au lieu de faire les alert... fais donc des console.log(data)
et dis nous ce que la console de ton navigateur te retourne