Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Sprawdzanie poprawności skryptu
Forum PHP.pl > Forum > Przedszkole
Piotrwusek
mam takie coś i mi wyrzuca że nie moge sie zalogować

laguj.php
  1. <?
  2. include("config.php");
  3.  
  4.  mysql_connect(HOST, ROOT, PASS) or die ("Nie masz uprawnien");
  5.  
  6. $name=$_POST['name'];
  7. $haslo=$_POST['haslo'];
  8.  
  9.  
  10.  
  11. if ($_POST['name'] == '') {
  12. echo "<font color=#ff0000>Podaj nick</font>";
  13. }
  14.  
  15.  
  16. if ($_POST['haslo'] == '') {
  17. echo "<font c
  18. olor=#ff0000>Podaj hasło</font>";
  19. }
  20.  
  21.  
  22. $n = mysql_query ("SELECT name FROM zsp3a_uzytkownik WHERE id=1");
  23. while($row1 = mysql_fetch_assoc($n))
  24.  
  25.  
  26.  
  27. $nn = mysql_query ("SELECT haslo FROM zsp3a_uzytkownik WHERE id=1");
  28. while($row2 = mysql_fetch_assoc($nn))
  29.  
  30.  
  31.  
  32. if ($row1 == $name&&$row2 == $haslo)
  33.  
  34.  {
  35. $_SESSION['name'] = $_POST['name'];
  36. $_SESSION['haslo'] = $_POST['haslo'];
  37. echo "<font color=#000000>Zostałeś zalogowany...</font>";
  38. }
  39.  else
  40.  {
  41. echo 'Nie zostałeś zalogowany!';
  42.  }
  43.  
  44.  
  45.  
  46. ?>


formularz.php
  1. <form name="" action="loguj.php" method="post">
  2. Name: <input type="text" name="name" value="" />
  3. Hasło: <input type="password" name="haslo" value="" />
  4. <input type="submit" value="Zaloguj" />


w config.php znajduje sie definicja sałych dotyczących łaczności z bazą
UDAT
Cytat(Piotrwusek @ 13.07.2007, 16:42:03 ) *
sory bo to twój temat ale nie chciałem tworzyć nowego tematu a co ja robie zle
  1. <?
  2.  mysql_connect(HOST, ROOT, PASS) or die ("Nie masz uprawnien");
  3.  
  4.  
  5.  
  6.  
  7. if (isset($submit)) {
  8. if ($_POST['username'] == '') {
  9. echo "<font color=#ff0000>Podaj nick</font>";
  10. }
  11.  
  12.  
  13. if ($_POST['password'] == '') {
  14. echo "<font color=#ff0000>Podaj hasło</font>";
  15. }
  16.  
  17.  
  18. $n = mysql_query ("SELECT name FROM zsp3a_uzytkownik WHERE id=1");
  19. $row1 = mysql_fetch_array($n) or die(mysql_error());
  20.  
  21. $nn = mysql_query ("SELECT haslo FROM zsp3a_uzytkownik WHERE id=1");
  22. $row2 = mysql_fetch_array($nn) or die(mysql_error());
  23.  
  24. $name=$_POST['name'];
  25. $haslo=$_POST['haslo'];
  26.  
  27. if ($row1 == $name&&$row2 == $haslo)
  28.  
  29.  {
  30. $_SESSION['name'] = $_POST['name'];
  31. $_SESSION['haslo'] = $_POST['haslo'];
  32. echo "<font color=#000000>Zostałeś zalogowany...</font>";
  33. }
  34. else {
  35. echo "<font color=#ff0000>Złe Hasło...</font>";
  36. }
  37.  
  38. }
  39.  
  40. ?>
  41.  
  42. <form name="" action="index.php" method="post">
  43. Name: <input type="text" name="name" value="" />
  44. Hasło: <input type="password" name="haslo" value="" />
  45. <input type="submit" value="Zaloguj" />


1. Czym jest zmienna $submit?
2. Zdecyduj się czy masz haslo czy password.
3. Te dwa zapytania można zamienić na jedno.
4. Trzeba było stworzyć nowy temat



Cytat(Max Damage @ 13.07.2007, 15:46:02 ) *
No faktycznie usunięcie dolarów pomogło, stronka chyba zatwierdza tylko nic się nie pokazuje. Jeśli chodzi o te nawiasy to nie bardzo wiem gdzie. Próbowałem przenieść tą ostatnią klamrę do 34 lini ale wtedy jest błąd zapytania do bazy. Może jakaś sugestia ?



Dobrze, przenieś nawias do lini 34 a następnie napisz co podaje mysqli_error" title="Zobacz w manualu PHP" target="_manual.
Poza tym twoje zapytanie jest podatne na SQLInjection
Piotrwusek
Mógłby ktoś pomóc bo ~UDAT nic nie pomógł
maziak
No coz, wiele nie zrobie, ale powtórze Ci to co napisał UDAT w nieco innej formie, bo wylapal chyba wszystkie bledy. smile.gif

Zmienna $submit na początku, zdaje sie w ogóle nie mieć wartosci.

Nazwa zmiennej w tablicy $_POST jest okreslana przez atrybut name="" formularza. Ty pole formularza odpowiadajacym za haslo (linia 45) nazwales "haslo", a w linii 14 wprawdzasz, czy ustalona jest zmienna "password"(a nie jest, bo jak by miala byc? tongue.gif ).

Zapytanie do bazy, mogles zalatwic w ten sposob
  1. SELECT name,haslo FROM zsp3a_uzytkownik WHERE id=1

name i haslo - po przecinku, wtedy jedna zmienna(tablica) odwolywala by sie i do hasla i do nazwy uzytkownika.

Zwoja droga, straszny system logowania. Zwlaszcza to where id=1 biggrin.gif
A co jak bedziesz mial dwoch uzytkownikow?tongue.gif

Lepiej dac takie zapytanie
  1. <?php
  2. $haslo=htmlspecialchars($_POST['haslo'])
  3. $name=htmlspecialchars($_POST['name'])
  4. SELECT * FROM zsp3a_uzytkownik WHERE name='".$name."' AND haslo='".$haslo."' ";
  5. ?>

I sprawdzić czy wynik takiego zapytania istnieje, czy ma wiecej niz 0 linijek. Jezeli ma - kombinacja haslo i ID - poprawne. Jezeli nie - niepoprawne.

htmlspecialchars zabezpiecza w pewnym stopniu od SQLInjection.

Oraz szczerze - męczysz się z tym skryptem juz od paru dni, zadajac duzo pytan na ktore odpowiedzi nie trzeba wcale szukać. Wystarczylo by zebyc przerobil pare kursow PHP/MySQL, lub kupil sobie ksiazke (Polecam - PHP i MySQL Vadamecum profesjonalisty - Luke Welling, Laura Thomson). Przerobienie kursow zajmie Ci góra pol dnia, a po przerobieniu ich taki skrypt, w wydaniu duzo bardziej profesjonalnym, zajmie Ci gora - drugie pol winksmiley.jpg
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.