NewbieContest

Programmation => Langages Web => Discussion démarrée par: sago le 21 Octobre 2007 à 18:30:52



Titre: [PHP] aide script minichat
Posté par: sago le 21 Octobre 2007 à 18:30:52
bonjour,
J'apprend le php et j'en suis a se script, qui est faux

j'aimerai savoir pour quoi, la page web m'indique que l'erreur est ligne 23

Code:
<html>
<body>

<p>
Veuillez entrez votre pseudo et votre mot de pass
</p>
<form action="minichat.php" method="post" target="_blank">
<p><input type="text" name="pseudo"/> <br>
<input type="text" name="message"/> <br> <input type="submit" value="valider" /> </p>
</form>
<?php

mysql_connect
("localhost""sago""passs");
mysql_select_db("sago");


$message mysql_real_escape_string(htmlspecialchars($_POST['message']));
$pseudo mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));

if( 
$pseudo != NULL AND $message != NULL)
{
mysql_query("INSERT INTO mini_chat VALUES('', '$pseudo', '$message'));
$reponse = mysql_query("SELECT FROM mini_chat ORDER BY id DESC"); 

while(
$donnees = mysql_fetch_array($reponse) );
 {
 ?>

 pseudo:  <?php echo $donnees['pseudo']; ?> <br>
 <br>
 message: <br>
 <?php echo $donnees['message']; 
}
else
{
echo 
'ta pas taper ton pseudo/message';
}
mysql_close();


?>


</body>
</html>


merci beaucoup de votre aide


Titre: Re : aide
Posté par: Chilly le 21 Octobre 2007 à 18:38:06
bonjour,
J'apprend le php et j'en suis a se script, qui est faux

j'aimerai savoir pour quoi, la page web m'indique que l'erreur est ligne 23

alors ce qui est faux :
"j'apprend" : "j'apprends"
"a se script" : "à ce script"
"j'aimerai" : "j'aimerais"
"pour quoi" : "pourquoi"

et dans le code "Veuillez entrez votre pseudo et votre mot de pass" : "Veuillez entrer votre pseudo et votre mot de passe".

Sinon concernant ta véritable question... on voit facilement une erreur avec la coloration syntaxique, tu as oublié de fermer un guillemet.
L'erreur que j'ai vue est sur cette ligne mysql_query("INSERT INTO mini_chat VALUES('', '$pseudo', '$message'));
Je n'ai pas lu plus loin... donc je ne dis pas qu'il n'y a pas d'autre erreur.


Titre: Re : aide
Posté par: sago le 21 Octobre 2007 à 19:35:04
Merci beaucoup  :P
Je promet de faire des efforts d'orthographe

merci encore pour la réponse rapide et critique


Titre: Re : [PHP] aide script minichat
Posté par: sago le 24 Octobre 2007 à 15:07:08
Rebonjour
J'ai encore un probleme, ça marchait bien et tout puis  j'ai eu l'idée saugrenue de vouloir modifier mon script pour tester les failles SQL j'ai tester au hasard en faisant SELECT * FROM minichat  et ça marche plus... enfin quand on poste un message, car si j'ajoute un message a partir de php my admin
sa l'affiche bien
Code:
<html>
<body>

<?php
if (isset($_POST['pseudo']) AND isset($_POST['message'])) 
{
if( 
$pseudo != NULL AND $message != NULL)
{

mysql_connect("localhost""sago""EDITje lavais laisser");

mysql_select_db("sago");

$message mysql_real_escape_string(htmlspecialchars($_POST['message'])); // j'ai enlever mysql_real_escape_string(htmlspecialchars))

$pseudo mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // là aussi


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

mysql_close();

}
}
?>


<p>
Veuillez entrez votre pseudo et votre message
</p>
<form action="minichat.php" method="post">
<p><input type="text" name="pseudo"/> <br>
<input type="text" name="message"/> <br> <input type="submit" value="valider" /> </p>
</form>

<?php

mysql_connect
("localhost""sago""EDITje lavais laisser");

mysql_select_db("sago");

$reponse mysql_query("SELECT * FROM minichat ORDER BY id DESC LIMIT 0,10"); 

while(
$donnees mysql_fetch_array($reponse) )
 {
 
?>

 
<p><strong><?php echo $donnees['pseudo']; ?></strong> : <br> <?php echo $donnees['message']; ?></p>

<?php
}


mysql_close();

?>


</body>
</html>
vous pourriez m'aider svp

merci


Titre: Re : [PHP] aide script minichat
Posté par: S0410N3 le 24 Octobre 2007 à 15:23:12
if( $pseudo != NULL AND $message != NULL)

Ca ne rentre jamais dans le if. $pseudo et $message n'existent pas... $_POST['pseudo'] et $_POST['message'] oui.


Titre: Re : [PHP] aide script minichat
Posté par: sago le 24 Octobre 2007 à 15:26:58
Merciiiiiii,
Mais comment tu peux expliquer qu'avant sa marchait bien?  :/


Titre: Re : [PHP] aide script minichat
Posté par: S0410N3 le 24 Octobre 2007 à 15:30:08
Tu devais avoir le register_globals d'activé, ce qui est mal =)


Titre: Re : [PHP] aide script minichat
Posté par: sago le 24 Octobre 2007 à 15:31:04
Sa marche toujours pas...
Voila la page= j'ai enlever pour pas faire de pub (sinon je sent qu'on va m'accuser... :p )
C'est quoi le register global?
EDIT: SA maarcheeeeeeeeeeeeeuh

Millles merciiii   


Titre: Re : [PHP] aide script minichat
Posté par: the lsd le 24 Octobre 2007 à 15:32:49
Ben il marche ce script chez moi !

Enjoy

The lsd


Titre: Re : [PHP] aide script minichat
Posté par: sago le 24 Octobre 2007 à 15:43:19
  trop content
Comme qui dirait i'am enjoying
edit (j'imagine meme pas quand se sera un plus gros script)

EDIT2: Lool j'ai remarqué, personne m'a dit que j'avais laisser le mdp de sql


Titre: Re : [PHP] aide script minichat
Posté par: sago le 24 Octobre 2007 à 15:56:26
Autre question, :D
J'aimerai hacker mon minichat
Vous pourriez me donner des idées svp en sql je sais pas... je sais juste pour les formulaire

Merci :D


Titre: Re : Re : [PHP] aide script minichat
Posté par: _o_ le 24 Octobre 2007 à 18:20:51
J'aimerai hacker mon minichat

Oui, alors, justement, là, il y a un truc qui ne va pas dans la démarche. Parce que la véritable manière de faire, c'est justement de prendre en compte la sécurité dès la conception. Après, en général, c'est trop tard. Parce que ça prend plus de temps de patcher après coup, parce que ça dégénère en une somme de verrues plus ou moins contournables, bref, c'est le boxon.

Bien sûr, c'est plus facile à dire qu'à faire, et ça demande un peu d'expérience dans le domaine et le langage de programmation utilisé, et il faut bien débuter un jour. Mais c'est une bonne habitude à prendre.


Titre: Re : [PHP] aide script minichat
Posté par: the lsd le 24 Octobre 2007 à 23:08:28
Deja, il faut l'optimiser un chouilla :

Code:
if (isset($_POST['pseudo']) AND isset($_POST['message'])) 
{
if( $pseudo != NULL AND $message != NULL)
{
ca fait répétition ces deux boucles.

Il suffit de faire
Code:
if (!empty ($_POST['pseudo']) AND !empty($_POST['message'])) 
{

Ensuite, prends le réflexe de mettre des OR die (ton message d'erreur) apres les requetes SQL, je trouve ca plus pratique pour debuger.

Enleves le premier mysql_close() (en dessous du INSERT INTO), car la BDD doit etre refermée dans tous les cas, vu que meme si tu n'insères pas tu affiches, par conséquent un seul mysql_close() est utile.

Dans le même genre, quand tu postes un message, tu ouvres deux fois la BDD(une fois pour écrire et une fois pour lire), essayes de l'ouvrir une seule fois au début.

Enfin, dans ton while d'affichage, essayes de ne pas ouvrir/fermer les balises php tout le temps, fais un truc du genre :
Code:
echo '<p><strong>'.$donnee['pseudo'].'le reste du message</p></strong>' ;

Enjoy

The lsd

PS : je n'ai regardé que le deuxième script que tu as mis.


Titre: Re : [PHP] aide script minichat
Posté par: sago le 25 Octobre 2007 à 16:27:02
Okééééé  :cry:

Alors,
EDIT:
1. j'améliore ==edit> je casse
2. je sécurise ==edit>  :lol:
3. J'améliore ==edit> Mort de rire  :lol: :lol:               :cry:
4. je vous montre (enfin vous êtes pas obliger de regarder mais sa me fait plaisir d'être corriger) ==edit> Mois je voulais qu'il n'y ai rien a corriger(presque)
5. Je hack  =D ==edit>  je détruit :'(

C'est bon?
P-S : lsd tant mieux, c'est l'amélioration du premier



Titre: Re : [PHP] aide script minichat
Posté par: sago le 25 Octobre 2007 à 18:21:54
Snifffr
après pleins de tentatives d'amélioration j'ai toujours pas trouvé

Et j'ai essayer pourtant

regardez , j'ai bien modifier, j'ai fait avec 1 seul <?php  ?> j'ai mis stripslashes() mi les or die(mysql_error()) j'ai enlever des trucs etc
jusqu' a avoir sa     
 
Code:
<?php




if( !empty ($_POST['pseudo']) AND !empty ($_POST ['message']))
{

mysql_connect("localhost""sago""aaaaaaaaaa");

mysql_select_db("sago");

$message stripslashes(mysql_real_escape_string(htmlspecialchars($_POST['message'])));

$pseudo stripslashes(mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])));


mysql_query("INSERT INTO minichat VALUES('', '$pseudo', '$message')")or die(mysql_error());


}


echo 
"<p>
Veuillez entrez votre pseudo et votre message merci
</p>
<form action='minichatv1-2-2.php' method='post>
<p><input type='text' name='pseudo'/> <br> 
<input type='text' name='message'/> <br> <input type='submit' value='valider' /> </p>
</form>\n"
;


$reponse mysql_query("SELECT * FROM minichat ORDER BY id DESC LIMIT 0,10")or die(mysql_error()); 

while(
$donnees mysql_fetch_array($reponse) )
 {
 
 
echo 
'<p><strong>'.$donnees['pseudo'].'</strong> : <br>'.$donnees['message'].'</p>';



}


mysql_close();

?>

Et le méchant php me dit:

Warning: mysql_query() [function.mysql-query]: Access denied for user 'www-data'@'localhost' (using password: NO) in /web2/sago/www/sago/minichatv1-2-2.php on line 33

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /web2/sago/www/sago/minichatv1-2-2.php on line 33
Access denied for user 'www-data'@'localhost' (using password: NO)

La ligne 33 est :
Code:
<?php
$reponse 
mysql_query("SELECT * FROM minichat ORDER BY id DESC LIMIT 0,10")or die(mysql_error()); 
?>

merci de votre aide

:)


Titre: Re : [PHP] aide script minichat
Posté par: S0410N3 le 25 Octobre 2007 à 19:08:25
Et si tu sortais ta connexion à la bdd du if ?
Au début y a pas de données en POST donc ça se connecte pas si tu mets ça dans le if.

Bon, sinon on va pas tout faire à ta place. Ca serait bien de chercher un peu par toi même parce que là c'est limite ridicule comme question...


Titre: Re : [PHP] aide script minichat
Posté par: sago le 25 Octobre 2007 à 19:46:23
 :oops:

Pourtant j'ai bel et bien chercher

j'ai dut mal chercher alors...

:shock:
Ahhhh, quel c...
par ce qu'au début le programme saute le if comme il n'y a pas pseudo et message sont vide ...
mince ...
Bon on peut mètre sa sur le compte du débutant que je suis ... hein?


Desooleeerr promis je ferait attention a sa
Bon faudra surtout que j'ose encore poster une question
 


Titre: Re : [PHP] aide script minichat
Posté par: the lsd le 25 Octobre 2007 à 20:59:01
Si ca peut t'aider, essaye de faire de l'algorithme avant d'écrire le code en PHP directement.
Pour rappel, l'algo c'est ecrire la logique du code en francais.
Ca resemble à un truc du genre

Code:
Je me connecte a la BDD

   Si les variables message et nom existent
   blablabla
   fin de si

blablabla

Ca peut aider à comprendre la logique, mais aussi à trouver la meilleure solution.

Enjoy

The lsd


Titre: Re : [PHP] aide script minichat
Posté par: sago le 25 Octobre 2007 à 21:06:47
merci,
ça va m'aider ...
C'est une bonne idée  :)


Titre: Re : [PHP] aide script minichat
Posté par: Nebelmann le 27 Octobre 2007 à 09:54:13
Citation
Enfin, dans ton while d'affichage, essayes de ne pas ouvrir/fermer les balises php tout le temps, fais un truc du genre :
Code:
echo '<p><strong>'.$donnee['pseudo'].'le reste du message</p></strong>' ;

Désolé si ça peut lancer un troll, mais je suis pas du tout d'accord sur cette remarque... IMHO, y'a pas grand chose de pire en développement web que de voir du malheureux code HTML prisonnier de méchants guillemets PHP.

Il ne faut pas mettre le HTML dans le PHP, mais le PHP dans le HTML, question de lisibilité, entre autre :

Code: (php)
<p>
<strong><?= $donnee['pseudo'] ?> le reste du message</strong>
</p>

(au passage, y'a eu une inversion dans l'ordre de fermeture des balises <strong> et <p>)

Tout bon développeur web le sait, et l'applique, il faut séparer le traitement des données de l'affichage (modèle MVC :) ), le must serait en fait de mettre tout le HTML dans un autre fichier, et dans le fichier de traitement, définir les variables utilisées et inclure le HTML.


Titre: Re : [PHP] aide script minichat
Posté par: Zmx le 27 Octobre 2007 à 12:14:32
C'est un debats assez interessant et les 2 solutions ont leur avantages/inconvenient.
La solution d'eviter d'ouvrir/fermer les balises a une raison historique de performances (le changement de context PHP/Html coutant "chere" en ressource systeme)
Bon c'est surement significatif sur un site avec 10 000 pages/minutes, et sur un serveur d'il y a 10 ans (maintenant je pense que le goulot pour les perf c'est plutot les connexion internet)

La solution de Nebelmann, est une vision bcp plus neuves, qui consiste a "tenter" de séparer la logique de l'affichage (je dit bien tenter, c'est pas vraiment toujours simple :p ).
Cele est surtout utile sur les gros projets (enfin c'est utile partout, mais on en tire plus les avantages sur un gros projets), ou l'on peux séparer les taches (une personne va coder une function "getCommentaire" qui va renvoyer une liste de commentaire, et l'autre va l'utiliser sans avoir a ce soucier de comment fonctionne le contenu de la function. Et surtout si le "stockage" des commentaires doit changer (la logique) il n'y a pas a toucher au html (et inversement)


Titre: Re : [PHP] aide script minichat
Posté par: the lsd le 27 Octobre 2007 à 14:40:42
Perso, je trouve ca beaucoup plus fouilli d'ouvrir fermer plusieurs fois les balises, ca peut faire des lignes à rallonge,et je ne trouve pas ca pratique, mais ce n'est qu'un point de vue. Chacun a sa manière de coder après tout.

Je ne pense pas que ce soit le plus important dans l'optimisation d'un script, donc ca ne reste qu'une question de préférences.

Désolé pour l'inversion des balises, j'ai pas fais gaffe =D

Enjoy

The lsd


Titre: Re : [PHP] aide script minichat
Posté par: Chilly le 27 Octobre 2007 à 15:37:52
Perso, je trouve ca beaucoup plus fouilli d'ouvrir fermer plusieurs fois les balises, ca peut faire des lignes à rallonge,et je ne trouve pas ca pratique, mais ce n'est qu'un point de vue.
Suffit de changer de ligne à chaque balise, et d'indenter correctement...