Erreur de syntaxe quand je veux obliger un utilisateur a mettre un @ et un . dan

gb66 Messages postés 43 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2012 - 19 juil. 2011 à 20:06
gb66 Messages postés 43 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2012 - 14 août 2011 à 04:38
Bonjour a vous et merci de m'aider voila je veux obliger l'utilisateur a mettre un . et un @ pour un champ formulaire mais quand j'ai rajouter ses ligne
$point=strpos($email,".");

$aroba=strpos($email,"@");

if($point=='')
{echo "Votre email doit comporter un point";}

elseif($aroba=='')
{echo "Votre email doit comporter un '@'";}

j'ai eu un message d'erreur a la ligne

else $email="";

mais si jenleve les ligne du . et du @ je suis capable denvoyer les donner l'erreur doit surement etre cave mais je suis debutant alors si vous pouvez maider a trouver l'erreur se serais vraiment apprecié voici le code php

<?php
if(isset($_POST['email'])) $email=$_POST['email'];
$point=strpos($email,".");
$aroba=strpos($email,"@");
else $email="";
if($point=='')
{echo "Votre email doit comporter un point";}
elseif($aroba=='')
{echo "Votre email doit comporter un '@'";}

if(empty($email))

{
echo "Il y a un champs vide remplissez le";
}

else
{
// connexion à la base
$db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());
// sélection de la base

mysql_select_db('w4e',$db) or die('Erreur de selection '.mysql_error());
// on écrit la requête sql
$sql = "INSERT INTO compte(id,email) VALUES('','$email')";
// on insère les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'
'.mysql_error());

// on affiche le résultat pour le visiteur
echo 'Vos infos on été ajoutées.';

mysql_close(); // on ferme la connexion
}
?>

merci encore

35 réponses

gb66 Messages postés 43 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2012
10 août 2011 à 00:04
jai fait une faute de tape $email=mysql_real_escape_string($email);
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
10 août 2011 à 00:08
Oui, c'est beaucoup mieux comme ça. Cependant, Kohntark t'a donné d'autres conseils que tu devrais appliquer.
0
gb66 Messages postés 43 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2012
10 août 2011 à 00:41
jenleve les or die?ou je les remplace c sa le conseil qui manque messemble qu il en avais pas dautre
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
10 août 2011 à 08:27
Re,

jenleve les or die?ou je les remplace

Ca c'est à toi de voir.
Comme je le disais précédemment il ne faut en aucun cas fournir des informations sur ta base de données à l'utilisateur. Le problème n'est pas le "or die()" mais ce qu'il contient, à savoir mysql_error()
En procédant ainsi, si ça plante :
- au mieux l'utilisateur verra un message qu'il ne comprends pas et dont il se contrefous
- si l'utilisateur n'est pas un utilisateur "lambda" il pourra se servir des informations données par mysql_error() : nom d'une table, requête passée, etc ...
C'est d'ailleurs souvent ce genre d'indices cumulés qui permettent d'entrer sans autorisation dans une base de données.
Il en va de même pour les erreurs PHP qui ne doivent en aucun cas être affichées en production (cf doc error_reporting())

Bref, mysql_error() est à proscrire, mais ça n'empêche nullement de tester le bon déroulement des actions sur la DB :

Sans arrêter le script :
$sql = "INSERT INTO compte(id,email) VALUES('','$email')"; 
if(false === mysql_query($sql)) {
echo 'une erreur s\'est produite lors de la mise à jour de vos informations';
} else {
echo 'Vos infos on été ajoutées.'; 
}


En stoppant l’exécution du script :
mysql_query($sql) or die('vos informations n\'ont pu être mise à jour');



if(!filter_var($email=$_POST['email'], FILTER_VALIDATE_EMAIL))

=>
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))




Cordialement,


Kohntark -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gb66 Messages postés 43 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2012
10 août 2011 à 21:09
merci mais je ne reussi pu denvoyer des donner a la base de donner voici le code avec des chose de rajouter jobtien toujours la meme erreur pourtan mes champs sont tous remplis l'erreur ses 'Attention aucun champs ne peut rester vide'


<?php

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) $email=$_POST['email'];
else $email="";

if(!filter_var($_POST['confirmEmail'], FILTER_VALIDATE_EMAIL)) $confirmEmail=$_POST['confirmEmail'];
else $confirmEmail="";

if(isset($_POST['password']))      $password=$_POST['password'];
else      $password="";

if(isset($_POST['confirmpassword']))      $confirmpassword=$_POST['confirmpassword'];
else      $confirmpassword="";

if(empty($confirmEmail) OR empty($email) OR empty($password) OR empty($confirmpassword))

{ 
    echo 'Attention aucun champs ne  peut rester vide !'; 
 }
     elseif(($email!=$confirmEmail)OR($password!=$confirmpassword))
 {
 echo'Les champs de confirmation ne sont pas identique';
}	 
else      
    { 	
   // connexion à la base
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion ');
// sélection de la base  

    mysql_select_db('w4e',$db)  or die('Erreur de selection '); 
 // on écrit la requête sql 

$email=mysql_real_escape_string($email);
 $confirmEmail=mysql_real_escape_string($confirmEmail);
 $password=mysql_real_escape_string($password);
 $confirmpassword=mysql_real_escape_string($confirmpassword);

 // on insère les informations du formulaire dans la table 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'
'); 

    // on affiche le résultat pour le visiteur 
    echo 'Vos infos on été ajoutées.'; 

    mysql_close();  // on ferme la connexion 
    }  
?> 
0
gb66 Messages postés 43 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2012
10 août 2011 à 22:24
et quand j'inverse

if(empty($confirmEmail) OR empty($email) OR empty($password) OR empty($confirmpassword))

par

elseif(($email!=$confirmEmail)OR($password!=$confirmpassword))

j'obtien ce message d'erreur

Les champs de confirmation ne sont pas identique
je cherche mais je n'arrive pas a trouver l'erreur
0
gb66 Messages postés 43 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2012
10 août 2011 à 22:34
c clair qui me manque de quoi mais et tant donner que je ne suis pas un expert comme vous je ne trouve pas j'ai esseyer juste avec une condition et sa marchais
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
11 août 2011 à 08:50
Quand ça bug et que ne s'en sort pas c'est simple, il faut "décomposer" chaque action effectuée et les contrôler à coup de echo, var_dump and co

Par exemple tu dis avoir remplis tous les champs, mais as tu contrôlé réellement ce que le script reçoit ?
En mettant un var_dump($_POST); juste avant ton premier if() tu pourras t'assurer des variables exactes que reçoit ton script (attention aux éventuelles majuscules, au petit espace qui s'est malencontreusement glissé, etc ...)
Tu peux aussi ajouter des echo dans tes conditions pour voir laquelle pose pb.

Si tu ne t'en sors toujours poste ton formulaire.


Cordialement,


Kohntark -
0
gb66 Messages postés 43 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2012
11 août 2011 à 23:56
je voit se que je recois grace a ton var_dump($POST); mais sa ne réussi toujours pas a les envoyer jai le premier message derreur 'Attention aucun champs ne peut rester vide !

mais si je renvoi les meme donner de cette facon la
<?php

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) $email=$_POST['email'];
else $email="";

if(!filter_var($_POST['confirmEmail'], FILTER_VALIDATE_EMAIL)) $confirmEmail=$_POST['confirmEmail'];
else $confirmEmail="";

if(isset($_POST['password']))      $password=$_POST['password'];
else      $password="";

if(isset($_POST['confirmpassword']))      $confirmpassword=$_POST['confirmpassword'];
else      $confirmpassword="";

if(empty($confirmEmail) OR empty($email) OR empty($password) OR empty($confirmpassword))

