Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sprawdzanie poprawności hasła
Forum PHP.pl > Forum > Przedszkole
yugodriver
Cześć,

Mam stronkę na która można się zalogować tylko przy pomocy loginu. W formularzu dodałem miejsce na hasło ale nie wiem jak zrobić zeby je weryfikowało.

Strona główna wyglada tak:

  1.  
  2. </head>
  3.  
  4. <body style="background-color: #99ff66;">
  5.  
  6. <?php
  7. include 'funkcja.php';
  8. polacz();
  9.  
  10. ?>
  11. <form METHOD="GET" ACTION="infost.php"><center>
  12. <p>Wprowadz nazwę użytkownika i hasło:</p>
  13. <input type="text" name="id_index"><br>
  14. <input type="password" name="haslo"><br>
  15. <INPUT TYPE="submit" NAME="ok" VALUE="OK">
  16. </form>
  17.  
  18.  
  19. <?php
  20. rozlacz();
  21. ?>
  22.  
  23. <hr>
  24. <p><center><a href="administracja.htm">PANEL ADMINISTRACYJNY<a></center></p>
  25.  
  26. <div align="right">
  27. <script language="JavaScript" type="text/javascript">
  28. user = "yugodriver";
  29. site = "gmail.com";
  30. document.write('<a href=\"mailto:'+user+'@'+site+'\">');
  31. document.write(user+'@'+site+'<\/a>');
  32.  
  33. </body>
  34. </html>


a tabela w bazie danych tak:

  1. CREATE TABLE student(
  2. imie VARCHAR(15),
  3. nazwisko VARCHAR(32) NOT NULL,
  4. id_index CHAR(5) PRIMARY KEY REFERENCES Oceny,
  5. haslo VARCHAR(10) NOT NULL DEFAULT '0000'
  6. rok_studiow INTEGER(1),
  7. kierunek VARCHAR(50),
  8. pesel CHAR(11),
  9. czesne VARCHAR(10),
  10. adres VARCHAR(15)
  11. );


strona docelowa tak:

  1. <HTML>
  2. <HEAD>
  3. <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=Windows-1250">
  4.  
  5. <TITLE>Informacje dla studenta</TITLE>
  6. </HEAD>
  7. <body style="background-color: #99ff66;" >
  8.  
  9. <?php
  10.  
  11. include 'funkcja.php';
  12.  
  13. polacz();
  14.  
  15. $id_index = $_GET['id_index'];
  16.  
  17.  
  18. $stmt = mysql_query("SELECT * FROM `student` WHERE id_index = '".$id_index."'");
  19.  
  20. $dane = mysql_fetch_assoc($stmt);
  21.  
  22. echo "Imie i nazwisko: {$dane['imie']} {$dane['nazwisko']} <br />
  23. Adres: {$dane['adres']} <br />
  24. Pesel: {$dane['pesel']} <br />
  25. Student {$dane['rok_studiow']}. roku studiów na kierunku {$dane['kierunek']} <br />
  26. Nr indeksu: {$dane['id_index']} <br /><br /><br />
  27. <B>Oceny:</B>";
  28.  
  29. unset($stmt);
  30. $stmt = mysql_query("SELECT przedmioty.nazwa_przedmiot, przedmioty.id_przedmiot as id, ocena, oc
    eny.termin as termin, pracownik.stopien as stopien, pracownik.imie, pracownik.naz
    wisko FROM oceny, przedmioty, pracownik WHERE oceny.id_index = '$id_index' and oceny.id_przedmiot = przedmioty.id_przedmiot and przedmioty.id_pracownika =
     pracownik.id_pracownika"
    );
  31.  
  32. if(!$stmt){
  33. echo 'Komunikat błędu:<br />';
  34. echo '<strong>' . mysql_errno().'</strong>: ' . mysql_error();
  35. }
  36.  
  37.  
  38. echo '<TABLE bgcolor="#FFFFFF" bordercolor=green border=5 width="70%">
  39.  <tr> 
  40.  <th>Nazwa przedmiotu</th>
  41.  <th>Wykładowca</th>
  42.  <th>Sesja</th>
  43.  <th>Ocena</th>
  44.  </tr>';
  45.  
  46. while($row = mysql_fetch_assoc($stmt)){
  47. echo '<tr><td><center>'.$row['nazwa_przedmiot'].'</center></td><td><center>'.$row['stopien'].' '.$row['imie'].' '.$row['nazwisko'].'</center></td><td><center>'.$row['termin'].'</center></td><td><center>'.$row['ocena'].'</center></td></tr>';
  48. }
  49.  
  50. echo '</table>';
  51.  
  52. if($dane['czesne'] != 'tak') {
  53. echo '<B><br /><br /><br /><font color="red" size="5">Proszę uregulować czesne.</font><B>';
  54. }
  55.  
  56.  
  57. rozlacz();
  58.  
  59. ?>
  60. <br><br><br><a href="index.php">wyloguj
  61. </BODY>
  62. </HTML>


