Signaler

Tchat en php js ajax [Résolu]

Posez votre question flo39400 520Messages postés mardi 8 avril 2008Date d'inscription 20 septembre 2017 Dernière intervention - Dernière réponse le 8 sept. 2017 à 15:31 par flo39400
Bonjour, je suis débutant et j'ai un problème pour faire un update dans mon instance quand j'envoie un message et je sais pas comment vérifier que mon $_GET['statut'] est bien reçu mon code.

Voici la page principal :

chat.php
<?php
session_start();

?>
<html>
<head>
<link rel="stylesheet" href="chat.css"/>
</head>
<body>
<table id="body">

<tr>
<td id="titre">Chat en Ajax avec PHP et JQuery</td>
</tr>

<tr >

<td style="height:500px">

<div id="chat_aff"></div>

</td>

</tr>

<tr >

<td id="form" valign="top">
<?php 
if(isset($_SESSION['id'])) {
    
?>
<table id="form2">
<input id="statut" type="hidden" value="<?= $_SESSION['statut'] ?>" />
<input id="name" type="hidden" value="<?= $_SESSION['pseudo'] ?>" />
<tr>
 <td style="width:100%">
 <label for="message" style="font-family:Comic Sans MS;">Message</label>
 </td>
 <td></td>

</tr>
<tr><?php /*
 <td>
  <label for="name" style="font-family:Comic Sans MS;"><?= $_SESSION['pseudo'] ?></label>< 
 </td>
*/ ?>
 <td colspan="2" >
 <input id="message" type="text" maxlength="250"  />
 </td>
 
 <td>
 
 </td>
</tr>

</table>
<?php 
}else{
?>
<center>Vous devez être connecter pour poster un message !</center><br/>
<center><a href="connexion.php" rel="nofollow noopener noreferrer" target="_blank">Vous connecter !</a></center>
<?php    
    
}
?>

</td>

</tr>

</table>
<script src="http://code.jquery.com/jquery.min.js"></script>
<script>

 setInterval(function()
 {
 $("#chat_aff").load("chat_control.php",function(){}); 
 },1000);
 

 $("#message").keydown(function(event)
 {
        if ( event.which == 13 ) {
 var name =  $("#name").val();
 
 var message = $("#message").val();
            
    var statut = $("#statut").val();        
            
 $("#message").val("");
 
 $.ajax({
  async: false ,
  type: 'GET',
  url: 'chat_control.php?name='+name+'&message='+message+'&statut='+statut
  
 });
        }
 });


</script>
<?php if(isset($_SESSION['id'])) {
    if($_SESSION['statut'] == 3){
        echo 'Admin statut !';
    }else{
        echo 'User staut !';
    }
} ?>
<?php if(isset($_SESSION['id'])) { echo "<a href='deco.php' rel="nofollow noopener noreferrer" target="_blank">Se déconnecter !</a>"; } ?>
</body>
    </html>




Le chat_control.php :



<?php
require_once("chat_modele.php");
$bdd = bdd();


if(isset($_GET['name']) AND isset($_GET['message']) AND isset($_GET['statut']))
{
 if(!empty($_GET['message'])){
       if($_GET['statut'] == 3){
            ajout_message_admin($bdd,$_GET['name'],$_GET['message'],$_GET['statut']);
        }else{
           ajout_message($bdd,$_GET['name'],$_GET['message']); 
        }
    }else{
        echo  "Votre messsage est vide !";
    }
 
 
}
else
{
 expire_message($bdd);
 $message = message($bdd);
 require_once("chat_vue.php");
}

?>



Le chat_modele.php :


<?php
function bdd()
{
return $db = new PDO('mysql:host=localhost;dbname=site; charset=utf8', 'root', 'root');
}
function ajout_message($bdd,$pseudo,$message)
{
 $req = $bdd->prepare("INSERT INTO JS(Pseudo,Message,Date) VALUES(:Pseudo,:Message,NOW())");
 $req->execute(array("Pseudo"=>$pseudo,"Message"=>$message));
}
function ajout_message_admin($bdd,$pseudo,$message,$statut)
{
    $req = $bdd->prepare("INSERT INTO JS(Pseudo,Message,Date) VALUES(:Pseudo,:Message,NOW())");
 $req->execute(array("Pseudo"=>$pseudo,"Message"=>$message));
    $req_admin = $bdd->prepare("UPDATE JS SET WHERE Statut = ?");
    $req_admin->execute(array($statut));
}
function message($bdd)
{
 $req = $bdd->query("SELECT * FROM JS WHERE Etat = 1 ORDER BY Date DESC");
 
 return $req;
}

