• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Poprawność kodu, błędy.

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
+1 głos
305 wizyt
pytanie zadane 25 czerwca 2015 w PHP przez KULTI Obywatel (1,400 p.)

index.html:
 

<!doctype html>
<html>
<head>
<title>Strona logowania !</title>
<meta charset=uft-8>
</head>
<body>
<form action="loguj.php" method="POST">
Login: <input type="text" name="login">
<br />
Password: <input type="password" name="password">
<input type="submit" value="Submit">
</form>
</body>
</html>

loguj.php:
 

<?php
$polaczenie = @new mysqli('localhost', 'root', '', 'ksiegarnia');
if (mysqli_connect_errno() != 0){
	echo '<p> Wystąpił błąd połączenia: ' . mysqli_connect_error() . '</p>';
}
else {
	$login = $_POST['login'];
	$password = $_POST['password'];
	$wynik = @$polaczenie -> query('SELECT * FROM klienci WHERE imie="'$login'" and nazwisko="'$password'"');
	if ($wynik === False)
	{
		echo '<p>Zapytanie nie zostało wykonane poprawnie</p>';
		$polaczenie -> close();
	}
	else
	{
		echo 'Udało się zalogować: . '$login' . ';
	}
$polaczenie -> close();
}
?>

Coś mi tutaj nie działa. Cchciałbym jeszcze jeśli nie wyszuka w bazię tego imienia i nazwiska to znowu przechodziło do index.html i wyświetlało poniżej formularza na czerwono(nieprawidłowy login lub hasło).

4 odpowiedzi

+1 głos
odpowiedź 25 czerwca 2015 przez draghan VIP (106,230 p.)
"Coś mi tutaj nie działa". Aha. I mamy się domyślić, co nie działa? ;)

Jeśli chcesz żeby w index.php wyświetlał się tekst w zależności od zalogowania/niezalogowania, musisz w tym pliku dodać kod php, który np. sprawdzi zmienną sesyjną i na podstawie jej isntnienia/nieistnienia zachowa się w odpowiedni sposób.
+1 głos
odpowiedź 25 czerwca 2015 przez CzlowiekSkrypt Nałogowiec (26,340 p.)
edycja 25 czerwca 2015 przez CzlowiekSkrypt

Mi wpadła w oko źle wykorzystana konkatenacja
echo 'Udało się zalogować: . '$login' . ';  
powinno byc  echo 'Udało się zalogować: ' . $login;

No i po co tyle tych średników w kwerendzie, można napisać tak:

("SELECT * FROM klienci WHERE imie='$login' and nazwisko='$password'")

Sprawdziłem u mnie i po tych poprawkach powinno działać, oczywiście ze względu na brak issetów rzyga notice'ami i źle ulokowane jest  $polaczenie -> close(); no i zapytanie wykonuje się poprawnie nawet dla pustych formularzy ze względu na brak sprawdzenia ich spójności. Select się wykonuje, zwraca pusty wynik a pusty wynik !== false

 

+1 głos
odpowiedź 25 czerwca 2015 przez Comandeer Guru (607,060 p.)
  • Zacznijmy od sprawy dostępności: każde pole formularza (pomijając przyciski ofkorz) MUSI (tak - MUSI) mieć etykietkę w label
  • Dobrym zwyczajem jest podawanie kodowania na samym początku head
  • W pliku od logowania nawet nie sprawdzasz czy ktoś wysłał formularz tylko na pałę przyjmujesz, że tak. Powinieneś to sprawdzać (np. przez sprawdzenie czy $_SERVER['REQUEST_METHOD'] równe jest POST)
  • Wywal wszystkie operatory @ z kodu - błędy lepiej obsłużyć niż je tłumić
  • Wkładasz zmienne z formularza wprost do zapytania - to książkowy przykład podatności SQLi. Radzę poczytać o prepared statements albo przynajmniej zapoznać się z funkcją mysqli_real_escape_string
  • No i w zapytaniu masz źle przeprowadzoną konkatenację stringów. Jak już powinno być:
    'SELECT * FROM klienci WHERE imie="' . $login . '" and nazwisko="' . $password . '"'

    Oczywiście zmienne $login i $password są wcześniej przefiltrowane

  • Może uznasz to za czepianie się, ale słowa typu truefalsenull należy pisać małymi literami (wymaga tego standard PSR)
0 głosów
odpowiedź 25 czerwca 2015 przez krecik1334 Maniak (58,390 p.)
Poczytaj o SQL Injection i encjach HTML. Kod poprawny, ale niebezpieczny.

Podobne pytania

0 głosów
2 odpowiedzi 534 wizyt
pytanie zadane 2 grudnia 2022 w HTML i CSS przez Dawidziu Bywalec (2,630 p.)
0 głosów
0 odpowiedzi 127 wizyt
pytanie zadane 10 stycznia 2019 w HTML i CSS przez misza1597 Nowicjusz (190 p.)
0 głosów
2 odpowiedzi 277 wizyt
pytanie zadane 9 czerwca 2017 w PHP przez Jan Patryk Kowalski Obywatel (1,880 p.)

93,439 zapytań

142,431 odpowiedzi

322,677 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...