Nie bardzo wiem jak to zrobić. Prosze o pomoc
kaszanka
Może po prostu wystarczy utworzyć zapytanie sprawdzające czy jest rekord o podanym użytkowniku oraz haśle typu:
  1. <?php
  2. $id_index = $_GET['id_index'];
  3. $haslo_index = $_GET['haslo'];
  4.  
  5. $stmt = mysql_query("SELECT * FROM `student` WHERE id_index = '".$id_index."' and haslo = '".$haslo_index."'");
  6. ?>
Dodajesz po prostu kolejny warunek do zapytania.
yugodriver
Źle przekazałem swoją myśl wstydnis.gif Chodziło mi raczej o to żeby skrypt sprawdzał czy login i hasło i login pasują do siebie. Jezeli coś jest nie tak to żeby był komunikat dane wpisane niepoprawnie. Wiem, że zadaje dziwne pytania ale jestem bardzo poczatkujacy i bardzo mało potrafie jeszcze a tu mi nagle wyskoczyła taka kobyła na zaliczenie (wykładowca mówił, że będa proste żeczy i żeby sie nie martwić sadsmiley02.gif ). Chcę jeszcze zrobić pole do zmiany hasła. Prubuje to wkomponować w taki formularz:

  1. <?php
  2. echo '<form METHOD="GET" ACTION="infost.php">'
  3. <p>Zmiana hasła:</p><br>
  4. <input type="password" name="haslo">
  5. <INPUT TYPE="submit" NAME="ok" VALUE="OK">
  6. </form>;
  7. ?>


W ksiarzce jest informacja żeby kożystac z komendy update ale nie ma przykładu na formularzu i nie działają mi zadne pomysły jakie przychodza mi do głowy jak to zrobić.
maziak
Tak jak napisał kasznka, tylko chyba nie dokonczyl mysli tongue.gif
Dodajesz po tym jeszcze warunek, ktory sprawdza ilosc wynikow, jezeli ilosc wynikow jest rowna 1, wszystko jest ok, jezeli 0 to znaczy ze nie ma takiej kombinacji ID-haslo,a jezeli wiecej niz 1 to znaczy ze w bazie wystepuje duplikat takiej kombinacji (tez nie dobrze smile.gif ).
  1. <?php
  2. $id_index = $_GET['id_index'];
  3. $haslo_index = $_GET['haslo'];
  4.  
  5. $stmt = mysql_query("SELECT * FROM `student` WHERE id_index = '".$id_index."' and haslo = '".$haslo_index."'");
  6. if (msql_num_rows($stmt) <> 1) {
  7. echo "blablabla źle niedobrze, sprobuj jeszcze raz";
  8. }
  9. ?>



http://php.net.pl/manual/pl/function.msql-num-rows.php


PS. Na temat update wszystko co potrzebne znajdziesz tutaj :
http://dev.mysql.com/doc/refman/5.0/en/update.html

Napisz, jeżeli masz problem z engliszem.
Ogolnie :
  1. UPDATE nazwa_tabeli SET nazwa_kolumny="wartosc" WHERE nazwa_kolumny="warunek"
