Aller au menu - Aller au contenu
> Le Site du Zéro > Les forums > Site Web > PHP > TP de m@teo > Lecture du sujet

TP de m@teo

Le minichat

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page Précédente  1  2 
Hors ligne Ô-le-zéro ! # Posté le 28/06/2008 à 18:58:58
Bzzvroumz ....
Avatar

Reprise du dernier message de la page précédente :
Combien as-tu de messages dans ta base de données ?

Parce que tu ne marque pas de prendre seulement 20 messages mais tous.
Dès qu'on rajoute un message tu supprime le plus ancien, pas tous les messages pour qu'il ne t'en reste plus que 20. Nuance ! ^^

Essaie de supprimer 5 messages de ta base de données pour voir ... ;)

Mon site : Quesond
--> site d'annonces gratuites, simple, rapide, efficace.
Si vous pouvez me dire ce que vous en pensez ce serait sympa, voire même y poster des annonces si vous en avez
;)
Merci
forum correspondant sur le site du zéro
 
Hors ligne Renesis-3 # Posté le 28/06/2008 à 19:12:26
Quand on veut, on peut.
Avatar

En fait, ça n'efface même pas le premier.
 
Hors ligne Ô-le-zéro ! # Posté le 29/06/2008 à 12:00:19
Bzzvroumz ....
Avatar

o_O

Mon site : Quesond
--> site d'annonces gratuites, simple, rapide, efficace.
Si vous pouvez me dire ce que vous en pensez ce serait sympa, voire même y poster des annonces si vous en avez
;)
Merci
forum correspondant sur le site du zéro
 
Hors ligne Renesis-3 # Posté le 02/07/2008 à 13:24:14
Quand on veut, on peut.
Avatar

UP

Alors en fait, je "travail" sur plusieurs ordi, j'ai donc mis mes fichiers dans une clée usb, etc ..., et maintenant je suis sous Ubuntu. Normalement ça devrait rien changer (sauf la base de donnée, mais elle a le même nom), sauf que je me retrouve avec 3 nouvelles erreurs :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/renesis-3/public_html/tests/minichat.php on line 46

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/renesis-3/public_html/tests/minichat.php on line 50

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/renesis-3/public_html/tests/minichat.php on line 64

A chaque fois avec un myqsl_fetch_array.

Voici le code concerné (La première ligne est la 45ème dans mon code) :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Si il y a plus de 20 messages, on surpime l'ancien en trop
$retour = mysql_query("SELECT COUNT(*) AS nbr_entree FROM minichat");
$donnee = mysql_fetch_array($retour);
$nbr_entree = $donnee[$nbr_entree];

$retour_id = mysql_query("SELECT id FROM minichat LIMIT 0,1");
$donnee_id = mysql_fetch_array($retour_id);
$premier_id = $donnee_id['id'];

if ($nbr_entree >= 20)
   {
   mysql_query("DELETE FROM minichat WHERE id='premier_id'");
   }


// -------
   
$reponse = mysql_query("SELECT * FROM minichat ORDER BY id DESC") ;


while ($donnee_minichat = mysql_fetch_array($reponse))
   {
   
   echo '<p><em>Message n°'.$donnee_minichat[id].'</em> <strong> '.$donnee_minichat[pseudo].' </strong> '.$donnee_minichat[message].'</p>';
   
   }
   
?>
 
Hors ligne Thulium # Posté le 02/07/2008 à 13:58:05
le p'tit chat !!!
Avatar

Ville : Les ponts-de-cé
Pays : France métropolitaine

cette erreur signifie que la ressource mysql n'est pas bonne, donc que ta requête est foireuse. Essay de mettre ceci après tes requêtes : mysql_query("...") or die(mysql_error()); pour trauqer les erreur.

"Keyboard not found, press F1 to resume."
 
Hors ligne Renesis-3 # Posté le 02/07/2008 à 14:12:28
Quand on veut, on peut.
Avatar

