Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3194 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1580565
Vantales
Posté le 28-06-2007 à 21:13:08  profilanswer
 

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... :(

mood
Publicité
Posté le 28-06-2007 à 21:13:08  profilanswer
 

n°1580576
Desann25
Posté le 28-06-2007 à 22:31:17  profilanswer
 

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 :(

n°1580601
naceroth
Posté le 29-06-2007 à 00:26:11  profilanswer
 

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()

n°1580607
Desann25
Posté le 29-06-2007 à 00:45:33  profilanswer
 

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.

n°1580610
weed
Posté le 29-06-2007 à 02:13:40  profilanswer
 

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 . "')";

n°1580611
naceroth
Posté le 29-06-2007 à 02:19:48  profilanswer
 

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 :)

n°1580617
Vantales
Posté le 29-06-2007 à 07:15:59  profilanswer
 

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.

n°1580627
Desann25
Posté le 29-06-2007 à 08:54:30  profilanswer
 

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:

n°1580644
Vantales
Posté le 29-06-2007 à 09:29:01  profilanswer
 

^^ 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.

n°1580803
bixibu
Ca ... c'est fait!
Posté le 29-06-2007 à 14:10:03  profilanswer
 

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

mood
Publicité
Posté le 29-06-2007 à 14:10:03  profilanswer
 

n°1580807
naceroth
Posté le 29-06-2007 à 14:13:42  profilanswer
 

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

n°1580820
bixibu
Ca ... c'est fait!
Posté le 29-06-2007 à 14:43:24  profilanswer
 

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

n°1580835
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 29-06-2007 à 15:15:17  profilanswer
 

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
n°1580839
anapajari
s/travail/glanding on hfr/gs;
Posté le 29-06-2007 à 15:18:25  profilanswer
 

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).

n°1580877
flo850
moi je
Posté le 29-06-2007 à 16:19:47  profilanswer
 

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

n°1580934
Vantales
Posté le 29-06-2007 à 19:52:56  profilanswer
 

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é.... : (

n°1580936
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 29-06-2007 à 20:14:01  profilanswer
 

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
n°1580938
naceroth
Posté le 29-06-2007 à 20:44:52  profilanswer
 

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
n°1580960
Vantales
Posté le 29-06-2007 à 22:32:00  profilanswer
 

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:

n°1580963
naceroth
Posté le 29-06-2007 à 22:42:11  profilanswer
 

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 :)

n°1580964
Vantales
Posté le 29-06-2007 à 22:50:09  profilanswer
 

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 ? :??: )

n°1580965
Vantales
Posté le 29-06-2007 à 22:50:54  profilanswer
 

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

n°1580966
naceroth
Posté le 29-06-2007 à 22:57:03  profilanswer
 

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. ...

n°1580969
Vantales
Posté le 29-06-2007 à 23:07:53  profilanswer
 

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...

n°1580971
naceroth
Posté le 29-06-2007 à 23:15:04  profilanswer
 

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.

n°1580972
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 29-06-2007 à 23:15:42  profilanswer
 

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
n°1580973
naceroth
Posté le 29-06-2007 à 23:19:46  profilanswer
 

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

n°1580976
Vantales
Posté le 29-06-2007 à 23:29:22  profilanswer
 

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 !

n°1580993
weed
Posté le 30-06-2007 à 11:14:50  profilanswer
 

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 ...

n°1581073
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 30-06-2007 à 18:06:20  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
Sauvegarder des paramètres et les utiliser dans un code FortranAide pour mon code
Nettoyer un code, mettre en relief, insérer des lienscompteur de telechargement mal placé: problème code html ?
Joomla - Insertion d'un code Javascriptquelqu'un peu m'expliqué ce code
[BATSH] Code pour ce parllerlenteur sur mon site due au code peut etre ?
code liens htmlModifier l'objet source d'un sous état avec du code en VBA
Plus de sujets relatifs à : Qu'est-ce qui ne vas pas dans mon code php ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR