8791 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,

j'ai un script qui vérifie les inscriptions qui fonctionne de façon basique et j'aimerais faire en sorte que les membres ne puissent mettre que des lettres , éventuellement des quotes (apostrophe ') et/ou des guillemets (double quotes ") et que la casse soit respectée...
Voici le début du script, les 2 lignes avec les slashes sont les lignes d'origine qui fonctionnent...


<?php
include 'connexion.php';
if (ereg($_POST['pseudo']="^[a-zA-Z]+")) 
$login=addslashes(stripslashes($_POST['pseudo']));
else $login="";
//if(isset($_POST['pseudo']))$login=addslashes(stripslashes($_POST['pseudo']));
//else $login="";
if(isset($_POST['passe']))$passe=addslashes(stripslashes($_POST['passe']));
else $passe="";
etc...........


l'erreur retournée est la suivante:
Warning: Wrong parameter count for ereg() in /mnt/web4/40/58/51658858/htdocs/ins.php on line 4

merci d'avance de votre aide
Modifié par Rouge (04 Feb 2008 - 23:15)
J'ai maintenant 1 parse error ligne 5
Sinon, merci pour le lien, je l'avais déjà visité mais en anglais, c'est encore moins évident à comprendre. Smiley rolleyes


<?php
include 'connexion.php';
ereg('^[a-zA-Z]+',$_POST['pseudo'])
//ereg('^[a-zA-Z]+[a-zA-Z\'\"]',$_POST['pseudo'])
$login=addslashes(stripslashes($_POST['pseudo']));


la ligne 4 est une éventuelle soluce pour accepter les quotes et doubles quotes. Smiley confused
les ereg me rendent fou perso Smiley fache .
ne serait-ce que parce qu'il y a les preg_match aussi.

php est vraiment un language assassin . 2 façons différentes de faire des expressions régulieres moi je dis c'est pas régulier Smiley sweatdrop .

enfin ici pour l'erreur de parsing..... me semble qu'il manque un ; a la ligne 3....

sinon pourquoi fais-tu un stripslashes juste avant un addslashes ça me parait un peu étrange. vu le ereg ça doit servir a rien.

De plus la solution de dew ne doit pas s'employé directement. son ereg doit se placer dans le if que tu avais avant mais il te donne une syntaxe corrigée.
Modifié par CPascal (22 Jan 2008 - 22:31)
Moi aussi ca me rend dingo, j'ai toujours 1 parse error ligne5 Smiley biggol


<?php
include 'connexion.php';
if (ereg('^[a-zA-Z]+',$_POST['pseudo']));
$login=addslashes(stripslashes($_POST['pseudo']));
else $login="";
bla bla bla....
Smiley biggol
C'est pratiquement bon avec ce code là Smiley langue


<?php
include 'connexion.php';
if (ereg('^[a-zA-Z]+',$_POST['pseudo']))$login=addslashes($_POST['pseudo']);
else $login="";


A votre avis, pour accepter les quotes et doubles quotes, cette ligne suivante serait adéquate?

if(ereg('^[a-zA-Z]+[a-zA-Z\'\"]',$_POST['pseudo']))$login=addslashes($_POST['pseudo']);
pour repondre a ta question ce que tu rajoutais a cette ereg ne me semble t'ajouté le droit de mettre un ' ou un " uniquement sur le dernier caractere du pseudo.

ou tous du moins un mot commençant par une partie suivi eventueellement d'un ' ou " suivi de n'importequoi puisqu'il n'y a pas de $ qui dit qu'on arrive a la fin. ( comme il y a un ^ qui dit debut).

Mais tu devrais en plus t'entrainer a gérer ls quotes et double quote autrement.

il y a pas de solution ultime ça depend de la base de données derriere (sql serveur se gere pas comme mysql par exemple ) ,de l'imbrication des techno (js,php,html) même si bien comprendre l'usage de addslashes,stripslashes c'est déjà un debut.
Modifié par CPascal (23 Jan 2008 - 19:43)
a écrit :
Mais tu devrais en plus t'entrainer a gérer ls quotes et double quote autrement.

de ce coté là et pour le cas qui me préoccupe, c'est pas encore gagné Smiley langue
Sinon, j'y suis presque avec le dernier code affiché ci-dessus.. sauf que l'inscription en table (avec quotes et ou doubles quotes est ok) mais le résultat, affichage du pseudo etc tel quel n'affiche rien si ce n'est une page blanche Smiley rolleyes

le bout de script qui vérifie l'inscription et affiche les données dont on parle est:
$login = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));

