Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Logowanie. While powiela komunikat...
Bureau
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 18.03.2012

Ostrzeżenie: (0%)
-----


Siemanko.

Napisałem sobie prosty skrypt logowania.
Skrypt po zalogowaniu przekierowywuje na index2.php poprzez header().
Niestety gdy używam else aby wyświetlić niepowodzenie operacji, to while mi powiela komunikat.
Dzieje się chyba dlatego ponieważ sprawdzam dwie zmienne ? Nie wiem dokładnie.

Kod przedstawia się następująco:
  1. <?php
  2. if (isset($_POST['submit'])) {
  3. $conn = mysqli_connect("localhost", "", "", "test");
  4.  
  5. $login = $_POST['login'];
  6. $haslo = $_POST['haslo'];
  7.  
  8. $zapytanie = "SELECT * FROM uzytkownicy";
  9. $data = mysqli_query($conn, $zapytanie) or die("MySQL error: " . mysqli_error($conn) . "<hr>\nQuery: $zapytanie");
  10.  
  11. if ($zapytanie) {
  12. while ($row = mysqli_fetch_array($data)) {
  13. if ($login == $row['login'] || $haslo == $row['haslo']) {
  14.  
  15. $_SESSION['zalogowany'] = true;
  16. header("location:index2.php");
  17.  
  18. }
  19. else {
  20. ?>
  21. Niepoprawne dane. Zaloguj sie ponownie!
  22. <a href="logowanie.php" >Logowanie</a>
  23. <?
  24. }
  25.  
  26.  
  27. }
  28.  
  29.  
  30. }
  31.  
  32. }
  33. else {
  34. ?>
  35.  
  36. <form action="logowanie.php" method="post" />
  37. <input name="login" />
  38. <input name="haslo" />
  39. <input type="submit" name="submit" value="Zaloguj" />
  40. </form>
  41.  
  42. <?php
  43. }
  44. ?>


Komunikat:
Kod
Niepoprawne dane. Zaloguj sie ponownie!
<a href="logowanie.php" >Logowanie</a>


Zostaje powielany.
Wiem że jest on w petli, ale jak jest gdzie indziej to nie działa (IMG:style_emoticons/default/smile.gif)
Chciałem zastosować też header(), ale wtedy nawet gdy podam poprawne dane w formularzu to przekierowuje mnie na logwanie.php bez sesji...

Da sie to jakos inaczej wyświetlić ? Próbowałem foreach, ale niestety dzialania tej instrukcji nie kumam do końca.

Dzięki za odpowiedzi (IMG:style_emoticons/default/smile.gif)

Pozdrawiam!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Bureau
post
Post #2





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 18.03.2012

Ostrzeżenie: (0%)
-----


Cytat(kaktus283 @ 10.04.2012, 03:05:23 ) *
A przypadkiem linia 14 nie powinna wyglądać o tak ?
  1. if( $login == $row['login'] && $haslo == $row['haslo'] ) {


To chyba nic nie zmienia ? (IMG:style_emoticons/default/smile.gif) Było też && i był (tak mi sie wydaje) ten sam efekt (IMG:style_emoticons/default/smile.gif)

Cytat
A do czego służy Ci ten while w 13 linijce?


Ten while ? Tak szczrze to chciałbym się go pozbyć, bo to takie moje przyzwyczajenie w pisaniu wyświetlania (IMG:style_emoticons/default/biggrin.gif)
Jakim sposobem mogę inaczej to zapisać aby nie była to pętla ? Bo zdaje mi się że to ona powiela mi komunikat i są same problemy...

Cytat
Dziwny skrypt.
Oczywiście pomijam kwestię bezpieczeństwa powyższego kodu. Kolejna sprawa, koduj hasła choćby MD5.
A teraz ostatnia kwestia, zobacz masz w bazie 100 userów, logujesz, 99 pierwszych nie pasuje do szukanego login, hasło, więc wyświetli komunikat o błędzie, setny zaś pasuje, ale przekierowania już nie zrobi, bo wyświetlił informacje o wcześsiejszym błędzie.


Co do bezpieczeństwa to wiem, jest paskudnie, ale to tak na szybko pisany z pamięci kod.
Ucze sie php, wiem tez ze w md5 koduje sie hasla do bazy i odwrotnie (IMG:style_emoticons/default/smile.gif) to na to przyjdzie czas (IMG:style_emoticons/default/smile.gif) na razie trenuje sobie (IMG:style_emoticons/default/tongue.gif)
Twoje zapytanie miałem wbite w kod, ale nie działało bo nie dawałem chyba średników (IMG:style_emoticons/default/biggrin.gif)

Jak mogę to zrobić bez pętli ? Po prostu po wykonaniu zapytania zamiast while dać:

  1. if ($zapytanie) { ...


?

Pozdrawiam!

Ten post edytował Bureau 10.04.2012, 10:33:34
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 01:02