Bonjour à tous !
Alors voilà, j'ai un problème avec mon code php, j'essaie de faire un simple de tchat en php (je suis pas encore très bon en php), mais je rencontre des problêmes ...
J'ai fait un fichier avec les fonctions pour traiter, enregister/afficher les messages, une page où l'on inscrit le message et le pseudo , et une page de connection à la base de données. Je suis bloqué depuis au moins un mois, je n'arrive vraiment pas à savoir d'où ca peut venir ...
Voici le code de la connection à la db :
<?php
session_start();
$dbhost = 'localhost';
$dbuser = 'root';
$dbpswd = 'roka304@';
$dbname = 'roka';
$con = mysqli_connect($dbhost,$dbuser,$dbpswd,$dbname);
if(mysqli_connect_errno()){
die("Erreur lors de la connection à la base de données");
}
Voici celui des fonctions :
<?php
function get_msg(){
$sql = "SELECT 'Sender', 'Message' FROM chat";
$run = mysqli_query($con, $sql);
$messages = array();
while($message = mysqli_fetch_assoc($run)){
$messages[] = array(
'sender'=>$message['Sender'],
'message'=>$message['Message']
);
}
return $messages;
}
function send_msg($sender, $message){
if(!empty($sender) && !empty($message)){
$sender = mysqli_real_escape_string($con, $sender);
$message = mysqli_real_escape_string($con, $message);
$sql = "INSERT INTO chat VALUES(null,'{$sender}','$message')";
if($run = mysqli_query($con, $sql)){
return true;
}else{
return false;
}
}else{
return false;
}
}
Et voici la page où l'on inscrit le pseudo et le message :
<?php
if(isLogged() == 1){
if(isset($_POST['submit'])){
if(send_msg($_POST['sender'], $_POST['message'])){
echo "Message sent";
}else{
echo "Message failed ...";
}
}
}else header('Location:index.php?page=login');
?>
<h2>Espace de tchat</h2>
<br /><br />
<div id="messages">
<?php
$messages = get_msg();
foreach($messages as $message){
echo '<strong>'.$message['sender'].'</strong>Sent<br />';
echo $message['message'].'<br /><br />';
}
?>
</div>
<form method="post" action="index.php?page=tchat" class="form_tchat">
<label for="name">Votre nom d'utilisateur :</label><br />
<input type="text" name="sender" placeholder="(minimum 4 caractères)" style="text-align:center" maxlength="30" /><br /><br />
<label for="name">Votre message :</label><br />
<input type="text" name="message" style="text-align:center" maxlength="300" /><br /><br />
<input type="submit" name="submit" value="Envoyer" />
</form>
Voilà, peut etre y verrez-vous une erreur ou un problème, merci de votre aide, j'espère avoir été assez précis !
Ah oui, j'ai oublié, le session start c'est pour l'autre partie de mon site, qui utilise les sessions. La page de tchat est incluse sur une page index, où est incluse la page contenant la connection a la db.
Hello, Problème résolu :)
J'avais oublié de définir les variables de connection en global (global $con;) dans ma fonction, tout marche nickel.
Merci de votre aide
Bonjour,
Avez-vous un message d'erreur ?
Je vois qu'il y a du mysql et du mysqli donc cela ne vas pas . Il vous faut soit rester qu'en mysqli ou passer à PDO.
Merci de votre réponse avant tout !
Le mysql et mysqli, c'est ma faute j'ai mis a l'origine le mysqli, mais voyant que ca ne marchait pas, j'ai essayé avec mysql, sans plus de succès et j'ai oublié de remettre mysqli dans le post. Le seul message d'erreur que j'ai est celui prévu dans mon code, disant : "message failed". J'ai inspecté l'élement et regardé avec firebug, aucune erreur.
Corriger votre code avec mysqli que j'y vois plus clair car la c'est un beau mélange. merci
ok.
Avez-vous procédé par étape pour vérifier le lieux de l'erreur ?
Le mysqli_query de la fonction get_msg va forcément retourner une erreur car il ne connait pas $con
J'ai fait beaucoup de test oui, je n'ai pas trouvé la source.
Si je pense qu'il la connait (j'ai oublié de préciser) la page tchat est incluse sur une page index, où est incluse la page de connection a la DB, j'aurais du préciser
Voila ce que m'a retourné var_dump($con); , sur la page tchat.php :
object(mysqli)#1 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(6) "5.5.44" ["client_version"]=> int(50544) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(15) "5.5.44-0+deb8u1" ["server_version"]=> int(50544) ["stat"]=> string(135) "Uptime: 91494 Threads: 1 Questions: 1619 Slow queries: 0 Opens: 70 Flush tables: 1 Open tables: 60 Queries per second avg: 0.017" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(382) ["warning_count"]=> int(0) }
D'accord, en relisant votre code et votre problème, c'est l'insertion d'un message qui plante ?
Pour insert, une méthode est de cette structure :
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
Qu'elle est la structure de la table chat ?
Ah merci, j'ai mis cela $sql = "INSERT INTO chat(id, Sender, Message) VALUES(null,'{$sender}','$message')";
, l'erreur persiste malheureusement
Non car null est une valeur.
$sql = 'INSERT INTO chat (Sender, Message) VALUES ("'.$sender.'", "'.$message.'")';
Testons la valeur de run dans la condition et vérifions que $sql soit correctement écrit avec les doubles guillemets
Rien de tel que des var_dump pour vérifier au fur et à mesure
Vous parlez bien des guillemets et apostrophes de $sql ? Si c'est le cas j'ai déjà essayé ...
Oui biensur :
<?php
function get_msg(){
$sql = "SELECT 'Sender', 'Message' FROM chat";
$run = mysql_query($sql);
$messages = array();
while($message = mysql_fetch_assoc($run)){
$messages[] = array(
'sender'=>$message['Sender'],
'message'=>$message['Message']
);
}
return $messages;
}
function send_msg($sender, $message){
if(!empty($sender) && !empty($message)){
$sender = mysql_real_escape_string($sender);
$message = mysqli_real_escape_string($message);
$sql = "INSERT INTO chat (Msg_ID,Sender, Message) VALUES ('','.$sender.', '.$message.' ";
if($run = mysql_query($sql)){
return true;
}else{
return false;
}
}else{
return false;
}
}
var_dump($run);
var_dump($sql);
Non sinon il ne voudrons rien.
en plus il manque une ) à $sql
$sql = "INSERT INTO chat (Sender, Message) VALUES ('$sender', '$message') ";
var_dump($sql);
$run = mysql_query($sql);
var_dump($run);
if($run){
Voila ce qu'il me renvoie maintenant : string(51) "INSERT INTO chat (Sender, Message) VALUES ('', '') "
$sender = mysql_real....
vérifier que $sender et $message ne sont pas vide avec le mysqli_real....
Bonsoir.
Si tu nous montrait où tu en est avec ton code en nous présentant ton code avec toutes les corrections que tu à fais depuis le début, ça pourrait nous permettre de t'aider.
Ouaip ok, voilà la dernière version :
<?php
function get_msg(){
$sql = 'SELECT Sender, Message FROM chat';
$run = mysqli_query($sql);
$messages = array();
while($message = mysqli_fetch_assoc($con, $run)){
$messages[] = array(
'sender'=>$message['Sender'],
'message'=>$message['Message']
);
}
return $messages;
}
function send_msg($sender, $message){
if(!empty($sender) && !empty($message)){
$sender = mysqli_real_escape_string($con, $sender);
$message = mysqli_real_escape_string($con, $message);
$sql = 'INSERT INTO chat (Sender, Message) VALUES ($sender,$message)';
if($run = mysqli_query($con, $sql)){
return true;
}else{
return false;
}
}else{
return false;
}
}
?>
et le tchat.php :
<?php
if(isLogged() == 1){
if(isset($_POST['submit'])){
if(!empty($_POST)){
if(send_msg($_POST['sender'], $_POST['message'])){
$error = "Message envoyé";
}else $error = "Message failed ...";
}
}
}else redirect();
?>
<h2>Espace de tchat</h2>
<br /><br />
<div id="messages">
<?php
$messages = get_msg();
foreach($messages as $message){
echo '<strong>'.$message['sender'].'</strong>Sent<br />';
echo $message['message'].'<br /><br />';
}
?>
</div>
<?= $error; ?>
<form method="post" action="" class="form_tchat">
<label for="name">Votre nom d'utilisateur :</label><br />
<input type="text" name="sender" placeholder="(minimum 4 caractères)" style="text-align:center" maxlength="30" /><br /><br />
<label for="name">Votre message :</label><br />
<input type="text" name="message" style="text-align:center" maxlength="300" /><br /><br />
<input type="submit" name="submit" value="Envoyer" />
</form>
J'ai également mis le code sur github pour que vous compreniez comment fonctionnes mon site : https://gist.github.com/R04A/f73c71a7375b7c7bfbb4
L'erreur ne viendrait pas des simples quotes dans la fonction send_msg() ?
L'utilisation des doubles quotes permettent d'afficher directement le contenu de la variable, alors que les simples quotes vont interpréter textuellement la chaîne $variable et l'écrire tel quel.