debutant php

debutant php - PHP - Programmation

Marsh Posté le 11-09-2005 à 13:55:13    

bonjour
 
je debute complet en php, et pour commencer j'utilise le tuto du siteduzero (pas de sarcasme, tres bien fait je trouve...)
 
mais j'ai un souci sur le script de minichat
celui que j'avais fait ne marchais pas, il inscrivais rien dans la BDD, donc j'ai tester avec le leur, et toujours rien...
j'ai bien acces en lecture, mais pas en ecriture visiblement, et cela sur mon script ou le leur (qui se ressemble beaucoup) :(
 
pour info le code :  

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
  3.     <head>
  4.         <title>Mini-chat</title>
  5.         <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6.     </head>
  7.     <style type="text/css">
  8.     form
  9.     {
  10.     text-align:center;
  11.     }
  12.     </style>
  13.     <body>
  14.        
  15.        
  16. <?
  17. if (isset($_POST['pseudo']) AND isset($_POST['message'])) // Si les variables existent
  18. {
  19.     if ($_POST['pseudo'] != NULL AND $_POST['message'] != NULL) // Si on a quelque chose ? enregistrer
  20.     {
  21.         // D'abord, on se connecte ? MySQL
  22.         mysql_connect("localhost", "XXX", "XXXX" );
  23.         mysql_select_db("slac" );
  24.    
  25.         // On utilise la fonction PHP htmlentities pour ?viter d'enregistrer du code HTML dans la table     
  26.         $message = htmlentities ($_POST['message']);
  27.         $nom = htmlentities ($_POST['nom']);
  28.    
  29.         // Ensuite on enregistre le message
  30.         mysql_query("INSERT INTO chat VALUES('', '$nom', '$message')" );
  31.    
  32.         // On se d?connecte de MySQL
  33.         mysql_close();
  34.     }
  35. }
  36. // Que l'on ait enregistr? des donn?es ou pas...
  37. // On affiche le formulaire puis les 10 derniers messages
  38. // Tout d'abord le formulaire :
  39. ?>
  40. <form action="test2.php" method="post">
  41. <p>
  42. Pseudo : <input type="text" name="nom" /><br />
  43. Message :  <input type="text" name="message" /><br />
  44. <input type="submit" value="Envoyer" />
  45. </p>
  46. </form>
  47. <?
  48. // Maintenant on doit r?cup?rer les 10 derni?res entr?es de la table
  49. // On se connecte d'abord ? MySQL :
  50. mysql_connect("localhost", "XXXX", "XXXX" );
  51. mysql_select_db("slac" );
  52. // On utilise la requ?te suivante pour r?cup?rer les 10 derniers messages :
  53. $reponse = mysql_query("SELECT * FROM chat ORDER BY ID DESC LIMIT 0,10" );
  54. // On se d?connecte de MySQL
  55. mysql_close();
  56. // Puis on fait une boucle pour afficher tous les r?sultats :
  57. while ($donnees = mysql_fetch_array($reponse) )
  58. {
  59. ?>
  60. <p><strong><? echo $donnees['nom']; ?></strong> : <? echo $donnees['message']; ?></p>
  61. <?
  62. }
  63. // Fin de la boucle, le script est termin? !
  64. ?>
  65.        
  66.        
  67.     </body>
  68. </html>


 
et l'emplacement de la page :
http://kaillou.no-ip.info/essaiphp/test.php
 
 
la page est hebergé sur mon serveur@home, sous debian, avec mysql, php4 et apache
 
 
merci ;)


Message édité par kaillou38 le 11-09-2005 à 20:06:27

---------------
ras
Reply

Marsh Posté le 11-09-2005 à 13:55:13   

Reply

Marsh Posté le 11-09-2005 à 14:39:39    

$_POST['pseudo'] n'existe pas, forcément. :spamafote:
 
C'est $_POST['nom'] qu'il faut tester.
 
(Y'a p-e d'autres erreurs, mais déjà celle-là.)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 11-09-2005 à 16:00:08    

effectivement erreur dans le changement du script, mais apres correction ca ne marche toujours pas, et mon script ne comportait pas cette erreur...


---------------
ras
Reply

Marsh Posté le 11-09-2005 à 16:03:07    

Sinon, y a quelques trucs pas net ailleurs, y a aucun intérêt à faire un isset PUIS à vérifier si la valeur n'est pas NULL puisque NULL ne passe pas le isset, il serait peut être plus pertinent de faire un trim des deux chaines et de vérifier si elles ne sont pas vides :)

Reply

Marsh Posté le 11-09-2005 à 16:13:37    

pour voir j'ai virer le deuxieme test, ca donne toujours le meme resultat :(
 
ca peux pas venir de droit en ecriture sur la BDD?
pourtant l'utilisateur qui se connecte a tous les droits (je sais pas si c'est tres securit, je m'en occuperai plus tard


---------------
ras
Reply

Marsh Posté le 11-09-2005 à 16:21:32    

mmmhhh, vire le mysql_close qui traine ligne 70 pour voir

Reply

Marsh Posté le 11-09-2005 à 16:27:37    

tu ferme pas la session toi?
 
mais l'affichage des precedants messages marchent...
et je pense que le code marche, ca vient d'un tuto  
 
mais meme apres ce que tu m'as dit, ca ne marche pas :(


---------------
ras
Reply

Marsh Posté le 11-09-2005 à 16:28:56    

