Qu'est-ce qui ne vas pas dans mon code php ?

Qu'est-ce qui ne vas pas dans mon code php ? - PHP - Programmation

Marsh Posté le 28-06-2007 à 21:13:08    

Bonjour !! :)  
 
Alors voici mon code :

Citation :


<?php
 
define('DB_SERVER',                  '*****');
define('DB_SERVER_USERNAME',  '*****');
define('DB_SERVER_PASSWORD', '*****');
define('DB_DATABASE',              '*****');
 
$msg_erreur    = "S'il te plait, prend le temps de remplir ";
$msg_ok         = "Merci !...Ne touche à rien, la technologie va te rediriger.";
$titre             = $_POST['titre'];
$commentaire  = $_POST['commentaire'];
$message       = $msg_erreur ;
 
if (empty($_POST['titre']))
   {
      $message .= "le titre !";
      header ("Refresh: 5;URL=http://www.monsite.com/commentaire.php" );
   }
 
if (empty($_POST['commentaire']))  
   {
      $message .= "aussi le commentaire !";
      header ("Refresh: 5;URL=http://www.monsite.com/commentaire.php" );
   }
 
if (strlen($message) > strlen($msg_erreur))
   {
      echo $message;
   }
else
   {
      $connect = mysql_connect( DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD)
        or die('Serveur\'s error. Refais la manip stp...' . mysql_error());
   
                      mysql_select_db( DB_DATABASE, $connect);
       
       $sql = "INSERT INTO `database` VALUES ('$titre', now(), '$commentaire');";
 
       $res = mysql_query($sql);
 
 if ($res)
      {
  echo $msg_ok;
  header ("Refresh: 5;URL=http://www.monsite.com/commentaire.php" );
     }
 else
     {
  echo "Serveur's error. Il y a eu un léger bug, refais la manip stp !";
  header ("Refresh: 5;URL=http://www.monsite.com/commentaire.php" );
      }
   }