{ 
    echo 'Attention aucun champs ne  peut rester vide !'; 
 }
    	else      
    { 	
   // connexion à la base
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion ');
// sélection de la base  

    mysql_select_db('w4e',$db)  or die('Erreur de selection '); 
 // on écrit la requête sql 

$email=mysql_real_escape_string($email);
 $confirmEmail=mysql_real_escape_string($confirmEmail);
 $password=mysql_real_escape_string($password);
 $confirmpassword=mysql_real_escape_string($confirmpassword);

 // on insère les informations du formulaire dans la table 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'
'); 

    // on affiche le résultat pour le visiteur 
    echo 'Vos infos on été ajoutées.'; 

    mysql_close();  // on ferme la connexion 
    }  
?> 
sa marche j'ai enlever cette ligne

elseif(($email!=$confirmEmail)OR($password!=$confirmpassword))
{
echo'Les champs de confirmation ne sont pas identique';
}

il manque une fonction mais laquelle si jesseai de cette facon la
if(($email!=$confirmEmail)OR($password!=$confirmpassword))
{
echo'Les champs de confirmation ne sont pas identique';
}

elseif(empty($confirmEmail) OR empty($email) OR empty($password) OR empty($confirmpassword))

{
echo 'Attention aucun champs ne peut rester vide !';
}

j'obtien lautre mesage d'erreur echo 'Les champs de confirmation ne sont pas identique' mais quand jessai seulement

if(($email!=$confirmEmail)OR($password!=$confirmpassword))
{
echo'Les champs de confirmation ne sont pas identique';
}

sa marche et quand j'essai seulement celle la
sa marche
if(empty($confirmEmail) OR empty($email) OR empty($password) OR empty($confirmpassword))

{
echo 'Attention aucun champs ne peut rester vide !';
}

c'est quand les deux sont la que sa pose probleme y doit manquer quelque chose pour que le if et le elseif fonctione mais quoi
0
gb66 Messages postés 43 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2012
12 août 2011 à 00:52
j'ai modifier le code je réussi a envoyer les donner a la base de donner mais jai le message d'erreur suivant

Le mail de confirmation est vide recomencer le mail est vide recomencer vos info on ete ajouter

premierement je ne compren pas pourquoi il dit quelle sont vide car jai ecrit des adresse email 2ieme chose pourquoi il les envoi a la base de donner si elle sont vide?

voici le code

<?php
if(isset($_POST['NomDeCompte']))      $NomDeCompte=$_POST['NomDeCompte'];
else      $NomDeCompte="";

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) $email=$_POST['email'];
else $email="";

if(!filter_var($_POST['confirmEmail'], FILTER_VALIDATE_EMAIL)) $confirmEmail=$_POST['confirmEmail'];
else $confirmEmail="";


if(isset($_POST['password']))      $password=$_POST['password'];
else      $password="";

if(isset($_POST['confirmpassword']))      $confirmpassword=$_POST['confirmpassword'];
else      $confirmpassword="";



     if(($email!=$confirmEmail)OR($password!=$confirmpassword))
 {
 echo'Les champs de confirmation ne sont pas identique';
}	 
if(empty($NomDeCompte))
{echo'Le nom de compte est vide recomencer';}
 if(empty($confirmEmail))
{echo'Le mail de confirmation est vide recomencer';}
 if(empty($email))
{echo'Le mail est vide recomencer';}
 if(empty($password))
{echo'Le password est vide recomencer';}
 if(empty($confirmpassword))
{echo'Le password de confirmation est vide recomencer';}
 
else      
    { 	
   // connexion à la base
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion ');
// sélection de la base  

    mysql_select_db('w4e',$db)  or die('Erreur de selection '); 
 // on écrit la requête sql 
 $NomDeCompte=mysql_real_escape_string($NomDeCompte);
 $email=mysql_real_escape_string($email);
 $confirmEmail=mysql_real_escape_string($confirmEmail);
 $password=mysql_real_escape_string($password);
 $confirmpassword=mysql_real_escape_string($confirmpassword);
 
    $sql = "INSERT INTO compte(id,NomDeCompte,email,confirmEmail,password,confirmpassword) VALUES('','$NomDeCompte','$email','$confirmEmail','$password','$confirmpassword')"; 
     
    // on insère les informations du formulaire dans la table 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'
'); 

    // on affiche le résultat pour le visiteur 
    echo 'Vos infos on été ajoutées.'; 

    mysql_close();  // on ferme la connexion 
    }  
?> 
0
gb66 Messages postés 43 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2012
12 août 2011 à 01:00
en pensen les email ne sont pas recu dans la base de donné
et autre chose si je fait 2 password different il les envoi a la base de donner quand meme exemple password = 123
password de confirmation=1234

dans la base je vais voir 1234 et 123 et il me dit le message d'erreur les champs de confirmation ne sont pas identique le mail de confirmation est vide le mail est vide vos infos ont ete ajouter


mais je ne veux pas qu'il ajoute l'info si il y a quelque chose qui ne marche pas
0
gb66 Messages postés 43 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2012
12 août 2011 à 01:08
et une derniere chose le seul moyen denvoyer un mail a la base de donner ses en ne mettant pas de @
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
12 août 2011 à 19:10
Re,

Je veux bien t'aider, mais :
Désolé de me répéter :
Si tu ne t'en sors toujours pas poste ton formulaire.

Où est le formulaire ??

Pourquoi ne testes tu plus l'existence de certaines variables (isset()) ?
Vérifie que PHP affiche bien toutes les erreurs(cf doc error_reporting())
(le temps du debug), car tu en as, notamment à l'arrivée sur la page

Pourquoi ne tiens tu pas compte de certaines remarques / codes qui te sont apportés ?
Par exemple le code de mon message du mardi 19 juillet 2011 à 21:26:44
(à adapter bien évidemment)


Tu te compliques inutilement les choses :
Pourquoi passes tu tes variables à '' (vide) si elles n'existent pas ou ne sont pas valides, pour ensuite tester si elles sont vides ?
C'est inutile !

Tu testes la validité de email, puis tu refais un test sur confirmEmail.
C'est inutile !
Si le test email est bon, confirmEmail l'est aussi (étant donné ton test email == confirmEmail)

Tu affectes tes variables $_POST à d'autres variables ($password = $_POST['password'])
Là aussi, c'est inutile.


premierement je ne compren pas pourquoi il dit quelle sont vide car jai ecrit des adresse email

C'est très simple :
if (!filter_var($_POST['confirmEmail'], FILTER_VALIDATE_EMAIL))

=> si la variable post confirmEmail n'est pas un email valide
...
$confirmEmail = $_POST['confirmEmail'];

... on attribue sa valeur à $confirmEmail ...
sinon (donc si l'adresse est valide) ...
$confirmEmail="";

... on définie $confirmEmail à [vide]

Ca ne serait pas l'inverse, non ?

pourquoi il les envoi a la base de donner si elle sont vide?

Parce que la requête à la base de données n'est conditionnée qu'à la validité de $confirmpassword :
if (empty($confirmpassword)) {
    echo'Le password de confirmation est vide recomencer';
} else {
    // connexion à la base


et autre chose si je fait 2 password different il les envoi a la base de donner quand meme exemple password = 123
password de confirmation=1234

même raison que la précédente

en pensen les email ne sont pas recu dans la base de donné

Si, ils le sont, mais puisqu'ils sont vides ...


et une derniere chose le seul moyen denvoyer un mail a la base de donner ses en ne mettant pas de @

C'est bien normal puisque ta fonction filter_var() va retourner false (email invalide), donc $email aura la valeur 'tonEmailSansArobase', puis sera inséré en DB.

Autre chose :
$sql = "INSERT INTO compte(id,NomDeCompte,email,confirmEmail,password,confirmpassword)
VALUES('','$NomDeCompte','$email','$confirmEmail','$password','$confirmpassword')";

Pourquoi stockes tu confirmEmail et $confirmpassword en DB ?
Ca n'a aucune utilité, non ?

Cordialement,

Kohntark -
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
12 août 2011 à 20:12
mysql_query($sql) or die('Erreur SQL !'.$sql.'
');

Grrr ... tu ne tiens pas compte de ce que j'ai dit, re dit et sur expliqué !!

Moi j'arrive sur ton site, j’essaie de faire planter la requête et j'y parviens. Ton serveur me renvoie gentiment un truc du genre :

Erreur SQL !INSERT INTO compte(id,NomDeCompte,email,confirmEmail,password,confirmpassword)
VALUES('','toto','machin@truc.fr','machin@truc.fr','pass','pass')

C'est top de chez top, je connais le nom de ta table, ceux de tes champs et la façon dont tu procèdes pour faire l'insertion.
Rien que ça ça me donne de bonnes chances de m'identifier en admin, d'usurper l'identité d'autres personnes ou de détruire ton site (mais en ce qui me concerne je ne suis pas méchant )

Relis donc mes précédents messages.
Il faut toujours garder à l'esprit que :
[b]
L'utilisateur ne doit en aucun cas connaitre la raison d'une erreur qui n'est pas de son fait./b

D'ailleurs on ne stocke jamais un mot de passe en clair dans une base de données, justement pour se préserver d'un pirate qui parviendrait à afficher le champ 'password' de ta base.
Il faut le hasher avant stockage, ainsi le site ne connait pas le password, mais seulement le hash.
Je te laisse le soin de consulter les multiples tutos et docs qui traitent du sujet (mots clés google et php.net : md5, sha1, crypt, hash)


Cordialement,

Kohntark -
0
gb66 Messages postés 43 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2012
14 août 2011 à 04:38
Merci des conseil mais certain de tes conseil je ne les compren pas et jai obtenu une erreur

<?php
if(!isset($_POST['NomDeCompte']))      $NomDeCompte=$_POST['NomDeCompte'];


if(!isset($_POST['email']) || false === $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    echo 'Email invalide';}


if(!isset($_POST['confirmEmail'])) $confirmEmail="";

if(!isset($_POST['password']))      $password=$_POST['password'];


if(!isset($_POST['confirmpassword']))      $confirmpassword="";




if(empty($NomDeCompte))
{echo'Le nom de compte est vide recomencer';}

 if(empty($email))
{echo'Le mail est vide recomencer';}

 if(empty($password))
{echo'Le password est vide recomencer';}

if(($email!=$confirmEmail)OR($password!=$confirmpassword))
{ echo'Les champs de confirmation ne sont pas identique'; }

else      
    { 	
   // connexion à la base
$db = mysql_connect('localhost', 'root', '')  or die('Erreur');
// sélection de la base  

    mysql_select_db('w4e',$db)  or die('Erreur'); 
 // on écrit la requête sql 
 $NomDeCompte=mysql_real_escape_string($NomDeCompte);
 $email=mysql_real_escape_string($email);
 $password=mysql_real_escape_string($password);
 $Sexe=mysql_real_escape_string($Sexe);
 $Anniversaire=mysql_real_escape_string($Anniversaire);
 $concours=mysql_real_escape_string($concours);
    $sql = "INSERT INTO compte(id,NomDeCompte,email,concours,password,Anniversaire,Sexe) VALUES('','$NomDeCompte','$email','$concours','$password','$Anniversaire','$Sexe')"; 
     
    // on insère les informations du formulaire dans la table 
    mysql_query($sql) or die('Erreur!'); 

    // on affiche le résultat pour le visiteur 
    echo 'Vos infos on été ajoutées.'; 

    mysql_close();  // on ferme la connexion 
    }  
?> 



<html lang="fr">
<head>
<title>Formulaire</title>
</head>
 
<form name="nouvo" id="nouvo"  method="POST" action="formulaire complet.php">
*Nom de compte           : ,
----
*Votre Courriel          : ,
----
*Confirmation du Courriel: ,
----
*Nouveau mot de passe    : ,
----
*Confirmation mot de passe    : 

</form>

</html>



j'obtien l'erreur suivante undefinied variable confirmEmail dans la ligne
if(($email!=$confirmEmail)OR($password!=$confirmpassword))

mais je ne compren pas lerreur

est se qu'il y a d'autre erreur que tu voi ou que jai fait sans le vouloir en esseyant d'appliquer se que tu mexpliquais et je vais me renseigner sur hash, md5, sha1, crypt

lequel est le meilleur selon toi?
0
Rejoignez-nous