Jak naprawić błędy w kodzie

0

Cześć. Strona wywala mi 2 błędy (no dobra, jeden to ostrzeżenie) i nie wiem jak je naprawić. Kod w załączniku.

Ostrzeżenie) mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\strona\rejestracja.php on line 39

Błąd) Połączenie nie mogło zostać utworzone: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2

Proszę o pomoc jak to naprawić. Dzięki za odpowiedzi.

2
$ins = $pdo->exec("INSERT INTO `users` (`login`, `password`, `email`, `rejestracja`, `logowanie`, `ip`, `kod`)
						VALUES ('".$login."', '".md5($haslo1)."', '".$email."', '".time()."', '".time()."', '".$ip."', '".rand_string(13)."'");

brakuje nawiasu w miejscu

'".rand_string(13)."')");
0

BTW fundujesz sobie szeroko otwartą furtkę do sql injection. Każdy mający podstawową wiedzę o tym temacie będzie mógł zrobić cokolwiek z Twoją bazą danych.

0

No to jak to naprawić? I jak naprawić ostrzeżenie? Mysql_num_rows() nie działa jak to naprawić?

0

Proszę o odpowiedź, podpowiedź. I dlaczego nie działa mysql num rows?

0

Serio, używasz jednocześnie mysql i PDO (do tego jeszcze bez bindowania) ?
Zacznij pisać po ludzku i obadaj: http://php.net/manual/en/pdostatement.rowcount.php

0

Dzięki. Mówił mi kolega w innym poście, żeby używać PDO, żeby mi nie popsuli bazy. A tu Wy mówicie, że nawet tutaj może popsuć bazę. No to ja już nie wiem. Może mi ktoś wytłumaczyć?

0

Jeszcze jeden błąd. Naprawdę nie wiem, dlaczego on występuję. Próbowałem go naprawić, ale nie umiem. Proszę o pomoc.

<form method="POST" action="logowanie.php">
<b>Login:</b> <input type="text" name="login"><br>
<b>Hasło:</b> <input type="password" name="haslo"><br>
<input type="submit" value="Zaloguj" name="loguj">
</form>

<?php

try {
		$pdo = new PDO('mysql:host=localhost;dbname=website', 'root', '');
		echo 'Połączenie nawiązane!';

		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		
	if (isset($_POST['loguj'])) {
		$login = $_POST['login'];
		$haslo = $_POST['haslo'];
		$ip = $_SERVER['REMOTE_ADDR'];
		$query = $pdo->query("SELECT login, password FROM users WHERE login = '".$login."' AND password = '".md5($haslo)."';");
 
		// sprawdzamy czy login i hasło są dobre
		if ($query->rowCount() > 0) {
			// uaktualniamy date logowania oraz ip
			$pdo->query("UPDATE `users` SET (`logowanie` = '".time().", `ip` = '".$ip."'') WHERE login = '".$login."';");
 
			$_SESSION['zalogowany'] = true;
			$_SESSION['login'] = $login;
			// zalogowany
 
		}
	} else echo "Wpisano złe dane.";

} catch(PDOException $e) {
      echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
}
?>
0

Jak ktoś chce to nawet kwiatkiem się zabije, więc to nie tak, że narzędzie zwalnia Cię z myślenia.

W PDO NIE UŻYWAJ metody query. W ogóle. Po 5 latach doświadczenia powiedzmy, że możesz, bo wtedy będziesz świadomy tego, co robisz, teraz nie jesteś zupełnie.

Tu masz sposób w jaki korzysta się z PDO:
https://secure.php.net/manual/en/pdo.prepared-statements.php

Kluczem jest tutaj bindParam i :nazwa. Proszę zapoznaj się z tematem, poświęć temu minimum godzinę, zanim pójdziesz gdzieś dalej.

0

No to z czego mam korzystać do zapytań, jak nie z query...?

0

Spojrzałeś chociaż do linka podanego przez @dzek69?

0

może coś na zwór tego:

$Login = filter_input(INPUT_POST, 'Login', FILTER_SANITIZE_STRING);
	$Password = filter_input(INPUT_POST, 'Password', FILTER_SANITIZE_STRING);

	if (!empty($Login) && !empty($Password))
		if (strlen($Login) > 3 && strlen($Password) > 5)
		{
			$Stmt = $DataBase->prepare('SELECT login, password FROM users WHERE login = :Login AND password = :Password');
			$Stmt->bindValue(':Login', $Login, PDO::PARAM_STR);
			$Stmt->bindValue(':Password', md5($Password), PDO::PARAM_STR);
			if ($Stmt->execute())
			{
				if ($Stmt->rowCount() == 1)
				{
					
				}
			}
		}

zawsze lepiej sprawdzać jak najwięcej :D

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