JeuWeb - Crée ton jeu par navigateur
probleme mysql - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : probleme mysql (/showthread.php?tid=559)

Pages : 1 2


RE: probleme mysql - Roworll - 22-12-2006

Pour ma part, je rajouterai une gestion pour les guillemets.
si le serveur que tu utilises est en Magic Quotes On et que tu passe sur une version avec cette option à off, ça risque de faire mal
Code PHP :
<?php 
//exemple
if(!get_magic_quotes_gpc()){
$name=addslashes($_POST['name']);
$pass=addslashes($_POST['pass']);
} else {
$name=addslashes($_POST['name']);
$pass=addslashes($_POST['pass']);
}
Ensuite, sur les données affichables comme le nom, je rajouterai un htmlspecialchars() histoire d'éviter les petits malins qui mettent des tags HTML dans leur nom.

Enfin, je recontrôlerais TOUS les champs du formulaire POST.
Même si les valeurs sont vérifiées à l'envoi par du Javascript, il est super façile de passer outre cette vérification et d'envoyer des valeurs non conformes...

Donc, il faut retester systématiquement les valeurs reçues et renvoyer sur le formulaire et/ou une page d'erreur si il y a un problème.


RE: probleme mysql - zneman - 22-12-2006

ok merci :p mais je cherche deja a trouver pourquoi il me met le message d'erreur (voir premier message) Smile


RE: probleme mysql - Roworll - 22-12-2006

Arf ok, je me suis un peu emballé ^^

Ce genre de truc ressemble effectivement à un soucis de connexion à la DB.

Vérifies bien que tu as un Link actif créé par mysql_connect() vers ta base de données et que tu as bien sélectionné la base en question (mysql_select_db()).

Et pour reprendre les sages paroles d'Aramiil :

Citation :(2) tu n'utilises pas de variable pour nommer ton lien à la bdd, et donc tu n'en spécifie pas, et c'est une mauvaise chose ;-)



RE: probleme mysql - zneman - 22-12-2006

lol merci de tes conseils ^^ j'ai réussit il y a deja quelques minutes maintenant :p
En effet erreur toute bete:

Code PHP :
<?php 
require "sql.php";
mysql_connect($host,$username,$password);
mysql_select_db($bdd_name);
$email = $_POST['email'];
$prenom = $_POST['prenom'];
$nom = $_POST['nom'];
$jour = $_POST['jour'];
$mois = $_POST['mois'];
$annees = $_POST['annees'];
$login = $_POST['login'];
$pass = $_POST['pass'];
$url = $_POST['url'];
$departement = $_POST['departement'];
$newsletters = $_POST['newsletters'];
$id = 0;
$date = date("d/m/Y");
$race = $_POST['race'];
$conditions = $_POST['conditions'];

if ((
$login=="")||($pass=="")||($email=="")||($race=="")||($conditions==""))
{
if(
$login=="") print ("<p class=\"erreur\">Le champ du pseudo n'est pas remplis</p><br />\n");
if(
$pass=="") print ("<p class=\"erreur\">Le champ du mot de passe n'est pas remplis</p><br />\n");
if(
$email=="") print ("<p class=\"erreur\">Le champ de l'adresse email n'est pas remplis</p><br />\n");
if(
$race=="") print ("<p class=\"erreur\">Vous n'avez pas choisi votre race</p><br />\n");
if(
$conditions=="") print ("<p class=\"erreur\">Il faut accepter les conditions afin de pouvoir s'inscrire !</p><br />\n");
}
else
{
echo
"Votre inscription s'est bien déroulée. Bienvenue !";
mysql_query("INSERT INTO membres(id,login,pass,email,url,jour,mois,annees,date,prenom,nom,departement,race,conditions ) VALUES ('$id++','$login','$pass','$email','$url','$jour','$mois','$annees','$date','$prenom','$nom','$departement','$race','$conditions')");
mysql_close();
}
?>

voila ce que j'avais oublié:

mysql_connect($host,$username,$password);
mysql_select_db($bdd_name);

^^

Probleme réglé :p allé hop :p xD


RE: probleme mysql - gtsoul - 22-12-2006

Quelques remarques...

require_once au lieu de require, cela évite les inclusions en boucle, dans ton exemple pas de risques, mais ca t'arrivera un jour

$var = htmlentities($_POST['var']); au lieu de $var = $_POST['var'];
afin d'éviter les injections de code et injections sql

tu insères un $id++ après $id=0; donc tu insereras toujours $id=1
passe ton champ id en autoincrement et oublies le dans ta requete insert (comme ca l'id s'incrementera automatiquement)

toujours dans la requete insert, les string (caractères) comportent des simple quote ' ' mais pas les valeurs numériques.
cela ne va pas changer grand chose car php est très permittif, mais ca évite un castage qui ne sert à rien
" $int " : int(type de départ)->string(conversion car requete = string)->int(type arrivee dans la base) : 2 casts
" '$string' " : string (pas de cast)
" '$int' " : int(type de départ)->string(conversion pour requete) ->string( les ' ' annulent la conversion)->int(conversion forcee pour rentrer dans la base)

attacher ton identifiant de connection au mysql_query


RE: probleme mysql - NicoMSEvent - 22-12-2006

il y a un tutorial pour PHP5 en POO très bien fait, mais le hic : il faut PHP5 pour le faire marcher.
J'ai rajouté un nouveau tutorial : un code fonctionnel mais simplifié pour php4, pas très orienté objet, mais ça marche assez bien.


RE: probleme mysql - Aramiil - 22-12-2006

gtsoul a écrit :$var = htmlentities($_POST['var']); au lieu de $var = $_POST['var'];
afin d'éviter les injections de code et injections sql

Pas encore lu le reste (j'éditerais), mais attention, htmlentities ne protège pas des injections sql si il est employé comme ceci. Il faut ajouter le second paramètre à ENT_QUOTES, sinon ça ne change rien.


RE: probleme mysql - zneman - 22-12-2006

oki oki, je vais voir ca Smile merci bien :p


RE: probleme mysql - Loetheri - 22-12-2006

Pour se protéger des attaques SQL, utilisez une véritable fonction prévue à cet effet : mysql_real_escape_string().

html_entities n'est à utiliser que lors de l'affichage (Pourquoi insérer des caractères plus longs alors que les caractères originaux sont inoffensifs dans la BD ?)


RE: probleme mysql - Aramiil - 22-12-2006

html_entities a l'avantage de ne pas re-demander de traitement ulterieurs dans certains cas (pseudonyme, par exemple), ce qui ne serait pas le cas avec un mysql_real_escape_string(). De plus, cette fonction ne marche que si ont utilise mysql (et de préférence qu'on fourni un identifiant valide).