"No database selected", en fait j'ai mis un 's' à la base test dans code alors qu'il n'y en avait pas. C'est bon ça marche maintenant merci.

Par contre, je n'arrive toujours pas à effacer mon message en trop. Ma base de donnée était vide, et elle a 21 msg maintenant alors qu'il ne devrait en avoir que 20.
 
Hors ligne Renesis-3 # Posté le 03/07/2008 à 14:49:33
Quand on veut, on peut.
Avatar

Hors ligne Renesis-3 # Posté le 30/07/2008 à 15:58:58
Quand on veut, on peut.
Avatar

J'ai trouvé le problème, en fait ma fonction ne compte pas les messages, j'ai rajouté un "echo $nbr_dentree;", et il n'affiche rien, donc le problème se situe au niveau du "SELECT COUNT" :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

//-------

// Si il y a plus de 20 messages, on surpime l'ancien en trop
$retour = mysql_query("SELECT COUNT(*) AS nbr_entree FROM minichat") or die(mysql_error());
$donnee = mysql_fetch_array($retour)or die(mysql_error());
$nbr_entree = $donnee[$nbr_entree];

echo '<br />Il y a '.$nbr_entree.' messages d\'affichés <br />';


$retour_id = mysql_query("SELECT id FROM minichat LIMIT 0,1") or die(mysql_error());
$donnee_id = mysql_fetch_array($retour_id)or die(mysql_error());
$premier_id = $donnee_id['id'];

if ($nbr_entree >= 20)
   {
   mysql_query("DELETE FROM minichat WHERE id='premier_id'") or die(mysql_error());
   }


// ----------

?>


Mais où est l'erreur ?


PS : Oui je viens de reprendre mon apprentissage après quelques mois :p
Édité le 01/08/2008 à 16:41:45 par Renesis-3
 
Hors ligne Ô-le-zéro ! # Posté le 31/07/2008 à 13:51:24
Bzzvroumz ....
Avatar

Ne marque pas "$nbr_entree" mais plutôt "$donnee['nbr_entree']".
Fais attention à ce que tu marque et ne vas pas trop vite !
;)

EDIT : Escuse pas vu :-° .
Édité le 31/07/2008 à 19:44:15 par Ô-le-zéro !

Mon site : Quesond
--> site d'annonces gratuites, simple, rapide, efficace.
Si vous pouvez me dire ce que vous en pensez ce serait sympa, voire même y poster des annonces si vous en avez
;)
Merci
forum correspondant sur le site du zéro
 
Hors ligne Renesis-3 # Posté le 31/07/2008 à 14:15:35
Quand on veut, on peut.
Avatar

Mais j'ai transformé "$donnee['nbr_entree']" en "$nbr_entree" la ligne suivante normalement, non ?

Je vais quand même essayé. ;)

EDIT : Marche pas non plus. :(
Édité le 31/07/2008 à 14:18:55 par Renesis-3
 
Hors ligne Ô-le-zéro ! # Posté le 31/07/2008 à 19:47:08
Bzzvroumz ....
Avatar

Ne mets pas "$donnee[$nbr_entree]" mais "$donnee['nbr_entree']" !
(Je crois que tu as déjà fais cette faute plus haut :-° .)

Mon site : Quesond
--> site d'annonces gratuites, simple, rapide, efficace.
Si vous pouvez me dire ce que vous en pensez ce serait sympa, voire même y poster des annonces si vous en avez
;)
Merci
forum correspondant sur le site du zéro
 
Hors ligne Renesis-3 # Posté le 31/07/2008 à 19:53:12
Quand on veut, on peut.
Avatar

Euh non, j'ai aussi essayé avec les apostrophes, mais la j'ai carrément une erreur MySQL.
 
Hors ligne Ô-le-zéro ! # Posté le 01/08/2008 à 16:30:18
Bzzvroumz ....
Avatar

Code : PHP
1
2
3
4
5
<?php
$retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM minichat");
$donnees = mysql_fetch_array($retour);
echo $donnees['nbre_entrees'] ;
?>