function expire_message($bdd)
{
 
 $req = $bdd->query("UPDATE JS SET Etat = 0 WHERE Date < DATE_SUB(NOW(), INTERVAL 10 MINUTE)");
 
}

function pair($nombre)
{
    if ($nombre%2 == 0) return true;
    else return false;
}

function getRelativeTime($date) {
    // Déduction de la date donnée à la date actuelle
    $time = time() - strtotime($date); 

    // Calcule si le temps est passé ou à venir
    if ($time > 0) {
        $when = "il y a";
    } else if ($time < 0) {
        $when = "dans environ";
    } else {
        return "il y a 1 seconde";
    }
    $time = abs($time); 

    // Tableau des unités et de leurs valeurs en secondes
    $times = array( 31104000 =>  'an{s}',       // 12 * 30 * 24 * 60 * 60 secondes
                    2592000  =>  'mois',        // 30 * 24 * 60 * 60 secondes
                    86400    =>  'jour{s}',     // 24 * 60 * 60 secondes
                    3600     =>  'heure{s}',    // 60 * 60 secondes
                    60       =>  'minute{s}',   // 60 secondes
                    1        =>  'seconde{s}'); // 1 seconde         

    foreach ($times as $seconds => $unit) {
        // Calcule le delta entre le temps et l'unité donnée
        $delta = round($time / $seconds); 

        // Si le delta est supérieur à 1
        if ($delta >= 1) {
            // L'unité est au singulier ou au pluriel ?
            if ($delta == 1) {
                $unit = str_replace('{s}', '', $unit);
            } else {
                $unit = str_replace('{s}', 's', $unit);
            }
            // Retourne la chaine adéquate
            return $when." ".$delta." ".$unit;
        }
    }
}
?>



Le chat_vue.php :


<?php
session_start();
?>
<table id="table_message">
<?php
while($don = $message->fetch())
{
 if(pair($don['id']))
 {
  $color = "";
 }
 else
 {
  $color = "#EDEDED";
 }



?>
<tr style="background-color:<?php echo $color; ?>">
 <td class="info_message" valign="top">
 <span style="font-size:small;"><?php echo $don['Pseudo']; ?></span><br/>
 <?php echo getRelativeTime($don['Date']);?> 
 </td>
 <td class="message" >
 <div class="message2" >
 <?php echo $don['Message'];?>
 </div> 
 </td>

</tr>


<?php

}
?>
</table>



Merci d'avance je galère depuis des jours.....
Utile
+0
plus moins
Bonjour,

Oula... y'aurait plein de choses à revoir dans ton code ...
mais bon.

Concernant ton appel ajax.
Pour commencer.. je serai toi.. je le ferai en POST et non en GET
Puis.. ajoute le success et le error pour afficher, dans la console, le résultat par exemple.

var datas ={name:name
                 ,message:message
                 ,statut:statut};
 $.ajax({
  async: false ,
  type: 'POST',
  url: 'chat_control.php',
  data : datas,
  success: function(reponse){
    console.log(reponse);
  },
  error: function(jqXHR, textStatus){
     console.log(jqXHR);
     alert(jqXHR.status + ":" +jqXHR.responseText );
   }  
 });



côté Le chat_control.php
 <?php 
 
require_once("chat_modele.php");
$bdd = bdd();

//récupération PROPRE DES VARIABLES AVANT de les utiliser
$name = !empty($_POST['name']) ? $_POST['name'] : NULL;
$message = !empty($_POST['message']) ? $_POST['message'] : NULL;
$statut = !empty($_POST['statut']) ? $_POST['statut'] : NULL;

