Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

UN LOGICIEL DE CHAT TRES SIMPLE EN PHP/MYSQL


Information sur la source

Catégorie :Application Classé sous : chat, tchat, chan, simple, dialogue Niveau : Débutant Date de création : 23/08/2006 Date de mise à jour : 23/08/2006 16:59:10 Vu : 15 704

Note :
3,5 / 10 - par 4 personnes
3,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Description

Il s'agit ici d'un logiciel de chat tres basique qui enregistre la conversation dans une base MySQL

Il faut tout d'abord creer une table sous MySQL.

CREATE TABLE chat (
id INT NOT NULL AUTO_INCREMENT,
pseudo VARCHAR(30),
message VARCHAR(255),
heure VARCHAR (10),
PRIMARY KEY(id)
)

Ensuite, il suffit simplement de copier les deux pages suivantes dans un ficher texte. Le premier doit s'appeller index.php et le second affichpage.php
 

Source

  • //PAGE 1 : index.php
  • <?php
  • $server="nomserveur";
  • $username="nomuser";
  • $password="pwd";
  • $link=mysql_connect($server,$username,$password);
  • mysql_select_db('nomdb');
  • ?>
  • <?php
  • if (!(isset($_GET['pseudo']) and !empty($_GET['pseudo'])) {
  • echo "<html>
  • <body>
  • <form action = '$SERVER[PHP_SELF]' method = GET>
  • <b>PSEUDO </b><input type = 'text' name = 'pseudo' maxlength = 30><br>
  • <input type = submit value = 'valider'>
  • </form>
  • </body>
  • </html>";
  • exit();
  • }
  • if (isset($_POST['message']) and !empty($_POST['message'])) {
  • $query = "INSERT INTO chat (heure, pseudo, message) VALUES (CURRENT_TIME, '$_GET[pseudo]', '$_POST[message]')";
  • $result = mysql_query($query);
  • if ($result == 0) {
  • echo "erreur dans la base de donnees";
  • exit();
  • }
  • }
  • ?>
  • <html>
  • <head>
  • <title>chan</title>
  • </head>
  • <body>
  • <IFRAME ID = IFrame1 width = 80% height = "700" FRAMEBORDER = 1 SCROLLING = no SRC = "affichpage.php"></IFRAME>
  • <br>
  • <br>
  • <form name = "messa" action = "<?php echo "$SERVER[PHP_SELF]?pseudo=$_GET[pseudo]" ?>" method = 'POST'>
  • <input type = 'text' size = 100 name = 'message' maxlength = 255>
  • <br>
  • <input type = 'submit' value = 'envoyer' name = 'send'>
  • <SCRIPT langage = "javascript">
  • document.forms['messa'].elements['message'].focus();
  • </SCRIPT>
  • </body>
  • </html>
  • //PAGE 2 : affichpage.php
  • <?php
  • $server="nomserveur";
  • $username="nomuser";
  • $password="pwd";
  • $link=mysql_connect($server,$username,$password);
  • mysql_select_db('nomdb');
  • ?>
  • <html><meta Http-equiv="Refresh" Content="5"> //on peut modifier la vitesse de rafraichissement du chat en changeant la valeur du Content. Elle est en seconde.
  • <body>
  • <?php
  • $query = "(SELECT * FROM chat ORDER BY id DESC LIMIT 25) ORDER BY id ASC";
  • $result = mysql_query($query);
  • while ($list = mysql_fetch_array($result)) {
  • echo "<b>$list[heure] - </b>";
  • echo "<b><font color = 'blue'>$list[pseudo] : </font></b>";
  • echo "$list[message]<br>";
  • }
  • ?>
  • _
  • </body></html>
//PAGE 1 : index.php

<?php
	$server="nomserveur";
	$username="nomuser";
	$password="pwd";
	$link=mysql_connect($server,$username,$password);
	mysql_select_db('nomdb');
?>

<?php
	if (!(isset($_GET['pseudo']) and !empty($_GET['pseudo'])) {
		echo "<html>
			<body>
				<form action = '$SERVER[PHP_SELF]' method = GET>
					<b>PSEUDO </b><input type = 'text' name = 'pseudo' maxlength = 30><br>
					<input type = submit value = 'valider'>
				</form>
			</body>
		</html>";
		exit();
	}
	
	if (isset($_POST['message']) and !empty($_POST['message'])) {
		$query = "INSERT INTO chat (heure, pseudo, message) VALUES (CURRENT_TIME, '$_GET[pseudo]', '$_POST[message]')";
		$result = mysql_query($query);
		if ($result == 0) {
			echo "erreur dans la base de donnees";
			exit();
		}
	}
?>


<html>
	<head>
		<title>chan</title>
	</head>
	<body>
	<IFRAME ID = IFrame1 width = 80% height = "700" FRAMEBORDER = 1 SCROLLING = no SRC = "affichpage.php"></IFRAME>
	<br>
	<br>
	<form name = "messa" action = "<?php echo "$SERVER[PHP_SELF]?pseudo=$_GET[pseudo]" ?>" method = 'POST'>
	<input type = 'text' size = 100 name = 'message' maxlength = 255>
	<br>
	<input type = 'submit' value = 'envoyer' name = 'send'>

        <SCRIPT langage = "javascript">
		document.forms['messa'].elements['message'].focus();
	</SCRIPT>
	</body>
</html>

//PAGE 2 : affichpage.php

<?php
	$server="nomserveur";
	$username="nomuser";
	$password="pwd";
	$link=mysql_connect($server,$username,$password);
	mysql_select_db('nomdb');
?>

<html><meta Http-equiv="Refresh" Content="5"> //on peut modifier la vitesse de rafraichissement du chat en changeant la valeur du Content. Elle est en seconde.
<body>
	<?php
		$query = "(SELECT * FROM chat ORDER BY id DESC LIMIT 25) ORDER BY id ASC";
		$result = mysql_query($query);
		while ($list = mysql_fetch_array($result)) {
			echo "<b>$list[heure] - </b>";
			echo "<b><font color = 'blue'>$list[pseudo] : </font></b>";
			echo "$list[message]<br>";
		}
	?>
	_
</body></html>

Historique

23 août 2006 14:42:02 :
correction
23 août 2006 14:43:51 :
correction
23 août 2006 16:59:11 :
focus automatique du champ de message

Commentaires et avis

signaler à un administrateur
Commentaire de darkweaver87 le 23/08/2006 15:54:30

Salut,

Interessante ton idée mais je ne pense pas que ce soit de la discussion "instantanée".
En effet, je pense que pour tchatter à deux ça va ... mais à moins d'avoir une super connexion internet et un super serveur dés que tu vas dépasser la vingtaine d'utilisateur les messages ne vont pas fuser ...
Mais mon commentaire n'enlève rien à la qualité de ton travail ...

@+

signaler à un administrateur
Commentaire de kankrelune le 23/08/2006 16:07:08

Salut... chat simpliste mais qui doit fonctionner... je n'ais pas regarder le code en détail mais en survolant j'ais vu quelques ""erreurs""... .. .

remplace

if (isset($_POST['message']) and $_POST['message'] != NULL and $_POST['message'] != '')

par

if(isset($_POST['message']) and !empty($_POST['message']))

pour

action = "<?php echo "$SERVER[PHP_SELF]?pseudo=$_GET[pseudo]" ?>"

tu peux faire

action="<?php echo '?pseudo='.$_GET[pseudo] ?>"

cependant le systeme de pseudo est interessant mais d'une part tu risque d'être enmerdé si plusieurs personnes on le même pseudo... d'autre part mieux vaut passer par post que par get... .. .

<input type="hidden" name="pseudo" value="<?php echo $_GET[pseudo] ?>" />

Sinon stocker en base de données c'est bien mais cela demande une gestion finement agencés sinon tu vas plomber ton serveur... qui plus est je n'ais vu nul part de nettoyage de la table... comment tu fais au bout de 15 jours de chat avec 10 personnes... ta table sera inutilement remplie... .. .

Pour finir les meta refresh c'est bien mais je serais toi je couplerais ça à un rafraichissement javascript (un simple setTimeout("window.location.href = '?';",5000); suffit)

Sinon c'est pas trop mal... ça manque un peu d'options mais c'est le cout de la simplicitée... .. . ;o)

@ tchaOo°

signaler à un administrateur
Commentaire de kankrelune le 23/08/2006 16:17:32

Oups erreur...

<input type="hidden" name="pseudo" value="<?php echo $_POST['pseudo'] ?>" />

et non pas

<input type="hidden" name="pseudo" value="<?php echo $_GET[pseudo] ?>" />

Je rajouterais un point crucial qui m'avait échapé au premier coup d'oeil... la sécurité... ton chat est hautement sensible aux injections sql et attaques xss...

injection sql... si je poste comme message

'; DROP TABLE chat #

Tu n'aura plus de table chat... et ce n'est qu'un exemple... contre ça utilise mysql_real_escape_string()

attaque xss... si je poste comme message <table><tr><td> ça fera sauter la présentation de ton site... pire si je fais <script type="text/javascript">window.location.href = 'www.monsite.ext/monchat.php';</script> tes membres seront redirigé sur le chat de mon site... contre ça utilise htmlentities()... .. .

pour finir il faut toujours encadrer le nom de l'index d'un tableau par de quotes (simples ou doubles)

$_GET['pseudo'] => bon
$_GET[pseudo] => mauvais

met error_reporting(E_ALL); dans tes script quand tu code ou alors met le dans ton php.ini (ligne error_reporting)

^_^

@ tchaOo°

signaler à un administrateur
Commentaire de Barsy le 23/08/2006 16:51:39

Il ne s'agit ici que d'un chat pour utiliser en reseau local, et on est jamais plus de trois ou quatre dessus a la fois. Donc pour le systeme de pseudo, j'ai decide de faire simple sans m'embeter a faire des sessions. Et puis je connais les autres utilisateurs et je sais qu'ils ont un pseudo a eux.

Pour ce qui est de l'effacement de la table, un simple "DELETE FROM nomtable" lorsque ca commence a ramer un peu trop est suffisant.

Et enfin, j'ai prefere le GET au POST car il permet de se connecter directement au chat sans passer par la fenetre qui demande le pseudo a chaque fois juste en rentrant l'adresse.

Par contre ce qu'il manque, c'est un focus sur la zone de texte. Je vais le rajouter.

signaler à un administrateur
Commentaire de davwart le 24/08/2006 19:24:34

j'aimerai bien savoir pourquoi certain préconise le POST au GET ? pour une quelconque sécurité?
je vois pas....

signaler à un administrateur
Commentaire de med5 le 25/08/2006 09:21:18

"j'aimerai bien savoir pourquoi certain préconise le POST au GET ? pour une quelconque sécurité?
je vois pas.... "

Un GET il suffit de modifier l'adresse pour changer la valeur. ^^

signaler à un administrateur
Commentaire de le_m3ellem le 25/08/2006 21:10:19

Bein !
je trouve pas que c'est aussi intérêssant que quand j'ai "logiciel de chat" ! Je vois pas ou est ce logiciel ou ce chat dont on nous parle !
Un chat ou une causette mérite bien une page pour saisir le pseudo et une liste de connectés et et et ....
bonne continuité
4/10

signaler à un administrateur
Commentaire de kankrelune le 26/08/2006 20:28:13

@ davwart... croire que les données transmises via post sont plus sécurisés que celles transmises via get serait une erreur... mais comme le dit med5 ça évite juste de changer des valeurs via l'url... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de Jayadeva le 28/05/2007 19:05:34

Ce genre de code sert a tuer le serveur sur lequel il tourne. PHP n'est pas fait pour servir de "tchat". A la limite une tribune libre ... Et MySQL non plus! (sauf si tu sais ce que tu fait, mais bon ...)

Imagine que t'a 15 personnes qui écrivent un message toute les 3 secondes. Combien ca te fait de requêtes a MySQL Par minute ?

Bref, pense a t'optimiser et a utiliser des systèmes déjà présent sur le net comme l'"IRC" :))

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