nbr_entree --> nbre_entrees

Mon site : Quesond
--> site d'annonces gratuites, simple, rapide, efficace.
Si vous pouvez me dire ce que vous en pensez ce serait sympa, voire même y poster des annonces si vous en avez
;)
Merci
forum correspondant sur le site du zéro
 
Hors ligne Renesis-3 # Posté le 01/08/2008 à 16:48:18
Quand on veut, on peut.
Avatar

Citation : Ô-le-zéro !
Code : PHP
1
2
3
4
5
<?php
$retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM minichat");
$donnees = mysql_fetch_array($retour);
echo $donnees['nbre_entrees'] ;
?>


nbr_entree --> nbre_entrees

Ca marche pas non plus. (Mais là on a juste changé le nom en fait, le problème est ailleurs, mais où ?!)
Je vais relire le tuto de m@teo, on sait jamais. :-°

PS : Tu as déjà testé le code chez toi ?

EDIT : J'ai remplacé mon code, par celui du tuto de m@teo :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//-------

<?php

// Si il y a plus de 20 messages, on surpime l'ancien en trop
$retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM minichat");
$donnees = mysql_fetch_array($retour);

echo "<br />"
?>

Il y a <?php echo $donnees['nbre_entrees']; ?> jeux vidéo en vente !

<?php

$retour_id = mysql_query("SELECT id FROM minichat LIMIT 0,1") or die(mysql_error());
$donnee_id = mysql_fetch_array($retour_id)or die(mysql_error());
$premier_id = $donnee_id['id'];

if ($nbr_entree >= 20)
   {
   mysql_query("DELETE FROM minichat WHERE id='premier_id'") or die(mysql_error());
   }

?>

// ----------


Comme par hasard ça marche (sauf la suppression du message).

Où est mon erreur maintenant. :p
Édité le 01/08/2008 à 16:56:35 par Renesis-3
 
Hors ligne Ô-le-zéro ! # Posté le 01/08/2008 à 17:23:56
Bzzvroumz ....
Avatar

T'as essayé de mettre mon code à la place du tien ?

Mon site : Quesond
--> site d'annonces gratuites, simple, rapide, efficace.
Si vous pouvez me dire ce que vous en pensez ce serait sympa, voire même y poster des annonces si vous en avez
;)
Merci
forum correspondant sur le site du zéro
 
Hors ligne Renesis-3 # Posté le 01/08/2008 à 17:41:58
Quand on veut, on peut.
Avatar

Citation : Ô-le-zéro !
T'as essayé de mettre mon code à la place du tien ?

Oui j'ai essayé, mais ça na pas marché.
Sur ce coup là je comprends rien. :-S
 
Hors ligne Ô-le-zéro ! # Posté le 02/08/2008 à 11:10:01
Bzzvroumz ....
Avatar

Je séche ... :(

Mon site : Quesond
--> site d'annonces gratuites, simple, rapide, efficace.
Si vous pouvez me dire ce que vous en pensez ce serait sympa, voire même y poster des annonces si vous en avez
;)
Merci
forum correspondant sur le site du zéro
 
Hors ligne Renesis-3 # Posté le 02/08/2008 à 11:11:05
Quand on veut, on peut.
Avatar

Tu l'as essayé le code ou pas ?
 
Hors ligne Ô-le-zéro ! # Posté le 02/08/2008 à 11:12:22
Bzzvroumz ....
Avatar

le tien ?
Édité le 02/08/2008 à 11:12:33 par Ô-le-zéro !

Mon site : Quesond
--> site d'annonces gratuites, simple, rapide, efficace.
Si vous pouvez me dire ce que vous en pensez ce serait sympa, voire même y poster des annonces si vous en avez
;)
Merci
forum correspondant sur le site du zéro
 
Hors ligne Renesis-3 # Posté le 02/08/2008 à 11:17:29
Quand on veut, on peut.
Avatar