if($name &&  $statut) {
  if($message){
    if($statut$ == 3){
      ajout_message_admin($bdd,$_GET['name'],$_GET['message'],$_GET['statut']);
    }else{
      ajout_message($bdd,$_GET['name'],$_GET['message']); 
    }
  }else{
      echo  "Votre messsage est vide !";
  }
  
}else{
 expire_message($bdd);
 $message = message($bdd);
 require_once("chat_vue.php");
}




Et pour finir .. tu dois activer la gestion des erreurs PHP :
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
jordane45 18306Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 21 septembre 2017 Dernière intervention - 31 août 2017 à 16:27
la variables datas contient les données que tu ENVOIES à ton script php ajax.

tu parles de récupérer ton #id ... le récupérer de où ? Celui généré par ta BDD lorsque tu ajoutes un message ??
Si oui... il faut modifier plusieurs choses....
Déjà
function ajout_message($bdd,$pseudo,$message)
{
 $sql = "INSERT INTO JS(Pseudo,Message,Date) VALUES(:Pseudo,:Message,NOW())";
  $datas = array(":Pseudo"=>$pseudo,":Message"=>$message);
 try{
   $req = $bdd->prepare($sql);
   $req->execute($datas);
   $result = $bdd>lastInsertId(); //retourne l'id autoincrementé créé par la bdd
  } catch(Exception $e){
   echo "Erreur ! " . $e->getMessage();
  }
return $result;

}

Tu remarqueras que j'ai placé le code dans un bloc try/catch !
Il faudra faire de même dans TOUTES tes autres fonctions !


Ensuite dans ton fichier ajax php :
require_once("chat_modele.php");
$bdd = bdd();

//récupération PROPRE DES VARIABLES AVANT de les utiliser
$name = !empty($_POST['name']) ? $_POST['name'] : NULL;
$message = !empty($_POST['message']) ? $_POST['message'] : NULL;
$statut = !empty($_POST['statut']) ? $_POST['statut'] : NULL;

$result = ""; //initialisation de la variable de retour

if($name &&  $statut) {
  if($message){
    if($statut == 3){
      $result = ajout_message_admin($bdd,$_POST['name'],$_POST['message'],$_POST['statut']);
    }else{
        $result = ajout_message($bdd,$_POST['name'],$_POST['message']); 
    }
  }else{
         $result =  "Votre messsage est vide !";
  }
  
}else{
 expire_message($bdd);
 $message = message($bdd);
 
}

//retourne la variable au format json
echo json_encode($result);



Ensuite... pour afficher le message... dis toi que tu dois le gérer via le javascript directement....
Tu ne dois pas faire appel à ton fichier chat_vue.php ......
ou alors tu l'inclus DIRECTEMENT dans ta page principale puis tu rempli ton tableau depuis ton js (dans le success de l'ajax par exemple ).


Au passage....
tu peux remplacer ce code :
 if(pair($don['id']))
 {
  $color = "";
 }
 else
 {
  $color = "#EDEDED";
 }

par :
$color = $don['id']%2 ? "" : "#EDEDED";
Répondre
flo39400 520Messages postés mardi 8 avril 2008Date d'inscription 20 septembre 2017 Dernière intervention - 1 sept. 2017 à 09:51
Bonjour,

J'ai modifier les fonctions :

