Qu'est-ce qui ne vas pas dans mon code php ? - PHP - Programmation
Marsh Posté le 28-06-2007 à 22:31:17
Salut,
il faut que tu mettes :
Code :
|
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
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 ), au minimum avec mysql_real_escape_string()
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.
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 . "')"; |
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
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
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 : |
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 : |
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 .
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 . 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.
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
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.
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 :
|
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
Marsh Posté le 29-06-2007 à 14:13:42
bixibu a écrit :
|
Sauf que c'est pas le message d'erreur qu'il a, merci d'avoir pris part au sujet
Marsh Posté le 29-06-2007 à 14:43:24
wow ha ouais autant pour moi, mais vive les messages d'erreurs super clairs aussi
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.
|
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
Marsh Posté le 29-06-2007 à 15:18:25
Bienvenu à la grande messe annuelle de l'injection sql ( je rappelle que $titre et $commentaire sont des valeurs reçues en post et non traitées).
Marsh Posté le 29-06-2007 à 16:19:47
moi j'ai un commentaire à taper
titre : injection SQL ; effacement des base
commentaire ';DELETE FROM user#
sinon, on peux aussi ajouter des myslq_real_escape_string avant
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é.... : (
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
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)...
Marsh Posté le 29-06-2007 à 22:32:00
Oups ! Désolé, j'avais pas lu cette partie là...
Ok, alors voilà j'ai remodifié le code comme tu l'avais dit et voici ce qui en est sorti...
Citation : |
Moi perso j'ai rien compris...
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 ). Et avec des valeurs reconnaissables, si possible
Marsh Posté le 29-06-2007 à 22:50:09
Cayé !!
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 ? )
Marsh Posté le 29-06-2007 à 22:50:54
ReplyMarsh 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
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 :
|
Marsh Posté le 29-06-2007 à 23:07:53
Hummm....
Voici les erreurs que j'ai eu en mettant "mysql_real_escape_string"
Citation : |
Perso je ne pense pas que ca soit la solution...
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.
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.
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
Marsh Posté le 29-06-2007 à 23:29:22
Bon, cayé, j'ai fais comme vous l'aviez dit et cayé, ca marche enfin !!!
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 !
Marsh Posté le 30-06-2007 à 11:14:50
WiiDS a écrit : C'est bête quand même. |
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 ...
Marsh Posté le 30-06-2007 à 18:06:20
weed a écrit : je viens d'apprendre quelques chose |
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 Pour le reste, les simples quotes sont a priviliégier.
Marsh Posté le 28-06-2007 à 21:13:08
Bonjour !!
Alors voici mon code :
<?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 :
(j'ai pensé que cela pouvait venir des ",',` alors du coup j'ai testé un peu tout çà. )
$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...