[RESOLU] codage chat php aidez moi svp !!!

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] codage chat php aidez moi svp !!!

Re: codage chat php aidez moi svp !!!

par moogli » 26 mai 2014, 15:38

merci de cliquer sur le bouton "résolus a droite du titre".


@+

Re: codage chat php aidez moi svp !!!

par loïc » 25 mai 2014, 22:25

j'ai ajouté un header et mon chat semble fonctionnel pour l'instant ...

Merci a vous :)

Manque plus de le protéger ...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<?php
header("Content-Type: text/html; charset=iso-8859-15"); //  header qui formate la page en texte
session_start();
$BDD = mysql_connect("localhost", "root", "");
mysql_select_db("database"); //debut

if(isset($_SESSION['login'])){ 
if (isset($_POST['message']))  // recu de donnees
 { 
  if(!empty($_POST['message'])) // valeur non vide
    {
    $sql = "INSERT INTO messages (login,message,timestamp) VALUES ('".$_SESSION['login']."','".$_POST["message"]."','".time()."')";
    $req = mysql_query($sql);
	header( 'Location: http://127.0.0.1/php/chat2/chat.php');
	}} 
	
 //fin
$reponse = mysql_query("SELECT * FROM messages ORDER BY id DESC LIMIT 0,10");
while($val = mysql_fetch_array($reponse))
{
	echo '<p><strong>'.htmlentities(stripslashes($val['login'])).'</strong> 
	&agrave; '.date('H\:i\:s',$val['timestamp']).' : '. htmlentities(stripslashes($val['message'])) .'</p>';
} }
	
mysql_close(); // On ferme la connexion de notre base de données
?>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<!-- permettre a l'utilisateur d utiliser les caracteres particuliers francais -->
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15" />
<!-- contenu francais -->
<meta http-equiv="Content-Language" content="fr" />
<meta name="Copyright" content="Loïc&Chris" />
<meta name="Author" content="Loïc" />
<title>Match Chat</title>
<script rel="javascript" type="text/javascript"> href="chat.js"></script>
</head>
<body onload="refreshChat();">
<h2>Match Chat</h2>
<div id="database"></div>
<p>
<form action="chat.php" method="post">
Message : <br/><textarea name="message" rows="4" cols="20" id="message"></textarea><br/>
<input type="submit" value="Envoyer"/>
</form>
</p>
</body>
</html>

Re: codage chat php aidez moi svp !!!

par loïc » 21 mai 2014, 21:22

voila pour l'instant je tente d'avoir un simple chat lol et la avec ce code ca commence a approcher

seul probleme :

j'ai cree une nouvelle table avec login message timestamp et id
probleme lorsqu'une personne s 'inscrit un message similaire a celui d 'avant apparaît sauf avec le pseudo du nouveau connecté

ex:(ATTENTION LIRE CE CHAT DU BAS VERS LE HAUT DONC DESCENDEZ UN PEU)

"
www à 21:05:06 : sdqd (apparaît)
(je me connecte avec le compte www)
kkkkk à 21:04:54 : sdqd

kkkkk à 21:04:50 : sd (fonctionne)

kkkkk à 21:04:48 : sq

kkkkk à 21:04:17 : sq (apparaît automatiquement)
(je me connecte avec le compte kkkk)
qs à 21:04:01 : sq

qs à 21:03:59 : sqs
"


et autre probleme chaque fois que je recharge ma page le meme message est a chaque fois renvoyé:


ex(ATTENTION LIRE CE CHAT DU BAS VERS LE HAUT DONC DESCENDEZ UN PEU)
:
"
www à 21:16:39 : gg

www à 21:16:36 : gg

www à 21:16:26 : gg

www à 21:16:22 : gg

www à 21:16:19 : xwxwxw

www à 21:16:05 : xwxwxw (le message precent est renvoyé la date du rafraichissement de la page apparaît)
(je recharge ma page)
www à 21:16:02 : xwxwxw
"


quel simple ligne faudrait il ajouter ou modifier dans le code pour reparer ces erreurs ???

merci a vous voici mon code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<?php
header("Content-Type: text/html; charset=iso-8859-15"); //  header qui formate la page en texte
session_start();
$BDD = mysql_connect("localhost", "root", "");
mysql_select_db("database"); //debut

if(isset($_SESSION['login'])){ 
if (isset($_POST['message']))  // recu de donnees
 { 
  if(!empty($_POST['message'])) // valeur non vide
    {
    $sql = "INSERT INTO messages (login,message,timestamp) VALUES ('".$_SESSION['login']."','".$_POST["message"]."','".time()."')";
    $req = mysql_query($sql);
	}} 
 //fin
$reponse = mysql_query("SELECT * FROM messages ORDER BY id DESC LIMIT 0,10");
while($val = mysql_fetch_array($reponse))
{
	echo '<p><strong>'.htmlentities(stripslashes($val['login'])).'</strong> 
	&agrave; '.date('H\:i\:s',$val['timestamp']).' : '. htmlentities(stripslashes($val['message'])) .'</p>';
} }
	
mysql_close(); // On ferme la connexion de notre base de données
?>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<!-- permettre a l'utilisateur d utiliser les caracteres particuliers francais -->
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15" />
<!-- contenu francais -->
<meta http-equiv="Content-Language" content="fr" />
<meta name="Copyright" content="Loïc&Chris" />
<meta name="Author" content="Loïc" />
<title>Match Chat</title>
<script rel="javascript" type="text/javascript"> href="chat.js"></script>
</head>
<body onload="refreshChat();">
<h2>Match Chat</h2>
<div id="database"></div>
<p>
<form action="chat.php" method="post">
Message : <br/><textarea name="message" rows="4" cols="20" id="message"></textarea><br/>
<input type="submit" value="Envoyer"/>

</form>
</p>
</body>
</html>

Re: codage chat php aidez moi svp !!!

par moogli » 20 mai 2014, 16:41

regarde ce que sont les contraintes d'intégrité référentielle : http://sqlpro.developpez.com/cours/sqla ... ie2#L7.1.7

pk : primary key => clef primaire
fk : foreign key => clef étrangère

un modèle de données bien fait ne te poseras pas de limitation.

pour l'insertion du message, l'id utilisateur tu dois l'avoir en session depuis la connexion (généralement c'est ce qui sert à savoir que l'on est connecté).
<?php
$sql = "INSERT INTO message (message,date,idutilisateur) VALUES ('".$_POST["message"]."','".$_POST["date"]."''".$_POST["idutilisateur"]."')";
surtout pas :
- ouvert au injection SQL (cf google).
- $_POST["idutilisateur"] : la du coup n'importe qui peux poster pour un autre => pas bien (info a prend en session)
- $_POST["date"] : non utilise la fonction php strftime


@+

Re: codage chat php aidez moi svp !!!

par loïc » 19 mai 2014, 22:13

Merci pour la reponse les gars :wink:

dans la table message j'ai cree id(int 11 primary auto increment), idutilisateur (je met varchar 60 ????), message(varchar 255) et datemessage (datetime)

cependant que veulent dire les trucs entre parenthèses que tu m'explique ??? (fk user.id)
Que cela doit se rapporter au login de la personne connecté de la table user.id mais comment faire cela donc ???

idmessage serait le pseudo de la personne connectée mais comment le relier a la table users et faire en sorte que le nom de la personne connectée s'affiche ???



je metterait donc une ligne dans le code $sql = "INSERT INTO message (message,date,idutilisateur) VALUES ('".$_POST["message"]."','".$_POST["date"]."''".$_POST["idutilisateur"]."')";

et un "SELECT login FROM users" pour le referer a la ligne idutilisateur de la table message mais comment faire cela ?

Merci beaucoup j'espère que je ne vous embête pas :wink: je débute ayant pris Informatique et science du numérique pour option/spé bac !! lol :)

Re: codage chat php aidez moi svp !!!

par moogli » 19 mai 2014, 21:49

salut,
si quelqu 'un pouvait me donner de son temps pour le modifier pour qu'il soit fonctionnel et me donner des explications svp !
du temps pour t'aider oui, pas pour le faire pour toi ;)

donc de ce que j'ai compris tu eux n'utiliser qu'une table pour cela ?

si oui c'est une erreur et te conduit vers un foutoir monstre que tu découvre ;)

il te faut au moins deux tables .
- user, similaire a celle que tu as mais sans les deux dernières colonnes (messages et timestamp).
- une table message : id (pk), idutilisateur (fk user.id) message, datemessage (type datetime)

Pour l'affichage tu effectue une jointure entres les deux tables pour avoir le pseudo.
Je te conseil aussi une purge régulière afin d'éviter de garder des messages inutiles (déclenchement sur trigger par exemple, ou un cron).

Suivant le volume de gens qui utilise ceci tu va vite avoir des problèmes de performance, et devoir t'orienter vers un "vrai serveur de chat".

Attention généralement les hébergeurs n'apprécie pas ce type de code, assez chronophage pour pas grand chose ;)


pour augmenter le coté dynamique de la chose tu regarder du coté des web socket histoire que le log des messages soit rafraichit "automatiquement" a chaque nouveau message.


@+

Re: codage chat php aidez moi svp !!!

par wng » 19 mai 2014, 21:45

Très simple :
// En début de page avant tous le reste :
session_start();

// lors de la connexion de ton utilisateur :
$_SESSION["mavar"] = 1; // ( c'est juste un exemple u peut passer ce que bon te semble )

// pour sécurisé ton formulaire ET ton script de soumission des posts :
if($_SESSION["mavar"] === 1) {

   /// le formulaire html + le traitement php lorsqu'un utilisateur poste quelque chose, en mettant tous dans cette boucle les utilisateur qui ne sont pas connecté ne pourront strictement rien faire !

}
En espérant t'avoir aider :)

codage chat php aidez moi svp !!!

par loïc » 19 mai 2014, 21:25

Voila je cherche a coder un chat qui :
-ne serait accessible que par les personnes inscrites et connectés
- qui afficherait le pseudo des personnes connectés l'heure et le message a la suite

Cependant j'ai une bonne base de chat: le message s'envoi l'heure s'affiche... mais j'ai un problème avec les pseudos !!!

Tout d'abord voici ma base de donnée:

Image

je m 'inscrit sur ma page d'inscription qui me semble fonctionnelle puisque les infos me sont envoyés dans la base de donnée le code est:
<?php

session_start();

$BDD = mysql_connect("localhost","root","");
mysql_select_db("database");

?>

<?php

// desactiver variables
$error = FALSE;
$registerOK = FALSE;
    //verification du passage par l inscription
    if(isset($_POST["register"])){
       //Verification champs completements remplis ou message d'erreur.
        if($_POST["login"] == NULL OR $_POST["pass"] == NULL OR $_POST["pass2"] == NULL OR $_POST["name"] == NULL OR $_POST["firstname"] == NULL OR $_POST["email"] == NULL){
            // On active la variable $error; le navigateur saura qu'il y'a une erreur à afficher.
            $error = TRUE;
            // message d erruer qu s'affichera
            $errorMSG = "Tout les champs doivent être remplis !";
                
        }
        
        // corespondance des 2 mdp
        elseif($_POST["pass"] == $_POST["pass2"]){
            // mdp et pseudo differents verification
            if($_POST["login"] != $_POST["pass"]){             
                // verification base de donnée si le pseudo n'est pas deja pris
                $sql = "SELECT login FROM users WHERE login = '".$_POST["login"]."' ";
                $sql = mysql_query($sql);
				//verfication email non pris
				$sql = "SELECT email FROM users WHERE email = '".$_POST["email"]."' ";
                $sql = mysql_query($sql);
				
            // decompte du nombre de lettres chiffres valeurs...
            $sql = mysql_num_rows($sql);
            if($sql == 0){
               // non exces de 30 caracteres du mdp
                  if(strlen($_POST["pass"] < 30)){
                  // non exces de 30 caractere du pseudo
                     if(strlen($_POST["login"] < 30)){
                     // Si le nom de compte et le mot de passe sont différent :
                        if($_POST["login"] != $_POST["pass"]){
                         // tout les criteres sont remplis : inscription dans la database
                           $sql = "INSERT INTO users (login,pass,name,firstname,email) VALUES ('".$_POST["login"]."','".$_POST["pass"]."','".$_POST["name"]."','".$_POST["firstname"]."','".$_POST["email"]."')";
                           $sql = mysql_query($sql);
                           
                     
                           if($sql){
                           
                              // activation de la variable $registerOK 
                              $registerOK = TRUE;
                              $registerMSG = "L'Inscription est réussie ! Vous êtes maintenant membre du site.";
                              
                              // stockage des mdp et pseudos
                              $_SESSION["login"] = $_POST["login"];
                              $_SESSION["pass"] = $_POST["pass"];
							  $_SESSION["name"] = $_POST["name"];
							  $_SESSION["firstname"] = $_POST["firstname"];
							  $_SESSION["email"] = $_POST["email"];
                              }
                           
                           //message erreur utilisateur non different
                           else{
                           $error = TRUE;
                           $errorMSG = "Erreur dans la requête SQL<br/>".$sql."<br/>";
                           }
                        }
                        
                        // affichage erreur nom de compte trop long
                        else{
                        $error = TRUE;
                        $errorMSG = "Votre nom compte ne doit pas dépasser <strong>30 caractères</strong> !";
                        $login = NULL;
                        $pass = $_POST["pass"];
                        }
					}
				}	
                     
					 
                  
                  
                  // tout comme mdp
                  else{
                  $error = TRUE;
                  $errorMSG = "Votre mot de passe ne doit pas dépasser <strong>30 caractères</strong> !";
                  $login = $_POST["login"];
                  $pass = NULL;
                  }
                }
               
               // message d erreur nom de compte ou mail deja utilisé
               else{
               $error = TRUE;
               $errorMSG = "Le nom de compte <strong>".$_POST["login"]."</strong> est déjà utilisé !";
               $login = NULL;
               $pass = $_POST["pass"];
               }
            
			
		
            }
            
            // modification necesaire du pseudo ou du mdp
            else{
              $error = TRUE;
              $errorMSG = "Le nom de compte et le mot de passe doivent êtres différents !";
               }
           }
      
      //  les deux mots de passes sont différents :      
      elseif($_POST["pass"] != $_POST["pass2"]){
      $error = TRUE;
      $errorMSG = "Les deux mots de passes sont différents !";
      $login = $_POST["login"];
      $pass = NULL;
      }
      
      //  si le nom de compte et le mot de passe ont la même valeur :
      elseif($_POST["login"] == $_POST["pass"]){
      $error = TRUE;
      $errorMSG = "Le nom de compte et le mot de passe doivent être différents !";

     }
    }