Hors ligne Ô-le-zéro ! # Posté le 02/08/2008 à 15:57:34
Bzzvroumz ....
Avatar

Non parce qu'il faudrait que je crée un fichier PHP, un dossier dans 'www' de Wamp, un base de donnée et une table et pour finir relire tout le TP pour ne rien oublier ...
Comprend-moi ^^ !

Mon site : Quesond
--> site d'annonces gratuites, simple, rapide, efficace.
Si vous pouvez me dire ce que vous en pensez ce serait sympa, voire même y poster des annonces si vous en avez
;)
Merci
forum correspondant sur le site du zéro
 
Hors ligne Renesis-3 # Posté le 02/08/2008 à 16:02:54
Quand on veut, on peut.
Avatar

C'était juste pour savoir, je comprend bien. :p
 
Hors ligne Renesis-3 # Posté le 03/08/2008 à 22:39:31
Quand on veut, on peut.
Avatar

Hors ligne maniacs # Posté le 03/08/2008 à 22:47:06
"Droit au But"
Avatar

Ville : Mitry mory
Pays : France métropolitaine
études : Paris 7 Denis Diderot

salut

je me permet de me joindre à ce topic car je viens de débuter en php depuis début juillet et je voulais trouver un moyen d'effacer le message le plus vieux, je pensais naivement que lorsque on effaçait l'id=1 tous les autres id diminuaient de 1 (là on peut voir que je suis bien unZéro !!!).

Enfin bref, je vais tacher cette semaine de coder le mini chat de mon côté et voir si ça fonctionne et si je peux t'aider.

Édité le 03/08/2008 à 22:49:09 par maniacs

<<< Droit au But >>>

Franck le Maniacs
 
Hors ligne Renesis-3 # Posté le 04/08/2008 à 15:43:32
Quand on veut, on peut.
Avatar

Hors ligne maniacs # Posté le 06/08/2008 à 22:19:44
"Droit au But"
Avatar

Ville : Mitry mory
Pays : France métropolitaine
études : Paris 7 Denis Diderot

Salut

après 2 jours de recherche, je viens de trouver à l'instant comment supprimer le message le plus ancien, et éviter les doublons quand on recharge la page.

le seul problème qui me reste se situe au niveau de la ligne 12:
Code : PHP
1
$message = nl2br($message);


en effet, quand je rentre un retour à la ligne dans le message, je n'obtiens pas de retour à la ligne quand on lit le message. ==> si vous avez une idée?

sinon le reste est bon, faudrait peut etre que je modifie le nom des variables.... puis il me restera à ajouter des smiley et bbcode puis enfin attaquer le design

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
<?php
if (isset($_POST['pseudo']) AND isset($_POST['message'])) // si les variables existent
{
	if($_POST['pseudo']!= NULL AND $_POST['pseudo']!= NULL) // si les variables ne sont pas vides
	{
		@mysql_connect("localhost","root","") or die(mysql_error()); // connexion à mysql
		@mysql_select_db("mabase") or die(mysql_error()); // connexion à la base
			
		// on sécurise les entrées visiteurs
		$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
		$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
		$message = nl2br($message);
						
		//on cherche la valeur du dernier message enregistrée
		$reponse = mysql_query("SELECT message FROM le_pub ORDER BY idpub DESC LIMIT 0,1") 
						or die(mysql_error());
		$donnees = mysql_fetch_array($reponse);
		if($donnees['message']!= $message) //si le message n'est pas le même que le dernier enregistré
			{
				// on enregistre les données
		mysql_query("INSERT INTO le_pub(idpub, pseudo, timestamp, message) VALUES ('', '$pseudo', '".time()."', '$message')") 
						or die(mysql_error());
			}
	}
							
	$retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM le_pub"); // on compte le nb d'enregistrement
	$donnees_nombre_entrees = mysql_fetch_array($retour);
		
	if ($donnees_nombre_entrees['nbre_entrees'] > 100)
	{
	   $retour_plus_ancien_idpub = mysql_query("SELECT idpub FROM le_pub LIMIT 0, 1"); // selection de idpub de l'enregistrement le plus ancien
		$donnees_plus_ancien_idpub = mysql_fetch_array($retour_plus_ancien_idpub); 
		$nombre_idpub = $donnees_plus_ancien_idpub['idpub'];
		mysql_query("DELETE FROM le_pub WHERE idpub= '$nombre_idpub' ");
	}
		
	 // déconnexion de mysql
	mysql_close(); 		
}
?>
Édité le 06/08/2008 à 23:02:46 par maniacs