?>


 
Mon problème est le suivant ; lorsque je rentre un nouveau commentaire, je recois toujours le même message "Serveur's error. Il y a eu un léger bug, refais la manip stp !" ce qui signifie que je me suis bien connecté à ma BDD mais que l'insertion des informations n'a pas été validé... ($res = vide => message d'erreur). Je ne comprend pas pourquoi  :??: ...quelqu'un pourrait m'aider svp ?... Juste pour info : j'ai aussi testé de changer la ligne de commande d'insertion ; alors pour éviter de vous faire perdre du temps, voici les différents codes que j'ai testé mais sans succès : :pt1cable:  
(j'ai pensé que cela pouvait venir des ",',` alors du coup j'ai testé un peu tout çà. :D  :p )
 
$sql = "INSERT INTO `database` VALUES ('$titre', now(), '$commentaire');";
$sql = "INSERT INTO `database` VALUES ('$titre', now(), '$commentaire')";
$sql = "INSERT INTO `database` VALUES ('$titre', now(), '$commentaire');"
$sql = "INSERT INTO 'database' VALUES ('$titre', now(), '$commentaire');";
$sql = "INSERT INTO 'database' VALUES ('$titre', now(), '$commentaire');"
$sql = "INSERT INTO 'database' VALUES ('$titre', now(), '$commentaire')";
$sql = "INSERT INTO "database" VALUES ('$titre', now(), '$commentaire');";
$sql = "INSERT INTO "database" VALUES ('$titre', now(), '$commentaire');"
$sql = "INSERT INTO "database" VALUES ('$titre', now(), '$commentaire')";
$sql = "INSERT INTO database VALUES ('$titre', now(), '$commentaire');";
$sql = "INSERT INTO database VALUES ('$titre', now(), '$commentaire');"
$sql = "INSERT INTO database VALUES ('$titre', now(), '$commentaire')";
 
 
Voilà, je crois que c'est tout ce que j'ai testé. J'espère que quelqu'un trouvera le problème car moi je commence à désespérer... :(

Reply

Marsh Posté le 28-06-2007 à 21:13:08   

Reply

Marsh Posté le 28-06-2007 à 22:31:17    

Salut,
 
il faut que tu mettes :
 

Code :
  1. $sql = "INSERT INTO database(titre,date,commentaire) VALUES ($titre, now(), $commentaire)";


en admettant que tu veuilles mettre $titre dans titre, now() dans $date...
 
Par contre, je me permets de te dire que ton code n'est pas très "pro" et qu'il risque de merdouiller si le visiteur a désactivé le javascript (certes c'est rare, mais ça arrive). Ensuite, tu devrais contrôler davantage ce que le visiteur va saisir en commentaire, par ce que là ton code est un vrai gruyère d'un point de vue sécurité. Renseigne toi sur les injections SQL (un petit lien en cadeau : http://phpsec.org/projects/guide/fr/. C'est assez compliqué mais quand on aime... :))
Aussi, je ne sais pas comment fonctionne empty mais tu devrais vérifier que tes $_POST['variable'] sont bien définis avec isset, sinon tu risque d'avoir des problèmes en fonction de la configuration de PHP sur le serveur (je crois que c'est le safe_mode qui peut poser problème).
 
Voilà, j'espère que ces quelques conseils te seront utiles. Attends peut-être l'avis des autres parce que ça fait un moment que j'ai pas touché au PHP et je te dis peut-être des bétises :(

Reply

Marsh Posté le 29-06-2007 à 00:26:11    

1. Pourquoi t'amuser à utiliser un mysql_error() pour ta connexion et pas pour les requêtes où il serait nettement plus utile que ton message d'erreur perso ?
2. échappe les données que tu insères, en particulier $titre et $commentaire (et ne tient pas compte de la correction de Desann qui pour le coup ajoute des erreurs :D), au minimum avec mysql_real_escape_string()

Reply

Marsh Posté le 29-06-2007 à 00:45:33    

Sérieux, j'ajoute des erreurs ? Tu peux me dire où parce que je vois pas et ça m'embête un peu (j'ai pris ce que j'ai dit de cette adresse : http://www.phpdebutant.org/article63.php)
 
Et quand je dis de contrôler les variables, l'échappement me semblait le minimum mais c'est vrai que j'ai pas pensé à le préciser.
 
Désolé Vantales de t'avoir dit n'importe quoi.

Reply

Marsh Posté le 29-06-2007 à 02:13:40    

ce qui m'ennuie un peu Desann25, c'est que tu dis ce n'est pas tres pro et dans ta requete, tu mets tes variables dans une string (entre double quote). Personnellement, je ne trouve pas ca génial comme méthode.  
 
à mon gout, ca serait un peu plus propre de cette manière.  

$sql = "INSERT INTO database(titre,date,commentaire) VALUES ('" . $titre . "', now(), '" . $commentaire . "')";

Reply

Marsh Posté le 29-06-2007 à 02:19:48    

Desann25 a écrit :

Sérieux, j'ajoute des erreurs ? Tu peux me dire où parce que je vois pas et ça m'embête un peu (j'ai pris ce que j'ai dit de cette adresse : http://www.phpdebutant.org/article63.php)


 
Bah quand on recopie on essaye de pas oublier des trucs  :whistle:  
 
Dans ta requête "corrigée", tu négliges le fait que $titre et $commentaire sont des chaines de caractères et en tant que telle doivent se trouver entre ' dans une requête sql :)

Reply

Marsh Posté le 29-06-2007 à 07:15:59    

salut ! :)  
 
Alors message pour Desann25 :
 
J'ai visité ton site et voici ce que j'ai trouvé :

Citation :


INSERT INTO clients_tbl(id,prenom,nom,ne_le,ville,enfants) VALUES('','Patrick','Martin','1965-10-08','Bordeaux','2')  
ou bien cette autre requête qui aura le même résultat, mais que nous vous déconseillons fortement, car elle ne marchera plus si vous modifiez votre table, en particulier si vous ajoutez un champ :
 
INSERT INTO clients_tbl VALUES('','Patrick','Martin','1965-10-08','Bordeaux','2')


alors bon ca c'est ce que j'ai trouvé sur le site, et tu peux voir en gros qu'il y a marqué :

Citation :

INSERT INTO clients_tbl VALUES('','Patrick','Martin','1965-10-08','Bordeaux','2')


et si tu regardes bien le mien :

Citation :


INSERT INTO database VALUES ('$titre', now(), '$commentaire')

 
Je constate que c'est la meme chose...Alors bon je ne pense pas que mon problème vienne de là... mais merci pour l'aide  :D .
 
Maintenant je me rend compte que mon code est un vrai gruyère mais en même temps il s'agit là d'un petit site racontant la vie de ma copine sur le net pour sa famille situé à far far lointain ; alors bon, perso je vois pas qui voudrait aller pirater ce "site de merde". Mais je vais quand même renforcer le code au cas ou ... prudence est mon deuxième prénom  :D . Alors du coup bin je vous remercie de votre participation et je m'empresse d'aller consulter les liens que vous m'avez donnés.

Reply

Marsh Posté le 29-06-2007 à 08:54:30    

Effectivement, j'ai dit un peu de la m...
 
Par contre quand je critiquais ton code, j'espère que tu ne l'a pas pris mal, ce n'était absolument pas mon but.
 
Voilà, bon courage et moi je vais me cacher :sweat:

Reply

Marsh Posté le 29-06-2007 à 09:29:01    

^^ t'inquiète pas, je suis pas là pour que les gens aiment mon code, je suis là pour trouver une réponse à mon problème.

Reply

Marsh Posté le 29-06-2007 à 14:10:03    

Citation :

Mon problème est le suivant ; lorsque je rentre un nouveau commentaire, je recois toujours le même message "Serveur's error. Il y a eu un léger bug, refais la manip stp !" ce qui signifie que je me suis bien connecté à ma BDD mais que l'insertion des informations n'a pas été validé...


 

Code :
  1. $connect = mysql_connect( DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD)
  2.         or die('Serveur\'s error. Refais la manip stp...' . mysql_error());
  3.  
  4.                       mysql_select_db( DB_DATABASE, $connect);
  5.      
  6.        $sql = "INSERT INTO `database` VALUES ('$titre', now(), '$commentaire');";
  7.        $res = mysql_query($sql);


 
Si tu as ton message d'erreur "refais la manip", c'est car il n'as pas reussi a se connecter à la base donc.. soit le login, mdp, database est fausse.
L'insertion des données c'est apres et elle n'a rien a voir avec ton bug

Reply

Marsh Posté le 29-06-2007 à 14:10:03   

Reply

Marsh Posté le 29-06-2007 à 14:13:42    

bixibu a écrit :

Citation :

Mon problème est le suivant ; lorsque je rentre un nouveau commentaire, je recois toujours le même message "Serveur's error. Il y a eu un léger bug, refais la manip stp !" ce qui signifie que je me suis bien connecté à ma BDD mais que l'insertion des informations n'a pas été validé...


 
Si tu as ton message d'erreur "refais la manip", c'est car il n'as pas reussi a se connecter à la base donc.. soit le login, mdp, database est fausse.
L'insertion des données c'est apres et elle n'a rien a voir avec ton bug


 
Sauf que c'est pas le message d'erreur qu'il a, merci d'avoir pris part au sujet :D

Reply

Marsh Posté le 29-06-2007 à 14:43:24    

wow ha ouais autant pour moi, mais vive les messages d'erreurs super clairs aussi :p

Reply

Marsh Posté le 29-06-2007 à 15:15:17    

weed a écrit :

ce qui m'ennuie un peu Desann25, c'est que tu dis ce n'est pas tres pro et dans ta requete, tu mets tes variables dans une string (entre double quote). Personnellement, je ne trouve pas ca génial comme méthode.  
 
à mon gout, ca serait un peu plus propre de cette manière.  

$sql = "INSERT INTO database(titre,date,commentaire) VALUES ('" . $titre . "', now(), '" . $commentaire . "')";



C'est bête quand même.
 
Tu aurais eu raison pour une déclaration de variable ou pour autres, mais l'exemple ou il est préférable de mettre des doubles quotes, c'est bien les requêtes SQL [:spamafote]


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 29-06-2007 à 15:18:25    

Bienvenu à la grande messe annuelle de l'injection sql :o ( je rappelle que $titre et $commentaire sont des valeurs reçues en post et non traitées).

Reply

Marsh Posté le 29-06-2007 à 16:19:47    

moi j'ai un commentaire à taper :d
 
titre : injection SQL ; effacement des base
commentaire  ';DELETE FROM user#
 
sinon, on peux aussi ajouter des myslq_real_escape_string avant

Reply

Marsh Posté le 29-06-2007 à 19:52:56    

Merci de vous interressez à mon code... j'aimerais bien qu'on m'explique quand même s'il vous plait... enfin je veux dire par là ... n'entrez pas dans un débat de je ne sais pas quoi... moi en attendant je m'amuse à tester des codes un par un pour voir lequel marchera... et jusqu'à présent je n'ai rien trouvé.... : (

Reply

Marsh Posté le 29-06-2007 à 20:14:01    

Vantales a écrit :

Merci de vous interressez à mon code... j'aimerais bien qu'on m'explique quand même s'il vous plait... enfin je veux dire par là ... n'entrez pas dans un débat de je ne sais pas quoi... moi en attendant je m'amuse à tester des codes un par un pour voir lequel marchera... et jusqu'à présent je n'ai rien trouvé.... : (


Tu as, sans aucun doute, les magic quotes activés. Au début, tu penseras que c'est le bien etc ... mais tu te rendras vite compte que les magic quotes sont tes ennemis :)


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 29-06-2007 à 20:44:52    

Vantales a écrit :

Merci de vous interressez à mon code... j'aimerais bien qu'on m'explique quand même s'il vous plait... enfin je veux dire par là ... n'entrez pas dans un débat de je ne sais pas quoi... moi en attendant je m'amuse à tester des codes un par un pour voir lequel marchera... et jusqu'à présent je n'ai rien trouvé.... : (

 

Bah écoute, ça fait plus de 20 heures que je t'ai demandé d'utiliser mysql_error pour avoir un message d'erreur plus clair que ton truc actuel, histoire qu'on y aille pas complètement en aveugle, c'est pas de notre faute si tu juges pas utile de le faire (pas plus que l'échappement des données, suggéré au même moment d'ailleurs)...


Message édité par naceroth le 29-06-2007 à 20:45:09
Reply

Marsh Posté le 29-06-2007 à 22:32:00    

Oups ! Désolé, j'avais pas lu cette partie là... :whistle:  
 
Ok, alors voilà j'ai remodifié le code comme tu l'avais dit et voici ce qui en est sorti...
 

Citation :


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'blablabla ' at line 1  


 
Moi perso j'ai rien compris... :sweat:

Reply

Marsh Posté le 29-06-2007 à 22:42:11    

Et la requête (tu fais un echo $sql juste après le mysql_query) aussi, tant qu'on y est (ok, ça je l'avais pas demandé la première fois :D). Et avec des valeurs reconnaissables, si possible :)

Reply

Marsh Posté le 29-06-2007 à 22:50:09    

Cayé !!  :pt1cable:  
 
J'ai trouvé mon problème !!!... En effet, j'ai remarqué que le message d'erreur n'apparaissait que dans certains cas... et ces cas là, c'est lorsque je laisse des messages avec des ",',^, etc (je pense qu'avec le @ il risque de bugguer aussi...à confirmer) ...
 
J'ai vu sur un topic (je ne sais plus ou) qu'il fallait un code spécial pour "autoriser" ces caractères dans une citation... Je vais essayer de le retrouver mais si entre temps certains savaient comment faire...
 
Merci d'avance !
 
(nb : j'ai pas bien compris ton dernier message naceroth...tu peux détailler s'il te plait ? :??: )

Reply

Marsh Posté le 29-06-2007 à 22:50:54    

Ha non, avec le @ ca marche niquel...

Reply

Marsh Posté le 29-06-2007 à 22:57:03    

Vantales a écrit :

Ha non, avec le @ ca marche niquel...


 
Non, ça ne marche pas nickel. ca ne marche pas plus qu'avant, tu illustres juste ma signature :D
 
En clair, tout ce que fait le @ c'est masquer l'erreur, ça ne fait pas fonctionner ton code pour autant.
 
Sinon, vu la remarque sur les ",', etc, la réponse t'as déjà été donnée plusieurs fois : échappe tes variables $titre et $commentaire avant la requête, par exemple avec mysql_real_escape_string().
 
Comme dans

Code :
  1. $titre = mysql_real_escape_string($_POST['titre']);
  2. ...

Reply

Marsh Posté le 29-06-2007 à 23:07:53    

Hummm.... :(  
 
Voici les erreurs que j'ai eu en mettant "mysql_real_escape_string"
 

Citation :


 
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /www/sites/1/ifrance.com/t/e/teura-maud/site/upload.php3 on line 18
 
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /www/sites/1/ifrance.com/t/e/teura-maud/site/upload.php3 on line 18
 
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /www/sites/1/ifrance.com/t/e/teura-maud/site/upload.php3 on line 19
 
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /www/sites/1/ifrance.com/t/e/teura-maud/site/upload.php3 on line 19
 
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /www/sites/1/ifrance.com/t/e/teura-maud/site/upload.php3 on line 21
 
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /www/sites/1/ifrance.com/t/e/teura-maud/site/upload.php3 on line 21
Merci !...Ne touche à rien, la technologie va te rediriger.  


 
Perso je ne pense pas que ca soit la solution...

Reply

Marsh Posté le 29-06-2007 à 23:15:04    

Si si, c'est la solution, je suis juste tomber sur un gars qui ne souhaite décidément pas lire la doc. mysql_real_escape_string() doit être appelé après mysql_connect, donc, tu cases ton $titre = mysql_... entre le mysql_connect et le mysql_query.

Reply

Marsh Posté le 29-06-2007 à 23:15:42    

Vantales a écrit :

Perso je ne pense pas que ca soit la solution...


Si, ca fait trois heures qu'on se tue a te dire que sans utiliser cette commande, tu n'arriveras a rien. Et trois heures que tu dis non.

Message cité 1 fois
Message édité par WiiDS le 29-06-2007 à 23:16:21

---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 29-06-2007 à 23:19:46    

WiiDS a écrit :

Si, ca fait trois heures qu'on se tue a te dire que sans utiliser cette commande, tu n'arriveras a rien. Et trois heures que tu dis non.


 
T'es gentil avec les 3 heures, à minuit 26 ce matin, c'était déjà sorti :D

Reply

Marsh Posté le 29-06-2007 à 23:29:22    

Bon, cayé, j'ai fais comme vous l'aviez dit et cayé, ca marche enfin !!!  :pt1cable:  
 
Bon par contre je trouve que vous y aller un peu fort sur le fait que le gars en question (cad moi) ne vous écoute pas et vous contredit, etc etc...
 
Vous m'aviez proposé un truc, je l'ai testé, me suis renseigné à gauche à droite, j'ai lu aussi... (d'ailleurs c'est à ce moment là que g vu qu'il fallait d'abord se connecter à ma BDD... mais j'avais déjà posté le message)..Enfin bref, je ne vais pas me justifier...
 
En tout cas, merci beaucoup, cette fois ci le code marche nickel !

Reply

Marsh Posté le 30-06-2007 à 11:14:50    

WiiDS a écrit :

C'est bête quand même.
 
Tu aurais eu raison pour une déclaration de variable ou pour autres, mais l'exemple ou il est préférable de mettre des doubles quotes, c'est bien les requêtes SQL [:spamafote]


 
je viens d'apprendre quelques chose  :)  
donc comme tu le dis, il vaut mieux mettre les varaibles entre doubles quotes. Je suis plus que surpris mais si tu le dis ...

Reply

Marsh Posté le 30-06-2007 à 18:06:20    

weed a écrit :

je viens d'apprendre quelques chose  :)  
donc comme tu le dis, il vaut mieux mettre les varaibles entre doubles quotes. Je suis plus que surpris mais si tu le dis ...


Le probleme c'est que les simples quotes lors d'une requête SQL rendent cette dernière plus qu'illisible, pour un gain qui s'apparente vraiment à de la masturbation intellectuelle [:spamafote] Pour le reste, les simples quotes sont a priviliégier.


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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