?>

<?php
mysql_close($BDD);
?>

<?php // affichage erreurs
 if($error == TRUE){ echo "<p align='center' style='color:red;'>".$errorMSG."</p>"; }
?>
<?php // ou affichage de l inscription s'etant deroué avec succes
 if($registerOK == TRUE){ echo "<p align='center' style='color:green;'><strong>".$registerMSG."</strong></p>"; }
 ?>

<html>
<head>
<title>Formulaire d'inscription</title>
</head>
<body>
<form action="index.php" method="post">
<table>
<tr>
<td><label for="login"><strong>Pseudo:</strong></label></td>
<td><input type="text" name="login" id="login"/></td>
</tr>
<tr>
<td><label for="pass"><strong>Mot de passe :</strong></label></td>
<td><input type="password" name="pass" id="pass"/></td>
</tr>
 <tr>
<td><label for="pass2"><strong>Confirmez le mot de passe :</strong></label></td>
<td><input type="password" name="pass2" id="pass2"/></td>
</tr>
<tr>
<td><label for="name"><strong>Nom</strong></label></td>
<td><input type="text" name="name" id="name"/></td>
</tr>
 <tr>
<td><label for="firstname"><strong>Prenom:</strong></label></td>
<td><input type="text" name="firstname" id="firstname"/></td>
</tr>
<tr>
<td><label for="email"><strong>E-Mail</strong></label></td>
 <td><input type="text" name="email" id="email"/></td>

</table>
<input type="submit" name="register" value="S'inscrire"/>
</form>
</body>
</html>
  
une fois inscrit je suis automatiquement considéré comme connecté ou je me connecte via cette page qui me semble également fonctionnelle :
<?php

session_start();

$BDD = mysql_connect("localhost","root","");  // Connexion à la base de données.
             mysql_select_db("database");       // Sélection de la base de données utilisée.
?>
<?php			 

// On met les variables utilisés du script PHP à FALSE.
$error = FALSE;

$connexionOK = FALSE;

// On regarde si l'utilisateur a bien utilisé le module de connexion pour traiter les données.
if(isset($_POST["connexion"])){
   
   // On regarde si tout les champs sont remplis. Sinon on lui affiche un message d'erreur.   
   if($_POST["login"] == NULL OR $_POST["pass"] == NULL){
      
      $error = TRUE;
      
      $errorMSG = "Vous devez remplir tout les champs !";
      
   }
   
   // Sinon si tout les champs sont remplis alors on regarde si le nom de compte rentré existe bien dans la base de données.
   else{
      
      $sql = "SELECT login FROM users WHERE login = '".$_POST["login"]."' ";
      
      $req = mysql_query($sql);
      
      // Si oui, on continue le script...      
      if($sql){
         
         // On sélectionne toute les données de l'utilisateur dans la base de données.   
         $sql = "SELECT * FROM users WHERE login = '".$_POST["login"]."' ";
      
         $req = mysql_query($sql);
         
         // Si la requête SQL c'est bien passé...      
         if($sql){
         
            // On récupère toute les données de l'utilisateur dans la base de données.
            $donnees = mysql_fetch_assoc($req);
            
            // Si le mot de passe entré à la même valeur que celui de la base de données, on l'autorise a se connecter...         
            if($_POST["pass"] == $donnees["pass"]){
            
               $connexionOK = TRUE;
               
               $connexionMSG = "Connexion au site réussie. Vous êtes désormais connecté !";
               
               $_SESSION["login"] = $_POST["login"];
               
               $_SESSION["pass"] = $_POST["pass"];
            
            }
            
            // Sinon on lui affiche un message d'erreur.
            else{
            
               $error = TRUE;
            
               $errorMSG = "Nom de compte ou mot de passe incorrect !";
            
            }
         
         }
         
        
      
      }
      
      
   
   }
   
}