c'est donc cette ligne là qui doit poser problème car elle n'affiche pas le pseudo avec les quotes (doubles quotes) éventuelles......
$login = mysql_real_escape_string(stripslashes($_POST['pseudo']));

affiche toujours une page blanche Smiley decu
mysql_real_escape_string sert a preparer un element a être inserer dans une base de données mysql.

moralité si c'est pour afficher à l'ecran cela ne sert a rien!!!
a reserver pour les insertions en BDD

et puis une ligne qui fait $login = bidule n'affiche rien.

pas plus qu'une insertion dans la base. si il n'y a que ça et même si ça marche la page restera blanche.

il faudrait regarder dans la base.

sinon un echo $login serait plus interessant.
Modifié par CPascal (24 Jan 2008 - 21:16)
C'est quasiment ok....

<?php
include 'connexion.php';
if (ereg('^[a-zA-Z]+',$_POST['pseudo']))$login=addslashes($_POST['pseudo']);
else $login="";


puis
<?php
session_start() ;
include 'connexion.php';
if (isset($_POST['pseudo']) && isset($_POST["passe"]) && !empty($_POST["pseudo"]) && !empty($_POST["passe"]))
{
//on recupere les données du formulaire
$login = ($_POST['pseudo']);
etc...............


tout marche impec mais j'ai toujours le meme soucis, tous les caractères spéciaux et les chiffres sont pris puis enregistrés dans la table.
Donc ma question ultime demeure : comment modifier le "ereg" afin d'interdire les chiffres et caractères spéciaux (autres que ' et ") Smiley murf
bon mais c'est bien le $login qui te sert a inserer le pseudo dans ta base?

car sinon c'est bizarre bizarre ...vous avez dit bizarre?

il faudrait voir ce que tu ne nous montre pas, a savoir la requete d'insertion pour en dire plus.

pour moi le ereg, bon je suis pas spécialiste (je prefere preg_match c'est plus tendance Smiley biggol ) sauf peut-être que comme je le disais dans un post precedent tu ne mets pas le $ final et donc a la fin du pseudo il peut y avoir tous et n'importe quoi.

essai

if (ereg('^[a-zA-Z]+$',$_POST['pseudo']))
$login=addslashes($_POST['pseudo']);

sinon montre nous l'insertion.

pour rajouter des ' et " je te dirais bien mais www.php.net est dans les choux aujourd'hui et je prefere rien dire sans une doc valable.
Modifié par CPascal (26 Jan 2008 - 21:57)
Voici le dernier test, ca marche toujours pas j'ai meme un parse error ligne 5
<?php
include 'connexion.php';
if(!ereg('^[a-zA-Z].+\'.+\"+$', $_POST['pseudo']))$login=addslashes($_POST['pseudo']) 
{
echo 'Le pseudo est incoorect car il y a des caractères spéciaux';
}
else { 
$login="";
 }
if(isset($_POST['passe']))$passe=addslashes(stripslashes($_POST['passe']));
else $passe="";
if(isset($_POST['email']))$email=$_POST['email'];
else $email="";
if(isset($_POST['sexe']))$sexe=$_POST['sexe'];
else $sexe="";
if(isset($_POST['age']))$age=$_POST['age'];
else $age="";
if(isset($_POST['race']))$race=$_POST['race'];
else $race="";
if(isset($_POST['predef']))$typeava=$_POST['predef'];
else $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</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
        {    	
$sql = "INSERT INTO membres(id, pseudo, passe, email, age, avatar, sexe, race, date_inscri) VALUES ('','$login','$passe','$email','$age','$typeava', '$sexe', '$race', NOW())";

    mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());

}
include 'bravo.htm';
}
}
mysql_close();
?> 
if(!ereg('^[a-zA-Z].+\'.+\"+$', $_POST['pseudo']))$login=addslashes($_POST['pseudo']) 
{


ben oui y a une erreur de parsing. c'est a dire une erreur de syntaxe.

je veux pas être mechant. je suis juste un peu grognon car je suis malade en ce moment Smiley bawling .

M'enfin

comment veux tu coder si tu ne connais pas la syntaxe des opérateurs de base.

et le plus basique de ces opérateurs c'est IF.

If dont depuis plusieurs post dans ce fil tu sembles ignorer les regles.

tiens je t'ai trouvée une explication web pas trop mal.

http://www.commentcamarche.net/php/phpcond.php3

notamment ( mais lis tous )

a écrit :
La syntaxe de cette expression est la suivante :

if (condition réalisée) {
liste d'instructions
}


Remarques:

la condition doit être entre des parenthèses

il est possible de définir plusieurs conditions à remplir avec les opérateurs ET et OU (&& et ||)

par exemple :
l'instruction suivante teste si les deux conditions sont vraies :
if ((condition1)&&(condition2))

L'instruction ci-dessous exécutera les instructions si l'une ou l'autre des deux conditions est vraie :
if ((condition1)||(condition2))

s'il n'y a qu'une instruction, les accolades ne sont pas nécessaires...


je pense que tu dois être capable de trouver par toi même pourquoi il y a une parse error.
Modifié par CPascal (29 Jan 2008 - 23:39)
Changement de style! mais je pense que la syntaxe du ereg déconne encore car c'est toujours le "echo" qui est renvoyé....

<?php
include 'connexion.php';
$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';
} 
<?php 