yugodriver
coś nie tak w lini 66 sad.gif

  1. <HTML>
  2. <HEAD>
  3. <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=Windows-1250">
  4.  
  5. <TITLE>Informacje dla studenta</TITLE>
  6. </HEAD>
  7. <body style="background-color: #99ff66;" >
  8.  
  9. <?php
  10.  
  11. include 'funkcja.php';
  12.  
  13. polacz();
  14.  
  15. $id_index = $_GET['id_index'];
  16. $haslo_index = $_GET['haslo'];
  17.  
  18. $stmt = mysql_query("SELECT * FROM `student` WHERE id_index = '".$id_index."' and haslo = '".$haslo_index."'");
  19. if (msql_num_rows($stmt) <> 1) {
  20. echo "Podałeś złe dane, spróbuj jeszcze raz";
  21.  
  22.  
  23. $dane = mysql_fetch_assoc($stmt);
  24.  
  25. echo "Imie i nazwisko: {$dane['imie']} {$dane['nazwisko']} <br />
  26. Adres: {$dane['adres']} <br />
  27. Pesel: {$dane['pesel']} <br />
  28. Student {$dane['rok_studiow']}. roku studiów na kierunku {$dane['kierunek']} <br />
  29. Nr indeksu: {$dane['id_index']} <br /><br /><br />
  30. <B>Oceny:</B>";
  31.  
  32. unset($stmt);
  33. $stmt = mysql_query("SELECT przedmioty.nazwa_przedmiot, przedmioty.id_przedmiot as id, ocena, oc
    eny.termin as termin, pracownik.stopien as stopien, pracownik.imie, pracownik.naz
    wisko FROM oceny, przedmioty, pracownik WHERE oceny.id_index = '$id_index' and oceny.id_przedmiot = przedmioty.id_przedmiot and przedmioty.id_pracownika =
     pracownik.id_pracownika"
    );
  34.  
  35. if(!$stmt){
  36. echo 'Komunikat błędu:<br />';
  37. echo '<strong>' . mysql_errno().'</strong>: ' . mysql_error();
  38. }
  39.  
  40.  
  41. echo '<TABLE bgcolor="#FFFFFF" bordercolor=green border=5 width="70%">
  42.  <tr> 
  43.  <th>Nazwa przedmiotu</th>
  44.  <th>Wykładowca</th>
  45.  <th>Sesja</th>
  46.  <th>Ocena</th>
  47.  </tr>';
  48.  
  49. while($row = mysql_fetch_assoc($stmt)){
  50. echo '<tr><td><center>'.$row['nazwa_przedmiot'].'</center></td><td><center>'.$row['stopien'].' '.$row['imie'].' '.$row['nazwisko'].'</center></td><td><center>'.$row['termin'].'</center></td><td><center>'.$row['ocena'].'</center></td></tr>';
  51. }
  52.  
  53. echo '</table>';
  54.  
  55. if($dane['czesne'] != 'tak') {
  56. echo '<B><br /><br /><br /><font color="red" size="5">Proszę uregulować czesne.</font><B>';
  57. }
  58.  
  59.  
  60. rozlacz();
  61.  
  62. ?>
  63. <br><br><br><a href="index.php">wyloguj
  64. </BODY>
  65. </HTML>
maziak
W linii 19 co prawda bledu nie moge znalesc :/ ale linie 61-65(usun z 65 ten "}" ) pod wzgledem poprawnosci kodu powinny wygladac tak :
  1. <?php
  2. echo '<form METHOD="GET" ACTION="UPDATE USERS SET PASS='.$haslo.' WHERE NAME='.$id_index.'">
  3. <p>Zmiana hasła:</p><br>
  4. <input type="password" name="haslo">
  5. <INPUT TYPE="submit" NAME="ok" VALUE="OK"></form>';
  6. ?>

Jednak popelniasz tutaj blad myslowy. Nic nie osiagnasz poprzez wstwienie zapytania SQL do formularza tongue.gif
W polu action formularza podaj adres strony ktora wykona zmiane hasla, a w tej wlasnie stronie wykonaj cala procedure zmiany hasla(UPDATE to najzywklejsze zapytanie SQL'a).

Napisz jaki blad wywala w linii 19.
yugodriver
juz sie zamotałem. Teraz to wygląda tak:

  1. <HTML>
  2. <HEAD>
  3. <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=Windows-1250">
  4.  
  5. <TITLE>Informacje dla studenta</TITLE>
  6. </HEAD>
  7. <body style="background-color: #99ff66;" >
  8.  
  9. <?php
  10.  
  11. include 'funkcja.php';
  12.  
  13. polacz();
  14.  
  15. $id_index = $_GET['id_index'];
  16. $haslo_index = $_GET['haslo'];
  17.  
  18. $stmt = mysql_query("SELECT * FROM `student` WHERE id_index = '".$id_index."' and haslo = '".$haslo_index."'");
  19. if (mysql_num_rows($stmt) <> 1) {
  20. echo "Podałeś złe dane, spróbuj jeszcze raz";
  21. }
  22.  
  23. $dane = mysql_fetch_assoc($stmt);
  24.  
  25. echo "Imie i nazwisko: {$dane['imie']} {$dane['nazwisko']} <br />
  26. Adres: {$dane['adres']} <br />
  27. Pesel: {$dane['pesel']} <br />
  28. Student {$dane['rok_studiow']}. roku studiów na kierunku {$dane['kierunek']} <br />
  29. Nr indeksu: {$dane['id_index']} <br /><br /><br />
  30. <B>Oceny:</B>";
  31.  
  32. unset($stmt);
  33. $stmt = mysql_query("SELECT przedmioty.nazwa_przedmiot, przedmioty.id_przedmiot as id, ocena, oc
    eny.termin as termin, pracownik.stopien as stopien, pracownik.imie, pracownik.naz
    wisko FROM oceny, przedmioty, pracownik WHERE oceny.id_index = '$id_index' and oceny.id_przedmiot = przedmioty.id_przedmiot and przedmioty.id_pracownika =
     pracownik.id_pracownika"
    );
  34.  
  35. if(!$stmt){
  36. echo 'Komunikat błędu:<br />';
  37. echo '<strong>' . mysql_errno().'</strong>: ' . mysql_error();
  38. }
  39.  
  40.  
  41. echo '<TABLE bgcolor="#FFFFFF" bordercolor=green border=5 width="70%">
  42.  <tr> 
  43.  <th>Nazwa przedmiotu</th>
  44.  <th>Wykładowca</th>
  45.  <th>Sesja</th>
  46.  <th>Ocena</th>
  47.  </tr>';
  48.  
  49. while($row = mysql_fetch_assoc($stmt)){
  50. echo '<tr><td><center>'.$row['nazwa_przedmiot'].'</center></td><td><center>'.$row['stopien'].' '.$row['imie'].' '.$row['nazwisko'].'</center></td><td><center>'.$row['termin'].'</center></td><td><center>'.$row['ocena'].'</center></td></tr>';
  51. }
  52.  
  53. echo '</table>';
  54.  
  55. if($dane['czesne'] != 'tak') {
  56. echo '<B><br /><br /><br /><font color="red" size="5">Proszę uregulować czesne.</font><B>';
  57. }
  58.  
  59.  
  60. echo '<form method="post" action="infost.php">
  61. <inputy type="password" name="haslo" />
  62. <inputy type="submit" value="zmien haslo" />
  63. </form>';
  64.  
  65.  
  66. if($_POST['haslo']) {
  67.  mysql_query("UPDATE `student` SET `haslo` = '{$_POST['haslo']}' WHERE `student` = '$id_index' LIMIT 1 "); 
  68.  
  69.  
  70. rozlacz();
  71.  
  72. ?>
  73. <br><br><br><a href="index.php">wyloguj
  74.  
  75. </BODY>
  76. </HTML>


A wynik możesz obejrzeć pod adresem:
http://www.dzienniklekcyjny.yoyo.pl/infost...=0000&ok=OK
maziak
W linii 21 brakuje zamkniecia nawiasu klamrowego otwartego w linii 19 " } ".
Nadal jednak zwracam uwage na władowanie zapytania SQL do formularza. To tak nie dziala.

Ah, linia 19 hehe
Fatal error: Call to undefined function: msql_num_rows() in /var/www/sites/yoyo.pl/d/z/dzienniklekcyjny/infost.php on line 19

wcięło Ci "y" w "mysql".
yugodriver
Jaką metoda załatwić kwestie formularza?
Fantazyn
Przesyłanie formularzy, a szczególnie z hasłem powinno być za pomocą metody POST.

A tu mam pytanie: mam wrażenie, że nawet jak wyślę coś metodą POST to i tak mogę tą zmienna potem odczytać $_GET[nazwa_zmiennej] (a mam wyłączone zmienne globalne... to chyba nie jest normalne). Czy PHP nie rozróżnia przy odbieraniu POST od GET?
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.