<?php
function bdd()
{
    try{
            return $db = new PDO('mysql:host=localhost;dbname=site; charset=utf8', 'root', 'root');
            // Activation des erreurs PDO
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
            $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
        } catch(PDOException $e) {
            die('Erreur : ' . $e->getMessage());

        }

}
function ajout_message($bdd,$pseudo,$message)
{
        $sql = "INSERT INTO JS(Pseudo,Message,Date) VALUES(:Pseudo,:Message,NOW())";
        $datas = array(":Pseudo"=>$pseudo,":Message"=>$message);
 try{
   $req = $bdd->prepare($sql);
   $req->execute($datas);
   $result = $bdd>lastInsertId(); //retourne l'id autoincrementé créé par la bdd
    } catch(Exception $e){
        echo "Erreur ! " . $e->getMessage();
    }
    return $result;
}
function ajout_message_admin($bdd,$pseudo,$message,$statut)
{
    $sql = "INSERT INTO JS(Pseudo,Message,Date) VALUES(:Pseudo,:Message,NOW())";
    $datas = array("Pseudo"=>$pseudo,"Message"=>$message);
    $sql1 = "UPDATE JS SET WHERE Statut = ?";
    $datas1 = array($statut);
try{
    $req = $bdd->prepare($sql);
    $req->execute($datas);
    } catch(Exception $e) {
        echo "Erreur ! " . $e->getMessage();
    }
try{
    req1 = $bdd->prepare($sql1);
    $req1->execute($datas1);
    } catch(Exception $e) {
        echo "Erreur ! " . $e->getMessage();
    }
    
}
function message($bdd)
{
    $sql = "SELECT * FROM JS WHERE Etat = 1 ORDER BY Date DESC";
    try{
        $req = $bdd->query($sql);
        } catch(Exception $e) {
        echo "Erreur ! " . $e->getMessage();
    }
    return $req;
}
function expire_message($bdd)
{
    $sql = "UPDATE JS SET Etat = 0 WHERE Date < DATE_SUB(NOW(), INTERVAL 10 MINUTE)";
 try{
        $req = $bdd->query($sql);
        } catch(Exception $e) {
        echo "Erreur ! " . $e->getMessage();
    }
 
}

function pair($nombre)
{
    if ($nombre%2 == 0) return true;
    else return false;
    
}

function getRelativeTime($date) {
    // Déduction de la date donnée à la date actuelle
    $time = time() - strtotime($date); 

    // Calcule si le temps est passé ou à venir
    if ($time > 0) {
        $when = "il y a";
    } else if ($time < 0) {
        $when = "dans environ";
    } else {
        return "il y a 1 seconde";
    }
    $time = abs($time); 

    // Tableau des unités et de leurs valeurs en secondes
    $times = array( 31104000 =>  'an{s}',       // 12 * 30 * 24 * 60 * 60 secondes
                    2592000  =>  'mois',        // 30 * 24 * 60 * 60 secondes
                    86400    =>  'jour{s}',     // 24 * 60 * 60 secondes
                    3600     =>  'heure{s}',    // 60 * 60 secondes
                    60       =>  'minute{s}',   // 60 secondes
                    1        =>  'seconde{s}'); // 1 seconde         

    foreach ($times as $seconds => $unit) {
        // Calcule le delta entre le temps et l'unité donnée
        $delta = round($time / $seconds); 

        // Si le delta est supérieur à 1
        if ($delta >= 1) {
            // L'unité est au singulier ou au pluriel ?
            if ($delta == 1) {
                $unit = str_replace('{s}', '', $unit);
            } else {
                $unit = str_replace('{s}', 's', $unit);
            }
            // Retourne la chaine adéquate
            return $when." ".$delta." ".$unit;
        }
    }
}
?>


chat_vu.php

<table id="table_message">
<?php
while($don = $message->fetch())
{
 
    $color = $don['id']%2 ? "" : "#EDEDED";



?>
<tr style="background-color:<?php echo $color; ?>">
 <td class="info_message" valign="top">
 <span style="font-size:small;"><?php echo $don['Pseudo']; ?></span><br/>
 <?php echo getRelativeTime($don['Date']);?> 
 </td>
 <td class="message" >
 <div class="message2" >
 <?php echo $don['Message'];?>
 </div> 
 </td>

</tr>


<?php

}
?>
</table>


chat_controle.php :

<?php
require_once("chat_modele.php");
$bdd = bdd();

//récupération PROPRE DES VARIABLES AVANT de les utiliser
$name = !empty($_POST['name']) ? $_POST['name'] : NULL;
$message = !empty($_POST['message']) ? $_POST['message'] : NULL;
$statut = !empty($_POST['statut']) ? $_POST['statut'] : NULL;

$result = ""; //initialisation de la variable de retour

if($name &&  $statut) {
  if($message){
    if($statut == 3){
      $result = ajout_message_admin($bdd,$_POST['name'],$_POST['message'],$_POST['statut']);
    }else{
        $result = ajout_message($bdd,$_POST['name'],$_POST['message']); 
    }
  }else{
         $result =  "Votre messsage est vide !";
  }
  
}else{
 expire_message($bdd);
 $message = message($bdd);
 
}

