Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Panel logowania - błąd w odczycie kodu (problem)
Forum PHP.pl > Forum > Przedszkole
iki
Cześć i czołem! Jestem nowy na forum i zwracam się do Państwa z problemem. Uczę się PHP od niedawna, dlatego mam problem z tak banalną (jak podejrzewam) rzeczą. Po kilku godzinach szukania kodu w błędzie proszę Was o pomoc.

Podjąłem naukę z kursami Mirosława Zelenta na jego kanale YT i stanąłem w miejscu, który właśnie przedstawię. Wszystko jest zapisane tak, jak było widoczne w filmie. Prezenter zademonstrował, że u niego ten kod zadziałał (wyświetlił się nick usera) z bazy. U mnie wyświetla się błąd: [[Parse error: syntax error, unexpected '"' in C:\xampp\htdocs\nauka\portal\zaloguj.php on line 18"]]
Mam zaimportowane te same bazy danych, co prezenter na YT oraz wszystkie zmiennie są wpisane poprawnie. Czy ktoś mógłby mi pomóc?

Oto kod zaloguj.php:

CODE
<?php

require_once "connect.php";

$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);


if ($polaczenie->connect_errno!=0)

{
echo "Error: ".$polaczenie->connect_errno;
}
else
{
$login = $_POST['login'];
$pass = $_POST['pass'];

$sql "SELECT * FROM uzytkownicy WHERE user='$login' AND pass='$pass'";

if ($rezultat =@$polaczenie->query($sql))
{
$ilu_userow = $rezultat->num_rows;
if ($ilu_userow>0)
{
$wiersz = $rezultat->fetch_assoc();
$user = $wiersz['user'];


$rezultat->free_result();
echo $user;
} else {

}
}


$polaczenie->close();
}





?>


Za pomoc serdecznie dziękuję. Jeśli to jest naprawdę jakiś błachy problem i ten temat nikomu się nie przyda, usunę go zaraz po tym jak Państwo pomogą smile.gif.
viking
W linii 18 masz $sql "SELECT * FROM uzytkownicy WHERE user='$login' AND pass='$pass'";
Brakuje przypisania do zmiennej $sql. Uruchom jakiś porządny edytor typu Netbeans który od razu na czerwono podświetli linię z błędem. Do tego nigdy ale to nigdy nie uzywaj @. Nie będziesz w stanie znaleźć błędu w kodzie. Do tego mam nadzieję że później to poprawia bo w tej linii jest możliwe SQL injection. Zamiast query powinno być prepare - resztę zobacz w dokumentacji.
iki
Używam Notepad++, może być?
https://www.youtube.com/watch?v=Pp578w7C9hE
45-50 minuta - on nie miał tam żadnego przypisania do zmiennej $sql i mu zadziałało? Coś nie tak sadsmiley02.gif Jakie przypisanie powinienem dodać?
viking
Miał, w linii 16.
http://php.net/manual/en/language.operators.assignment.php

Taki materiał może ci pomóc ale nie zwalnia cię to z czytania dokumentacji celem poznawania języka. W stopce mam kilka podstawowych kursów.
Notepad++ można co najwyżej wykorzystywać do szybkiej edycji plików ale na pewno nie do pisania większej ilości kodu.
iki
U mnie 18 linia jest jego 16stą smile.gif
Hmm dziękuję za informację. Pobiorę program, o którym mówisz i zabiorę się za studiowanie "Kurs PHP (część 1): podstawowy opis języka" z Twojej stopki.

O Boże, nie miałem znaku równości po "$sql" PRZEPRASZAM za zawracanie czterech liter... Muszę zacząć nosić okulary. Dziękuję Ci bardzo, temat jest do usunięcia... facepalmxd.gif
viking
To jeszcze tak na marginesie poczytaj o prepare http://php.net/manual/en/mysqli.prepare.php zamiast mysqli_real_escape_string albo, o ogólnym sterowniku PDO. Co gorsza, chociaż jak widzę tłumaczy sql injection, to nie ustawia kodowania ktore ma ogromny wpływ na sposób traktowania znaków. Zdaje się że ten kod jest dalej dziurawy.
iki
Szkoda, że to po angielsku bo nie zrozumiem w 100% ale co nieco się dowiem.
Z "prepare" nie wyświetla nazwy użytkownika, a z "query" wyświetla smile.gif
viking
Bo nie wystarczy tylko zamienić:

  1. $sql = "SELECT * FROM uzytkownicy WHERE user=? AND pass=?";
  2. if ($rezultat = $mysqli->prepare($sql)) {
  3. $rezultat->bind_param("ss", $login, $pass);
  4. $rezultat->execute();
  5. ... i dalej fetch
  6. }


Co więcej, hasło powinno być zawsze przepuszczone przez np funkcję http://php.net/manual/en/function.password-hash.php i z tego kodu powyżej, przy tworzeniu tabeli user UNIQUE, później SELECT * FROM uzytkownicy WHERE user=? LIMIT 1; i na otrzymanym rekordzie http://php.net/manual/en/function.password-verify.php.
iki
Dziękuję Ci za pomoc. Podobno o hashowaniu haseł będzie w następnych odcinkach. Chcę pracować po kolei, aby wszystko zrozumieć. smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.