if (isset($_POST['pseudo'])) {

	$login= ereg('^[a-zA-Z\'"]*$', $_POST['pseudo']);
	if($login==true)
	{
	//le pseudo est correct
	$login="";
	echo 'coucou';
	}
	else
	{
	//le pseudo n'\est pas correct
	echo 'Le pseudo est incorrect car il y a des caractères spéciaux';
	} 

}
?>

<form method="post" action="">
	<input type='text' id='pseudo' name='pseudo' />
	<input type='submit' value='soumettre'>
</form>


en gros je n'ai pas retouché ton code juste rajouté de quoi le tester sur une page indépendante de tous le reste. et un echo coucou en cas de validité.

ben il marche ce code Smiley biggrin

toto
r'tyu

me rendent "coucou"

jghkfjh78
toto__
me rendent "Le pseudo est incorrect car il y a des caractères spéciaux"

car bien sur dans ton ereg les chiffres sont pour l'instant exclu

mettre

$login= ereg('^[0-9a-zA-Z\'"]*$', $_POST['pseudo']);

pour rajouter les chiffres

et sinon comme tu as une étoile au lieu d'un plus dans l'ereg le pseudo vide est valide.

mais ça marche! surement ton pb viens d'ailleurs.
Modifié par CPascal (30 Jan 2008 - 22:36)
le déroulement d emon script pose encore problème Smiley bawling désolé


<?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']));
else $passe="";
if(isset($_POST['email']))$email=$_POST['email'];
else $email="";
if(isset($_POST['sexe']))$sexe=$_POST['sexe'];
else $sexe="";
if(isset($_POST['age']))$age=$_POST['age'];
else $age="";
if(isset($_POST['race']))$race=$_POST['race'];
else $race="";
if(isset($_POST['predef']))$typeava=$_POST['predef'];
else $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();
?> 

l'enchainement des boucles doit merder car j'ai toujours le echo qui s'affiche (echo 'Le pseudo est incorrect car il y a des caractères spéciaux';).................cf les autres else? (passe, sexe, avatar, etc)?
puisque le sommeil venait pas j'ai tenté de voir ton code .

ceci dit le formulaire avec lequel tu envoie les données me manque. j'obtiens pas exactement les mêmes pb que toi avec le mien.

apparemment déjà

if(empty($login) OR empty($passe) OR empty($email)
 OR empty($sexe) OR empty($age) OR empty($race))


(empty($login) vu que $login vaut soit "" soit false ( pas glop dèja la variable qui change de type.

mais le bilan de l'histoire c'est que dans les deux cas cela donne vrai.

je pense que c'est déja une premiere source de pb.

en plus le message d'erreur est pas top quand je l'ai lu j'ai pensé que toutes mes variables etait passées a la trappe alors qu'en fait une seule de pas remplies suffit.

sinon

mysql_query("SELECT * FROM membres WHERE passe='". $passe ."'",$db)


le ,$db te pose pas de pb chez moi si. j'ai plutot un mysql_select_db("pikachu"); dans mon fichier connexion.php.
Modifié par CPascal (01 Feb 2008 - 00:26)
Essaye ceci :
<?php
$pseudo = 'a\'lp\'"ho"nse';

if(ereg('^[a-zA-Z\'"]*$', $pseudo)) {
	echo 'Le pseudo '.$pseudo.' est correct';
} else {
	echo 'Le pseudo '.$pseudo.' est incorrect';
}
?>
Pages :