mysql_close($BDD);

?>

<?php if(isset($_SESSION["login"]) AND isset($_SESSION["pass"])){
   
   echo "<p style='color:green'>Bienvenue <strong>".$_SESSION["login"]."</strong></p>";
   
} ?>

<?php if($error == TRUE){ echo "<p align='center' style='color:red'><strong>".$errorMSG."</strong></p>"; } ?>

<?php if($connexionOK == TRUE){ echo "<p align='center' style='color:green'><strong>".$connexionMSG."</strong></p>"; } ?>

<html>

   <head>
   
      <title>Création d'un formulaire de connexion en HTML</title>
      
   </head>
   
   <body>
      
      <h2>Connexion au site</h2>
   
      <form action="connexion.php" method="post">
         
         <table>
            
            <tr>
               
               <td><label for="login"><strong>Nom de compte</strong></label></td>
               <td><input type="text" name="login" id="login"/></td>
               
            </tr>
            
            <tr>
               
               <td><label for="pass"><strong>Mot de passe</strong></label></td>
               <td><input type="password" name="pass" id="pass"/></td>
               
            </tr>
            
         </table>
         
         <input type="submit" name="connexion" value="Se connecter"/>
      
      </form>
   
   </body>
   
</html>
le problème survient dans le chat le pseudo apparaît bien a coté de l'heure ou du message mais lorsque quelqu' un s'inscrit un message vide avec le login de la nouvelle personne et une heure fausse apparaît :

Image

et également lorsque je me connecte avec un autre pseudo tout les pseudos des messages sont modifiés:

Image

voila je demande de l'aide pour modifier ce code pour que le chat ne soit accessible qu'aux utilisateurs connectés !!! que le pseudo des personnes envoyant des messages s'affiche bref tout comme un vrai chat !!! et que personne ne puisse le faire buguer !!!!

Voici le code de mon chat:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<?php
header("Content-Type: text/html; charset=iso-8859-15"); //  header qui formate la page en texte
session_start(); 
$BDD = mysql_connect("localhost", "root", "");
mysql_select_db("database"); //debut
if(isset($_SESSION['login'])){ 
if (isset($_POST['message']))  // recu de donnees
 { 
  if(!empty($_POST['message'])) // valeur non vide
    {
    $sql = "INSERT INTO users (message,timestamp) VALUES ('".$_POST["message"]."','".time()."')";
    $sql = mysql_query($sql);
    }
} //fin
}
$reponse = mysql_query("SELECT * FROM users ORDER BY id DESC LIMIT 0,10");
while($val = mysql_fetch_array($reponse))
{
	echo '<p><strong>'.htmlentities(stripslashes($_SESSION['login'])).'</strong> 
	&agrave; '.date('H\:i\:s',$val['timestamp']).' :'.htmlentities(stripslashes($val['message']))
 .'</p>'; }
mysql_close(); // On ferme la connexion de notre base de données
?>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<!-- permettre a l'utilisateur d utiliser les caracteres particuliers francais -->
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15" />
<!-- contenu francais -->
<meta http-equiv="Content-Language" content="fr" />
<meta name="Copyright" content="Loïc&Chris" />
<meta name="Author" content="Loïc" />
<link rel="stylesheet" href="dd.css" type="text/css" /> 
<title>Match Chat</title>
<script rel="javascript" type="text/javascript"> href="chat.js"></script>
</head>
<body onload="refreshChat();">
<h2>Match Chat</h2>
<div id="database"></div>
<p>
<form action="chat.php" method="post">
Message : <br/><textarea name="message" rows="4" cols="20" id="message"></textarea><br/>
<input type="submit" value="Envoyer"/>
</form>
</p>
</body>
</html>
si quelqu 'un pouvait me donner de son temps pour le modifier pour qu'il soit fonctionnel et me donner des explications svp !

Merci beaucoup de votre aide et bonne soirée ...

Mille merci !!