<<< Droit au But >>>

Franck le Maniacs
 
Hors ligne M.Net # Posté le 06/08/2008 à 22:44:09
Avatar

DESC veut dire en ordre décroissant. Mais tu dois lui indiquer quesque tu veux qui soit en ordre décroissant. DESC doit être précéder de ORDER BY et du champ où sera l'ordre.
En gros, ton code devrait ressembler à ça :
Code : SQL
1
$reponse = mysql_query("SELECT * FROM minichat ORDER BY id DESC") ;
Édité le 06/08/2008 à 22:46:02 par M.Net

Google
 
Hors ligne maniacs # Posté le 11/08/2008 à 18:46:15
"Droit au But"
Avatar

Ville : Mitry mory
Pays : France métropolitaine
études : Paris 7 Denis Diderot

Voilà, je viens de terminer le mini-chat avec plusieurs ajout, j'ai pu mettre en place le bbcode et des smileys donc Renesis-3 si tu souhaites une modeste petite aide, n'hésites pas ;)

<<< Droit au But >>>

Franck le Maniacs
 
Hors ligne Renesis-3 # Posté le 11/08/2008 à 18:51:09
Quand on veut, on peut.
Avatar

Ba pour l'instant je suis en vac', donc j'ai pas ce qu'il faut, ça te dérange si je t'envoie un MP dans 3-4 jours ? :)
 
Hors ligne luc@s # Posté le 11/08/2008 à 22:18:00
PPHP
Avatar

Citation : Renesis-3

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php

mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("test"); // Sélection de la base mateo21
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Mini chat</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	   <meta http-equiv="pragma" content="no-cache" />
   </head>
   
   <body>
<form action="test.php" method="post">
<p><label>Votre pseudo : </ label><input type="text" name="pseudo" /></p>
<p><label>Votre message : </label><input type="text" name="message"/></p>
<input type="submit" value="Envoyer" />
</form>

<?php

mysql_query("INSERT INTO minichat VALUES ('', '$_POST[pseudo]', '$_POST[message]')");

$reponse = mysql_query("SELECT * FROM minichat DESC") ;



while ($donnee_minichat = mysql_fetch_array($reponse))
   {
   
   echo '<p><span> '.$donnee_minichat[pseudo].' </span> '.$donnee_minichat[message].'</p>';
   
   }
   
?>
   </body>
<?php
mysql_close(); // Déconnexion de MySQL
?>



Image utilisateur

Bon, on reprend tout à Zéro car ce code fait mal aux yeux, ne marche pas...

1-Ligne 23 : Injection SQL (utilise mysql_real_escape_string), variables non interprétées car entre apostrophes, et clefs de $_POST considérées comme des constantes...

Code : PHP
1
2
3
4
5
<?php
if(!rtfm()) {
    exit();
}
?>
 
Hors ligne maniacs # Posté le 12/08/2008 à 20:58:47
"Droit au But"
Avatar

Ville : Mitry mory
Pays : France métropolitaine
études : Paris 7 Denis Diderot

Citation : Renesis-3
Ba pour l'instant je suis en vac', donc j'ai pas ce qu'il faut, ça te dérange si je t'envoie un MP dans 3-4 jours ? :)


pas de pb, j'en profite pour lire les erreurs trouvées par les autres membres ;)

<<< Droit au But >>>

Franck le Maniacs
 

Retour au forum "PHP" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx