Page 1 sur 1

Formulaire qui ne veux pas marcher

Posté : 29 mars 2013, 20:33
par damien_55
Bonjour,

J'ai un script de formulaire d'inscription comme suit
<form class="form-horizontal" action="sign_up.php" method="post">
</form>
et voici le php qui gere l'inscription
<?php
//On verifie que le formulaire a ete envoye
if(isset($_POST['username'], $_POST['password'], $_POST['passverif'], $_POST['email'], $_POST['ville_user_id']) and $_POST['username']!='')
{
	//On enleve lechappement si get_magic_quotes_gpc est active
	if(get_magic_quotes_gpc())
	{
		$_POST['username'] = stripslashes($_POST['username']);
		$_POST['password'] = stripslashes($_POST['password']);
		$_POST['passverif'] = stripslashes($_POST['passverif']);
		$_POST['email'] = stripslashes($_POST['email']);
		$_POST['ville_user_id'] = stripslashes($_POST['ville_user_id']);		
	}
	//On verifie si le mot de passe et celui de la verification sont identiques
	if($_POST['password']==$_POST['passverif'])
	{
		//On verifie si le mot de passe a 6 caracteres ou plus
		if(strlen($_POST['password'])>=6)
		{
			//On verifie si lemail est valide
			if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',$_POST['email']))
			{
				//On echape les variables pour pouvoir les mettre dans une requette SQL
				$username = mysql_real_escape_string($_POST['username']);
				$password = mysql_real_escape_string($_POST['password']);
				$email = mysql_real_escape_string($_POST['email']);
				$ville_user_id = mysql_real_escape_string($_POST['ville_user_id']);
				
				//On verifie sil ny a pas deja un utilisateur inscrit avec le pseudo choisis
				$dn = mysql_num_rows(mysql_query('select id from users_site where username="'.$username.'"'));
				if($dn==0)
				{
					//On recupere le nombre dutilisateurs pour donner un identifiant a lutilisateur actuel
					$dn2 = mysql_num_rows(mysql_query('select id from users_site'));
					$id = $dn2+1;
					//On enregistre les informations dans la base de donnee
					if(mysql_query("insert into users_site (id, username, password, email, ville_user_id) values ('".$id."', '".$username."', '".$password."', '".$email."', '".$ville_user_id."')"))
					{
						//Si ca a fonctionne, on naffiche pas le formulaire
						$form = false;
?>
<div class="message">Vous avez bien &eacute;t&eacute; inscrit. Vous pouvez dor&eacute;navant vous connecter.<br />
<a href="connexion.php">Se connecter</a></div>
<?php
					}
					else
					{
						//Sinon on dit quil y a eu une erreur
						$form = true;
						$message = 'Une erreur est survenue lors de l\'inscription.';
					}
				}
				else
				{
					//Sinon, on dit que le pseudo voulu est deja pris
					$form = true;
					$message = 'Un autre utilisateur utilise d&eacute;j&agrave; le nom d\'utilisateur que vous d&eacute;sirez utiliser.';
				}
			}
			else
			{
				//Sinon, on dit que lemail nest pas valide
				$form = true;
				$message = 'L\'email que vous avez entr&eacute; n\'est pas valide.';
			}
		}
		else
		{
			//Sinon, on dit que le mot de passe nest pas assez long
			$form = true;
			$message = 'Le mot de passe que vous avez entr&eacute; contient moins de 6 caract&egrave;res.';
		}
	}
	else
	{
		//Sinon, on dit que les mots de passes ne sont pas identiques
		$form = true;
		$message = 'Les mots de passe que vous avez entr&eacute; ne sont pas identiques.';
	}
}
else
{
	$form = true;
}
if($form)
{
	//On affiche un message sil y a lieu
	if(isset($message))
	{
		echo '<div class="message">'.$message.'</div>';
	}
	//On affiche le formulaire
?>
Le probleme, c'est que toute les variable sont bien postées mais il ne renvoie tout le temps 'Une erreur est survenue lors de l\'inscription.'.

Je bloque.

Re: Formulaire qui ne veut pas marcher

Posté : 29 mars 2013, 21:41
par sirakawa
Pour que ton formulaire fonctionne au lieu de marcher ajoute donc:
<?php
//On verifie que le formulaire a ete envoye
print_r($_POST);
if(isset($_POST['username'], $_POST['password'], $_POST['passverif'], $_POST['email'], $_POST['ville_user_id']) and $_POST['username']!='')
{}
ce qui devrait être la première réaction avant toute discussion.

Re: Formulaire qui ne veux pas marcher

Posté : 30 mars 2013, 11:49
par damien_55
Oui, qui qui fonctionne -), c'est mieux.

J'ai bien vérifier avec firebug, mes variables sont bien postées. Pas de soucis sur les variables.

Code : Tout sélectionner

username=jean123&password=jean123&passverif=jean123&email=jean123%40gmail.com&ville_user_id=139

Re: Formulaire qui ne veux pas marcher

Posté : 30 mars 2013, 14:06
par moogli
salut,

c'est toujours intéressant de savoir que php reçois, car par exemple il y a un "nettoyage" des données issue de l'url (url_decode) et si tu ne le sais pas ben c'est l loose ;), d'où la remarque de sirakawa.


Ensuite, d'après le message d'erreur que tu indique, le problème vient de ta requête SQL qui est foireuse.

donc
1/ Laisse mysql (ou n'importe quel SGBD d'ailleurs) géré l'increment de la clef primaire ce n'est pas le role de l'applicatif de la gérer (d'ailleurs que ce passe t'il si tu supprime un utilisateur, celui qui vient après prend le même numéro ? non c'est la merde pour les jointures. De plus cela ne t'assure en rien de l'unicité de la clef primaire => auto_increment sur la colonne id
2/ utilise une variable pour la requête sql. Pourquoi ? pour pouvoir l'utiliser dans le message d'erreur que tu va afficher en cas d'erreur.
3/ Tu test que mysql_query ne retourne pas false, c'est très bien mais dans ce cas il faut afficher le message d'erreur (du moins en developpement, ou avec une option "debug") sinon tu ne peux pas régler un éventuel problème (qui t’amène ici). => concaténation du message d'erreur avec mysql_error().
4/ pour l'email tu peux utiliser direct filter_var
5/ ne stock pas en clair les mots de passe des utilisateurs. (md5, sh1 à sha512 ou plus complexe si tu le souhaite)
6/ tu devrais vérifier l’existence d'un 'username' identique (sans tenir compte de la casse) afin d'éviter les homonymes ;)

Dernière chose, l'extension mysql est dépréciée et vouée a disparaite, tu devrais passer à mysqli ou PDO :)


@+

Re: Formulaire qui ne veux pas marcher

Posté : 30 mars 2013, 18:27
par damien_55
J'ai résolu le probleme.

Pas de doublon e-mail en base, l'auto incrément de l'id, il me reste à faire le md5 des pass.

@moogli, oui, j'ai vu ça. Tu n'aurais pas quelques tutos à ce sujet (passer de mysql à mysqli), j'ai 2 sites en prod, tout deux fait en mysql. J'aimerai avec si possible un maximum d'équivalence. Merci.

Re: Formulaire qui ne veux pas marcher

Posté : 30 mars 2013, 18:55
par moogli
c'est relativemen simple, si tu reste en procédural, la prlus grosse différence c'est d'ajouter un i (mysqli :)) dasn le nom des fonctionss et la ressource en paramètre.

Pour la connexion : http://www.php.net/manual/fr/mysqli.construct.php
les requetes : http://www.php.net/manual/fr/mysqli.query.php
fecth :http://www.php.net/mysqli_fetch_assoc


@+

Re: Formulaire qui ne veux pas marcher

Posté : 30 mars 2013, 21:25
par sirakawa
Pour les VIP:
Il faudrait peut-être mettre un message fixe sur l'abandon de mysql au profit de mysqli ou PDO.
Je me suis mis à mysqli en objet et c'est extrêmement simple, alors que depuis C++, j'ai abandonné la POO; et j'y trouve quelques avantages, en particulier mysqli_fetch_object...

Re: Formulaire qui ne veux pas marcher

Posté : 30 mars 2013, 22:31
par moogli
on devrait faire un tuto explicatif et fournir le lien c'est surement le plus simple ;)


pour la poo, j'ai du mal à m'en paser, surtout depuis php 5.3 où l'on peu avoir un modèle objet asez sympa.

Par contre je suis absolument contre dans des chose relativement petite (où cela complexifie pour rien) et dans le cas de mise de code procédural car c'est pas la peine de mélanger la chose.

après il est préférable de faire avec ce à quoi est habitué, surtout en maintenance :)


@+

Re: Formulaire qui ne veux pas marcher

Posté : 31 mars 2013, 09:52
par sirakawa
Ok pour le tuto.

Pour la POO, j'ai été enthousiasmé par Smaltalk, déçu rapidement par la complexification dès qu'on dépassait les sujets d'école.
Il y a eu C++ : beaucoup travaillé entre autres avec les étudiants, constaté d'innombrables limites sur des projets de recherche opérationnelle, ou même de simple maths.
J'ai encore donné dans java : j'ai réécrit un paintbrush en java. Mais la complexité des appels et les innombrables modules à charger ont de quoi faire frémir:
a.truc.machin.chose pour obtenir une chose simple.
Ce qui fait que je n'ai même pas regardé PHP objet, d'autant qu'ayant débuté avec PHP 3, je ne crois pas qu'elle existait.