Page 1 sur 1

Register page / Problème If.Else echo

Posté : 30 juin 2014, 12:59
par Geishin
Bonjour.

Alors voilà, je viens chercher un peu d'aide par ici car j'ai un problème des plus embêtant... |*() Ci-dessous, ma condition $email me renvoi toujours l'echo Invalid Email.
Si je provoque une erreur à la condition du $submit, celà renvoi bien "Information missing", de même que pour $pseudo renvoi bien "Invalid ID", mais quand je provoque un erreur avec $password, ça ne le compte pas et affiche l'erreur de $mail, soit "Invalid Email" (et biensûr idem pour l'email). Ce problème est également valable quand je rempli le formulaire sans erreurs... (echo "Invalid Email" et aucun traitement de données ni de redirection)
Donc là je suis un peu pomé, je ne saurait même pas dire si cela vient de $password ou $email, ou les 2 ! o.o

htmlspecialchars et sha1 sont-ils incompatibles ?

Question au hasard : Lorsque <!DOCTYPE html> est présent dans le code, cela modifie un peu la taille et les définitions CSS de mes <input>. Est-ce normal, doit-je le laisser ?

Merci pour votre aide. :-({|=
<?php
	if(isset($_POST['submit'])){ 
		if(!empty($_POST['pseudo']) && !empty($_POST['password']) && !empty($_POST['email'])){
			$pseudo = htmlspecialchars(stripslashes($_POST['pseudo']));
			if(strlen($pseudo) >= 4 && strlen($pseudo) <= 15){
				$password = htmlspecialchars(sha1($_POST['password']));
				if(strlen($password) >= 6){
					$email = htmlspecialchars(stripslashes($_POST['email']));
					if(preg_match('#^[\w._-]{2,}+@[\w._-]{2,}+\.[a-z]{2,6}$#i', $email)){
						try{
							$bdd = new PDO('mysql:host=localhost;dbname=member', 'root', '');
						}
						catch(Exception $e){
							die('Error: '.$e->getMessage());
						}
						$req = $bdd->prepare('INSERT INTO members(pseudo, password, email) VALUES(:pseudo, :password, :email)');
						$req->execute(array(
							'pseudo' => $pseudo,
							'password' => $password,
							'email' => $email
							));
						header('Location: register.html');
					}else{
						echo '<p class="error"><b>Error:</b> Invalid Email</p>';
					}
				}else{
					echo '<p class="error"><b>Error:</b> Invalid password (Min: 4)</p>';
				}
			}else{
				echo '<p class="error"><b>Error:</b> Invalid ID (Min: 4, Max: 15)</p>';
			}
		}else{
			echo '<p class="error"><b>Error:</b> Informations missing</p>';
		}
	}
?>
Suivi à la ligne du script HTML.
<html>
    <head>
        <title>Test</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0">
        <link rel="stylesheet" href="register.css">
    </head>
    <body>
		<div id="main">
			<div id="regdiv">
				<form id="register" action="register.php" method="post">
					<input class="input" type="text" name="pseudo" placeholder="Character name" style="position: absolute; top: 25px"/>
					<input class="input" type="password" name="password" placeholder="Password" style="position: absolute; top: 62px"/>
					<input class="input" type="email" name="email" placeholder="E-mail" style="position: absolute; top: 99px"/>
					<input id="reg" type="submit" name="submit" value="Register"/>
					<a href="register.html">Skip now...</a>
				</form>
			</div>
		</div>
		<script src="jquery-2.1.0.js"></script>
		<script src="jquery-ui-1.10.4.custom.js"></script>
		<script src="index.js"></script>
    </body>
</html>

Re: Register page / Problème If.Else echo

Posté : 30 juin 2014, 13:20
par MmeRose
Hello,

D'abord avant insert en bdd, ce n'est pas htmlspecialchars que tu dois mettre mais mysql_real_escape_string.
Ensuite, si tu as un Invalid email, c'est que celui que tu tentes d'enregistrer ne remplit pas les conditions de ta regex. Donc modifie ta regex.

Re: Register page / Problème If.Else echo

Posté : 30 juin 2014, 13:40
par MmeRose
J'ai dit une bêtise, pardon.

if (!empty($_POST['email']) && preg_match( taregex,$_POST['email']))
{$email =mysql_real_escape_string($_POST['email']); }

Si tu restes avec Invalid email, c'est un problème de regex.

En ce qui concerne le password, tu ne dois pas lui mettre de mysql_real_escape_string puisqu'il sera crypté en SHA1.

Re: Register page / Problème If.Else echo

Posté : 30 juin 2014, 14:02
par sirakawa
Pour teter l'emailen particulier, il existe http://us2.php.net/manual/fr/function.filter-var.php avec FILTER_SANITIZE_EMAIL et FILTER_VALIDATE_EMAIL
Par ailleurs je comprends mal :
if(strlen($password) >= 6){
$email = htmlspecialchars(stripslashes($_POST['email']));

Re: Register page / Problème If.Else echo

Posté : 30 juin 2014, 14:48
par MmeRose
Ah oui, j'avais pas vu !

Tu dois faire toutes les vérifs concernant un champ avant de le "formater" (avec mysql_real_escape_string, ou pour le password avec SHA1 uniquement) pour l'insertion en base de données. Et ce n'est pas ce que tu fais.
Toi tu fais if (!empty($_POST['password'])) {$pass= htmspecialchars($_POST['password']); puis ensuite tu passes à un autre champ #-o et vérifies ensuite si le champ précédent fait bien += 4 caractères ! Non non non !
D'abord tu dois vérifier si ton champ remplit bien toutes conditions attendues, et enfin, si oui, $champ= mysql_real_escape_string($_POST['champ']); , et ainsi de suite pour chaque champ

Bon courage, il en faut pour apprendre php !