Enregistrer mes membres.

Eléphant du PHP | 419 Messages

22 déc. 2008, 15:49

Bonjour,
Je souhaiterais protéger mon enregistrement de mes membres,
pour le pseudo, ne laisser que les lettres et chiffres, [a-z ; A-Z ; 0-9 ].
mail : ne laisser que @ a-Z A-Z 0-9 _ -
etc...
Comment faire pour n'autoriser que certaines lettres au lieu de dire plutôt celle que l'on ne veut pas ??
Merci !

Sachant que j'ai ceci :
                //Début:  enlever le HTML et les injections SQL
                $input_arr = array();
                foreach ($_POST as $key => $input_arr) {
				
				$interdit=array(">", "<",  ":", "*", "/", "|", "?", '"', '<', '>', '\\', '=', '&', ',', ';', '!', '%', '§', 'µ', '$', '¤', '£', '(', ')', '{', '}'
				, '[', ']', '+', '^', '#', '~', '²', '°', '\'', '`', 'Â', 'ù');
				$_POST[$key] = str_replace($interdit, "_", $input_arr);
				}
                //Fin :  enlever le HTML et les injections SQL
                
                extract($_POST); // J'extrait les variables POST. 
Aucun site en création...

Mammouth du PHP | 1353 Messages

22 déc. 2008, 16:14

Bonjour,

je te conseille pour cela d utiliser les expressions regulieres, pour verifier le format de la chaine et n autoriser ainsi que ce qui va bien...

Un exemple / tuto ici
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 453 Messages

22 déc. 2008, 16:15

Salut the_Grinch,

Je crois que ton script est totalement erroné. Ce que tu veux faire est simple à mettre en place :
pour le pseudo, ne laisser que les lettres et chiffres, [a-z ; A-Z ; 0-9 ].
une petite REGEX te suffit amplement* :
if (!preg_match("#[a-zA-Z0-9]#",$login))
  $erreur[]="Votre nom doit comporter que des lettres ou des chiffres";
mail : ne laisser que @ a-Z A-Z 0-9 _ -
Également, tu peux avoir recourt à une REGEX ou tout simplement utiliser la méthode filter_var()* :
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
  $erreur[]="Merci de saisir une adresse courriel valide";
Afin d'éviter les attaques courantes, je peux te proposer de regarder ces méthodes :
- htmlentities()
- htmlspecialchars()
- mysql_real_escape_string()
- strip_tags()

* code fait de tête, j'ai pu faire une petite coquille.

++

Eléphant du PHP | 419 Messages

22 déc. 2008, 19:31

Je te remercie pour ton aide, ça va beaucoup m'aider pour mes futures pages.
J'utilise déjà ces méthodes =) sauf que je me suis dis que c'était mieux de bloquer les caractères spéciaux donc encore moins de risque d'injection. :)
Voilà je te remercie.

Edit: J'ai une autre petite question, comment faire pour vérifier plusieurs champs ( une dizaine ) sans faire 10 fois if elseif elseif etc...
Car non seulement j'ai des conditions pour savoir si le champ est bien remplis mais aussi si il respecte les caractères ...
Je vais voir si avec l'ajax ça fonctionnerais pour vérifier les champs et les caractères champ par champ.
Aucun site en création...

ViPHP
AB
ViPHP | 5818 Messages

22 déc. 2008, 23:00

Pour faire une première vérification, javascript suffira.
Mais on a coutume de faire une seconde vérification en php au cas ou javascript serait désactivé.

Si tu rentres "vérification formulaire javascript" dans google tu auras pas mal d'exemples.

Eléphant du PHP | 453 Messages

22 déc. 2008, 23:05

Malheureusement je n'ai pas apporté avec moi la boule de cristal. Peux tu mettre sur le forum ton formulaire ? Je pourrais mieux comprendre ton petit soucis ;)

Sinon, tu peux faire ceci par exemple* :
try{
  if(strlen($nom)<0 || empty(trim($prenom)) || //etc. )
    $erreur[]="Veuillez remplir correctement le formulaire (prenom, nom, etc.)";
  if(!empty($erreur))
    throw new Exception("Erreur(s) trouvée(s) :");
}catch (Exception $e){
  echo $e->getMessage();
  echo "<ul>";
  for($i=0;$i<count($erreur);$i++){
     echo "<li>".$erreur[$i]."</li>";
  }
  echo "</ul>";
}
*code fait de tête

++

Eléphant du PHP | 419 Messages

22 déc. 2008, 23:20

Merci pour vos reponses.
Mon code est basique :
Champ prénom, champ nom, champ mail et un bouton envoyer.

Je souhaite :
détécter si le champ est vide, si il a bien les caractères qu'il faut et si ce n'est pas le cas, on lui dit.
if isset post prenom
if caractere post prenom

INSERT INTO ...

else
Vous ne devez mettre que des lettres et des chiffres sans accent.

else
Remplissez le champ prénom.

Et cela pour tous les champs. Sauf que si il y en a 10, c'est mal barré... Il n'y a pas un moyen de raccourcir ??
Aucun site en création...