JeuWeb - Crée ton jeu par navigateur
[Résolu] Problème avec ereg() - 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 : [Résolu] Problème avec ereg() (/showthread.php?tid=2330)

Pages : 1 2


RE: problème avec ereg? - Rouge - 31-01-2008

dans mon script complet, ca ne marche toujours pas, chaque saisie de pseudo affiche le echo du début (les caracteres spéciaux sont interdits)
Code PHP :
<?php
include 'connexion.php';
if (isset(
$_POST['pseudo'])) {
$login= ereg('^[a-zA-Z\'"]*$', $_POST['pseudo']);
if(
$login==true)
{
//le pseudo est correct
$login="";
}
else
{
//le pseudo n'\est pas correct
echo 'Le pseudo est incorrect car il y a des caractères spéciaux';
}
if(isset(
$_POST['passe']))$passe=addslashes(stripslashes($_POST['passe']));
$passe="";
if(isset(
$_POST['email']))$email=$_POST['email'];
$email="";
if(isset(
$_POST['sexe']))$sexe=$_POST['sexe'];
$sexe="";
if(isset(
$_POST['age']))$age=$_POST['age'];
$age="";
if(isset(
$_POST['race']))$race=$_POST['race'];
$race="";
if(isset(
$_POST['predef']))$typeava=$_POST['predef'];
$typeava="./avatars/001.gif";
// On vérifie si les champs sont vides
if(empty($login) OR empty($passe) OR empty($email) OR empty($sexe) OR empty($age) OR empty($race))
{
echo
'<center><font face="Book Antiqua"> Attention ! Tous les champs ne sont pas correctement renseignés.
<br><a href="inscription.php">RETOUR INSCRIPTION</a></font></center>'
;
}
else{
// on regarde si le type existe déjà
$req = mysql_query("SELECT * FROM membres WHERE pseudo='". $login ."'",$db)or die(mysql_error());
// on compte le nombre de résultats
$res = mysql_num_rows($req);
if(
$res!=0) // le pseudo existe déjà, on affiche un message d'erreur
{
echo
'<center><font color="red">Désolé, mais ce pseudo est déjà pris !</font></center>';
}
else {
$req2 = mysql_query("SELECT * FROM membres WHERE passe='". $passe ."'",$db)or die(mysql_error());
$res = mysql_num_rows($req);
if(
$res!=0) // le passe existe déjà, on affiche un message d'erreur
{
echo
'<center><font color="red">Désolé, mais ce mot de passe est déjà pris !</font></center>';
}
else
{
$sq2 = "INSERT INTO membres(id, pseudo, passe, email, age, avatar, sexe, race, date_inscri) VALUES ('', '$login', '$passe','$email','$age','$typeava', '$sexe', '$race', NOW())";
mysql_query($sq2) or die('Erreur SQL '.$sq2.'<br>'.mysql_error());
}
include
'bravo.htm';
}
}
}
mysql_close();
?>
:pleure2:


RE: problème avec ereg? - Anthor - 31-01-2008

Code PHP :
<?php
include 'connexion.php';
if (isset(
$_POST['pseudo'])) {
$login= ereg("^[' a-zA-Z]*$", $_POST['pseudo']);
if(
$login==true)
{
//le pseudo est correct
$login="";
}
else
{
//le pseudo n'\est pas correct
echo 'Le pseudo est incorrect car il y a des caractères spéciaux';
}
?>

Essayes celui la, je l'ai fait de tête donc non garanti

Tu ne pourras pas avoir " et ' avec ereg, car il me semble que certains antislash bug


RE: problème avec ereg? - docteur.night - 03-02-2008

Perso, je te conseille fortement d'utiliser preg_match() à la place de ereg(). Pour les raisons suivantes :
- les fonctions ereg*() sont beaucoup plus lentes que les équivalents preg*()
- les fonctions ereg*() ne seront plus intégrées par défaut dans php6

bref à bon entendeur.


RE: problème avec ereg? - Ziliev - 03-02-2008

Effectivement 'faut vivre avec son temps preg_match c'est ca la technologie Tongue

Personellement je vais aps me risquer à tenter de corriger ton code, t'utilises des facons d'écrire beaucoup trop différentes des miennes, simplement pour ta condition moi je ferais tout bétement ca:

Code PHP :
<?php 
if (preg_match("#^[ 'A-Za-z]+$#", $_POST['pseudo']))
{ echo
"OK"; }
else
{ echo
"Caractère interdit"; }

(testé et approuvé)

J'ajouterais que mettre un "+" plutot qu'une "*" dans ta regex t'évite de mettre une condition isset sur $_POST['pseudo'], puisque s'il n'est pas set il renverra une chaine vide et une chaine vide ne correspond pas à cette regex. Enfin bon si tu veux faire un message d'erreur "Entrez un pseudo" il va falloir garder le isset, mais bon laisser le + éventuellement.

Pour ta regex je sais pas comment marche ereg, m'enfin moi on m'a appris que les regex doivent être délimitées, en plus des guillemets. Personellement j'utilise le "#" comme t'aura pu le constater (et comme conseillé sur le SdZ ^^).

Enfin j'te suggére d'ajouter quelques autres caractères dans ta regex, tels que "0-9", "_", "-" (en début ou fin de classe uniquement), "\." (le point il faut l'échapper) et éventuellement quelques accents. Ca me défrise mais malheureusmeent ce genre de caractère plait beaucoup Wink

Une piste si ca ne marche toujours pas, essaye de remplacer $_POST['pseudo'] dans ce que je te donne par "stripslashes($_POST['pseudo'])", j'ai déja remarqué que certaines configurations de serveurs ont tendance à slasher automatiquement les informations envoyées en POST, et vu que tu n'autorises pas le slash ca peut entrainer des problèmes si tu teste l'apostrophe.

Puisque je suis là j'en profite, dans tes requêtes SQl tu mets le login entre apostrophes, si un de tes visiteurs prend un login avec une apostrophe t'aura une jolie erreur MYSQL (sans parler des possibilités de hackage bien entendu). 'faudrait p'tet addslasher ou utiliser des guillemets doubles ...


RE: problème avec ereg? - Rouge - 03-02-2008

Merci pour tous tes conseils, Ziliev, qui me semblent beaucoup plus réalistes que tout ce que j'ai pu lire ici et là (et notamment sur d'autres forums) :heuuu:
je vais donc retester tout celà avec calme (ca fait quand meme 1 semaine que je galère avec celà).


RE: problème avec ereg? - Rouge - 04-02-2008

Ca y est, enfin le résultat obtenu correspond à ce que je souhaitais. :respect:
Code PHP :
<?php
include 'connexion.php';
$login=$_POST['pseudo'];
if(!
preg_match("#^[a-zA-Z \"']+$#",$_POST['pseudo']))
{
echo
'<center>Caractères spéciaux et chiffres sont interdits<br><a href="inscription.php">RETOUR</a></font></center>';
exit;
}
else {
$login= stripslashes($_POST['pseudo']);
}
etc, etc, etc.
J'ai rajouté dans l'insert en table mysql_real_escape_string pour plus de sécurité. Merci Ziliev de m'avoir aiguillé vers la bonne direction.