//retourne la variable au format json
echo json_encode($result);
?>


chat.php :

<?php
session_start();
?>
<html>
<head>
<link rel="stylesheet" href="chat.css"/>
</head>
<body>

<table id="body">
<tr>
<td id="titre">Chat en Ajax avec PHP et JQuery</td>
</tr>

<tr >

<td style="height:300px">

<div id="chat_aff"></div>

</td>

</tr>

<tr >

<td id="form" valign="top">
<?php 
if(isset($_SESSION['id'])) {
    
?>
<table id="form2">
<input id="statut" type="hidden" value="<?= $_SESSION['statut'] ?>" />
<input id="name" type="hidden" value="<?= $_SESSION['pseudo'] ?>" />
<tr>
 <td style="width:100%">
 <label for="message" style="font-family:Comic Sans MS;">Message</label>
 </td>
 <td></td>

</tr>
<tr>
 <td colspan="2" >
 <input id="message" type="text" maxlength="250"  />
 </td>
 
 <td>
 
 </td>
</tr>

</table>
    
<?php 
}else{
?>
<center>Vous devez être connecter pour poster un message !</center><br/>
<?php    
    
}
?>

</td>

</tr>

</table>
   
<script src="http://code.jquery.com/jquery.min.js"></script>
<script>

 setInterval(function()
 {
 $("#chat_aff").load("chat_control.php",function(){}); 
 },1000);
 

 $("#message").keydown(function(event)
 {
        if ( event.which == 13 ) {
        var datas ={name:name
                 ,message:message
                 ,statut:statut};
            
 $.ajax({
  async: false ,
  type: 'POST',
  url: 'chat_control.php',
  data : datas,
  success: function(reponse){
    console.log(reponse);
    <?php include("chat_vue.php"); ?>
  }
  error: function(jqXHR, textStatus){
     console.log(jqXHR);
     alert(jqXHR.status + ":" +jqXHR.responseText );
   }  
 });


    </script>
</body>
    </html>


Mais j'ai toujours le même problème pas de message d'erreur et pas de message inscrit dans la base de donnée.....
Répondre
jordane45 18306Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 21 septembre 2017 Dernière intervention - 1 sept. 2017 à 16:19
Il n'y a rien dans la console ? Tu y a activé le xhr au moins ??
Répondre
flo39400 520Messages postés mardi 8 avril 2008Date d'inscription 20 septembre 2017 Dernière intervention - 1 sept. 2017 à 23:15
Bonsoir, non rien dans la console.
Le XMLHttpRequest je sais pas, car au début tous fonctionner sauf que j'arriver pas a update l'Etat de l'utilisateur connecter dans la DB.

Maintenant même le menu pour naviguer ne marche pu, et aucune erreur pourtant j'ai activer les erreurs dans Mamp et dans le fichier de connexion.

Je comprend pas pourquoi ça ne marche pas... comme si Ajax n'arriver pas a transmettre les données au serveur php.

Je vais bosser dessus toutes la nuit je vais bien voir.

Merci d'avance de votre réponse.
Répondre
flo39400 520Messages postés mardi 8 avril 2008Date d'inscription 20 septembre 2017 Dernière intervention - 1 sept. 2017 à 23:23
Re bon je sais ça viens de quoi mon
<?php include("chat_vue.php"); ?>
Dans le script fait tous planté le code.

Mais ou je peu le mètre vu que dans le script cela ne passe pas ?
Répondre
Donnez votre avis
Utile
+0
plus moins
Donc après des jours de recherche, j'ai changer le mode de ma base de donnée au lieu de faire un UPDATE pour le Statut régler sur 1 par défaut.
Je l'est laisser vide ce champs puis j'ai simplement fait un INSERT pour ajouter le Pseudo,Message,Statut,Date.

Cela simplifie le problème vu que faire deux fonctions avec un UPDATE en traitement n'a pas marcher.

Merci a vous de votre aide.
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !