Проблем с форма за регистрация

ronaldinho_880

Registered
PHP:
<?php

require 'config.php';
if (isset($_POST['reg']))
{
$name = addslashes($_POST['username']);
$pass1 = addslashes($_POST['pass1']);
$pass2 = addslashes($_POST['pass2']);
$email = addslashes($_POST['email']);

if(strlen($name) > 4)
{
       $q = mysql_query("SELECT username FROM users WHERE username='$name' LIMIT 1") or die (mysql_error());
       if(mysql_num_rows($q) > 0) 
	   {
	       $error = "Заето потребителско име";
	   }  else {
	   if(strlen($pass1) >= 6)
	   {
	        if($pass1 == $pass2)
			{
			     if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+))*$",$email) )
				 {
				     $error = "Невалиден имейл!";
				 }
				 else 
				 {
				     $newPass = md5($pass1);
				     $query = "INSERT INTO users SET username='$name', password='$newPass', email='$email'";
					 mysql_query($query) or die (mysql_error());
				 }
			}  
			else 
			{
			    $error = "Паролите не съвпадат.";
			}
	   }else {
	    $error = "Кратка парола!";
	   }
	   
}
}
else {
    $error = "Кратко име";
}
}
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php print $error; ?>
<form method="post" action="register.php" >
Име: <input type="text" name="username" /></br>
Парола: <input type="password" name="pass1" /></br>
Отново парола: <input type="password" name="pass2" /></br>
Е-мейл: <input type="text" name="email" /></br>
<input type="submit" name="reg" value="Регистрирай се" />
 
</form>


</body>
</html>

Защо не ми извежда error ? Иначе когато всичко е точно се записва в таблицата, проблеми нямам.
 
ronaldinho_880 каза:
С какво това би помогнало на print ф-ята?
Даже не видях, че имаш такава функция.

Както и да е, eregi не се поддържа от PHP >= 5.3.
Може да ти избива грешка или изобщо да не прави проверката.
 
eLite каза:
ronaldinho_880 каза:
С какво това би помогнало на print ф-ята?
Даже не видях, че имаш такава функция.

Както и да е, eregi не се поддържа от PHP >= 5.3.
Може да ти избива грешка или изобщо да не прави проверката.
Знам, че php 5 и 6 не поддържат eregi, но не е в това проблема :?
 
Първо като слагаш проверките във вложени if-ове, имаш шанс да загубиш потребителите. По-добре е да валидираш всичките им полета и да им изкараш евентуално къде са сгрешили. Вместо да ги връщаш за всяко едно поле.

Също така използваш mysql_*, който е deprecated от PHP 5.5.0.

php.net каза:
This extension is deprecated as of PHP 5.5.0, and will be removed in the future.

Вместо това може да използваш mysqli_* или PDO_MySQL.

Код:
<?php

require 'config.php';
if (isset($_POST['reg']))
{
$name = addslashes($_POST['username']);
$pass1 = addslashes($_POST['pass1']);
$pass2 = addslashes($_POST['pass2']);
$email = addslashes($_POST['email']);

$errors = array();

if(strlen($name) > 4)
{
  $errors[] = 'Кратко име';
}

$q = mysql_query("SELECT username FROM users WHERE username='$name' LIMIT 1") or die (mysql_error());
if(mysql_num_rows($q) > 0)
{
  $errors[] = 'Заето потребителско име';
}

if(strlen($pass1) >= 6)
{
  $errors[] = 'Кратка парола.';
}

if(!strcmp($pass1, $pass2))
{
  $errors[] = 'Паролите не съвпадат';
}

if(preg_match("/[-0-9a-zA-Z.+_]+@[-0-9a-zA-Z.+_]+\.[a-zA-Z]{2,4}/", $email))
{
  $errors[] = 'Невалиден email адрес';
}

if(count($errors) == 0)
{
  $newPass = md5($pass1);
  $query = "INSERT INTO users SET username='$name', password='$newPass', email='$email'";
  mysql_query($query) or die (mysql_error());
}

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php 
  if(count($errors) > 0)
  {
    foreach($errors as $e)
    {
      echo $e.'<br />';
    }
  }
?>
<form method="post" action="register.php" >
Име: <input type="text" name="username" /></br>
Парола: <input type="password" name="pass1" /></br>
Отново парола: <input type="password" name="pass2" /></br>
Е-мейл: <input type="text" name="email" /></br>
<input type="submit" name="reg" value="Регистрирай се" />
 
</form>


</body>
</html>
 
По този начин ми изкарва всички възможни грешки. Пиша грешно само потр. име, а то ми извежда
Заето потребителско имеКратка парола.Паролите не съвпадатНевалиден email адрес
 
ronaldinho_880 каза:
По този начин ми изкарва всички възможни грешки. Пиша грешно само потр. име, а то ми извежда
Заето потребителско имеКратка парола.Паролите не съвпадатНевалиден email адрес

Ми, значи са ти грешни всичките въведени данни :D
 
Fakeheal, имаш малка грешка тук -
Код:
if(strlen($name) > 4)
{
  $errors[] = 'Кратко име';
}
и тук:
Код:
if(strlen($pass1) >= 6)
{
  $errors[] = 'Кратка парола.';
}
Трябва да е наобратно :)

п.п. и тук:
Код:
if(!strcmp($pass1, $pass2))
{
  $errors[] = 'Паролите не съвпадат';
}
http://php.net/manual/en/function.strcmp.php каза:
Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.
Най-добре (според мен):
Код:
if($pass1 !== $pass2)
{
  $errors[] = 'Паролите не съвпадат';
}
 
anonimen каза:
...
п.п. и тук:
Код:
if(!strcmp($pass1, $pass2))
{
  $errors[] = 'Паролите не съвпадат';
}
http://php.net/manual/en/function.strcmp.php каза:
Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.
Най-добре (според мен):
Код:
if($pass1 !== $pass2)
{
  $errors[] = 'Паролите не съвпадат';
}

Не е нужно, макар че нейния пример си е грешен. С тоя удивителен отпред, ако паролите съвпаднат ще запише грешка.

PHP:
if ( strcmp($pass1, $pass2) !== 0 )
 

Back
Горе