Refait voir ton script en l'état.
 
Edite ton message au fur et à mesure paskeu sinon...


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 11-09-2005 à 16:29:33    

T'as essayé de faire rien qu'une page PHP à part pour mettre juste une ligne dans ta base, rien qu'histoire de voir si ça fonctionne ça au moins ?
Genre juste une connexion à la base, ajout d'une ligne toute bête, et fermeture de la base.

Reply

Marsh Posté le 11-09-2005 à 16:33:59    

kaillou38 a écrit :

tu ferme pas la session toi?
 
mais l'affichage des precedants messages marchent...
et je pense que le code marche, ca vient d'un tuto  
 
mais meme apres ce que tu m'as dit, ca ne marche pas :(


 
Si, mais j'ai jamais eu dans l'idée de la fermer avant de m'en être servi :D
 
Mais avec les remarques de Silfried et vu que tu ne signales pas de messages d'erreurs, on pense aux raisons les plus idiotes :)
 
//edit : ah bah, ça fonctionne maintenant on dirait...


Message édité par naceroth le 11-09-2005 à 16:34:58
Reply

Marsh Posté le 11-09-2005 à 16:33:59   

Reply

Marsh Posté le 11-09-2005 à 16:35:01    

c'est bon, c'etait un probleme dans la definition de la base
 
je serais plus attentif la dessus maintenant...


Message édité par kaillou38 le 11-09-2005 à 16:35:13

---------------
ras
Reply

Marsh Posté le 11-09-2005 à 16:42:59    

petite question :
 
est ce qu'il vaut mieux ouvrir puis refermer la connection a la base a chaque fois que l'on s'en sert, ou on l'ouvre a la permiere utilisation et on la referme apres la derniere?


---------------
ras
Reply

Marsh Posté le 11-09-2005 à 19:05:29    

Je doute que la réouvrir à chaque fois soit génial. [:figti]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 11-09-2005 à 19:07:08    

kaillou38 a écrit :

petite question :
 
est ce qu'il vaut mieux ouvrir puis refermer la connection a la base a chaque fois que l'on s'en sert, ou on l'ouvre a la permiere utilisation et on la referme apres la derniere?


 
2° solution, mais attention si tu as des includes.
 
Pour ma part, je préfère définir des fonctions elles-mêmes contenues dans une page fonctions.php que j'inclue. Ainsi, tu es sûr de ne jamais oublier d'ouvrir ou de fermer tes appels.
 
Petite remarque : L'utilisation d'une BDD comme mysql est bien souvent injustifiée...  

Reply

Marsh Posté le 11-09-2005 à 20:11:09    

Hermes le Messager a écrit :

Petite remarque : L'utilisation d'une BDD comme mysql est bien souvent injustifiée...


 
si tu pouvias developper un peu, je t'en serais gré...
 
 
 
sinon, je voudrai eviter de pouvoir poster en double...
 
le probleme, c'est que ca marche pas...
 

Code :
  1. $retour = mysql_query("SELECT message FROM chat WHERE id=(SELECT MAX(id) FROM chat)" )
  2. $dernier = mysql_fetch_array($retour);
  3. echo "$dernier['id']";


 
ben ca plante :(
 
je dois pas avoir compris le bazarre sur le fetch array je pense...


---------------
ras
Reply

Marsh Posté le 12-09-2005 à 10:53:20    

Je ne suis pas une bête en PHP non plus, mais heu...
 
"SELECT message FROM"  
echo $dernier['id'] ;
 
Si tu lui dis d'aller chercher les messages pour lesquels l'id est max... ben il va chercher les messages, alors lui demande pas d'afficher l'id !
 
Si tu tapes echo $dernier['message'] ; là je pense que ça devrait te renvoyer le message, non ?

Reply

Marsh Posté le 12-09-2005 à 10:57:59    

En fait :
 
$reponse = mysql_query("SELECT * FROM chat ORDER BY ID DESC LIMIT 0,10" );
 
Ca veut dire qu'il va sélectionner TOUT (l'étoile veut dire ça) dans chat, ordonné comme tu le demandes.
 
Donc ensuite pour afficher, tu parcours ton truc avec mysql_fetch_array :
 
$donnees = mysql_fetch_array($reponse)
 
Et pour afficher ce que tu voulais, tu mets ça :
 
echo $donnees['nom'];
echo $donnees['message'];
 
Ca va afficher le nom et le message qui correspondent à chaque ID.
Tu aurais exactement le même affichage si tu mettais en tout début à la place de * (qui veut dire 'récupérer tout') nom, message (qui veut dire "récupère le nom et le message) soit :
 
$reponse = mysql_query("SELECT nom, message FROM chat ORDER BY ID DESC LIMIT 0,10" );

Reply

Marsh Posté le 12-09-2005 à 14:50:20    

en fait le but de cette commande est juste de recuperer le message du dernier post (celui qui a l'id la plus grande) pour comparer avec ce qui est rentré et verifier que c'est pas la meme chose...
 
et que ce soit $dernier['id'] ou dernier['message'] ca plante :  
 
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/essaiphp/test.php on line 22
 
(c'est l'echo)
 
pour l'instant, je veux juste essayer de recuperer le message dans la derniere entrée, pour voir comment ca marche...


---------------
ras
Reply

Marsh Posté le 12-09-2005 à 14:56:38    

Y'a pas besoin de ", fait juste echo $dernier['message']. :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed