Skrypt rejestracji - błąd

0

Witam,

Taki problem. Skrypt ma za zadanie rejestrować użytkownika do bazy. Jednakże każda próba kończy się "Istnieje już użytkownik o podanej nazwie". Gdzie może być przyczyna? Z góry dziękuję za pomoc :)

 
if(isset($_POST['submit']))	
{
	$login = trim($_POST['login']);
	$password = trim($_POST['password']);
	$password1 = trim($_POST['password1']);
	
	if(preg_match('@^[a-zA-Z0-9]{3,10}[a-zA-Z0-9]{0,3}$@', $login) == false)
	{
		echo "Login musi zawierać od 3 do 10 liter oraz może zawierać maksymalnie 3 cyfry";
	}
	else if($password !== $password1)
	{
		echo "Hasła różnią się od siebie";
	}
	else 
	{
	try
			   {
				  $pdo = new PDO($pol, $user, $pass);
				  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

				  $stmt = $pdo->prepare('SELECT COUNT(id_usera) FROM users WHERE login = :login');
				  $stmt -> bindValue(':login', $login, PDO::PARAM_STR);
				  $stmt -> execute();
				  //print_r($_POST);
				  $row = $stmt->fetch(PDO::FETCH_ASSOC);
				  print_r($row);
				  if($stmt -> rowCount() !== 0)
				  {
					echo "Istnieje już użytkownik o podanym loginie";
					$stmt->closeCursor();	
				  }
				  else
				  {
				  $stmt1 = $pdo->prepare('INSERT INTO users VALUES(null, :login, :password)');
				  $stmt1 -> bindValue(':login', $login, PDO::PARAM_STR);
				  $stmt1 -> bindValue(':login', $login, PDO::PARAM_STR);
				  $stmt1 -> execute();
				  echo "Zarejestrowano";
				  $stmt1->closeCursor();	
				  }
				  		   
			   }
			   catch(PDOException $e)
			   {
				  echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
			   }
	}
	
}
0

Ja się nie znam na PHP ale to nie jest tak że zapytanie COUNT zawsze w rowCount zwróci 1 (wynik zapytania nawet jeżeli będzie 0 pasujących rekordów)?

0

Fragment dokumentacji

For most databases, PDOStatement::rowCount() does not return the number of rows affected by a SELECT statement. Instead, use PDO::query() to issue a SELECT COUNT(*) statement with the same predicates as your intended SELECT statement, then use PDOStatement::fetchColumn() to retrieve the number of rows that will be returned.

http://php.net/manual/en/pdostatement.rowcount.php

0

Sprawdzaj po prostu, czy wynik zapytania zwrócił Ci wartość (COUNT) większą od zera (jeśli tak to user istnieje).

1 użytkowników online, w tym zalogowanych: 0, gości: 1