boite de dialogue simple style confirm() [ par LaTatadu91 ] salut je voudrais savoir si il était possible de créer des boites de dialogues simple avec deux boutons OK et ANNULER en phpcar j'ai vu que en javascr Chat en php [ par Ramboul ] Salut,Je cherche un tchat en php pour mon site car j'ai déja un tchat mais il requiert d'avoir l'applet java.J'aimerai qu'il redeirige vers irc.quaken SIMPLE CHAT PROGRAM securisé [ par sousou71 ] Bonjour, Ca serait vraiment sympa si qlq pouvait m'envoyer un program pour mettre en place un chat AVEC TRANSMISSION CHIFFREE. J utilise apache avec URL rewriting simple problème [ par bricethenetman ] Bonjour, je viens de trouver cette source http://www.phpcs.com/code.aspx?ID=33296&nbsp;mais je n'arrive pas &#224; la configurer (je d&#233;bute en ur rafraichire une table et deleter un element a la fois [ par speedylol ] bonjour j'ai besoins de votre aide je recherche une solutions pour faire defiler les message entre membre et de deleter un element a la&nbsp; fois&nbs boite de dialogie et fonction PHP [ par steinia ] J'ai un souci, je suis un peu novice en matiere de php... En fait,j'aimerais creer une boite de dialogue en cliquant sur le bouton OK de mon formulair Pb avec un chatbox [ par newbieflag ] Voici le chatbox que j'ai emprunt&#233; sur une source...seul probl&#232;me les messages s'effacent au bout de quelques heures...comment emp&#234;cher Panier simple pour phototheque [ par diaph ] Bonjour,J'ai un site phototheque en php avec recherche d'images sur base de donn&#233;e. Je ne connais pas grand chose en php, sinon d'adapter des scr Galerie le plus simple possible! [ par virgile11 ] Bonjour, je suis incapable de programmer en php et je cherche un fichier php qui, plac&#233; dans un dossier contenant des images nomm&#233;es 001.jpg Suppression de ligne dans un fichier [ par raven44 ] Chose tr&#232;s simple, j'ai dans un fichier texte des lignes vides sans rien et je voudrai les supprimer, ca a l'air simple quand on en parle mais le


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,686 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.