Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] logowanie
Forum PHP.pl > Forum > Przedszkole
kyan
Witam mam problem z logowaniem na sesjach i z pobieraniem danych z MySQL.
Stworzyłem taki formularz:
  1. <form action="login.php" method="post">
  2. <table border="0">
  3. <tr>
  4. <td>Użytkownik:</td>
  5. <td><input type="text" size=10 name="username"></td>
  6. </tr>
  7. <tr>
  8. <td>Hasło:</td>
  9. <td><input type="password" size=10 name="password"></td>
  10. </tr>
  11. <input type=submit name="submit" value="Zaloguj się">
  12. </form>


i taki plik login.php
  1. <?php
  2. $db = mysql_connect("localhost", "kyan_kyan", "7531598426");
  3. mysql_select_db("kyan_korki");
  4. if (empty($_POST["name"]) or ($_POST["password"]))
  5. {
  6.    echo "Wprowadź nazwę użytkownika i hasło";
  7. }
  8. else
  9. {
  10.   $query = "SELECT name, password FROM users where name='".$_POST["name"]."'";
  11.   $result = mysql_query($query);
  12.   $row = mysql_fetch_array ($result, MYSQL_ASSOC);
  13.   if($row);
  14.   {
  15.    session_start();
  16.        $_SESSION['name'] = $row['name'];
  17.        $_SESSION['password'] = $row['password'];
  18.        header ("Location: dodaj.php");
  19.    }
  20. }
  21. ?>

Problem polega na tym, że cokolwiek wpisze lub nie wpisze to wyświetla się komunikat "Wprowadź nazwę użytkownika i hasło". Tak jakby tej drugiej części, else, w ogóle nie widziało. No ale ta druga część jest w porządku... byłbym bardzo wdzięczny za wszelkie wskazówki.
_olo_1984
  1. <?php
  2. if (empty($_POST["username"]) or empty($_POST["password"]))
  3. ?>
Victor152
  1. <?php
  2. if (empty($_POST["name"]) || empty($_POST["password"]))
  3. ?>


smile.gif
EdeusEx
A żeby było ładniej:
  1. <?php
  2.  
  3. $db = mysql_connect("localhost", "kyan_kyan", "7531598426");
  4. mysql_select_db("kyan_korki", $db);
  5.  
  6. if (empty($_POST["name"]) || empty($_POST["password"]))
  7. {
  8.   echo "Wprowadź nazwę użytkownika i hasło";
  9. }
  10. else
  11. {
  12.  $result = mysql_query("SELECT name, password FROM users where name='".$_POST["name"]."'");
  13.  if (mysql_num_rows($result)>0)
  14.  {
  15.    $row = mysql_fetch_assoc($result);
  16.        $_SESSION['name'] = $row['name'];
  17.        $_SESSION['password'] = $row['password'];
  18.        Header ("Location: dodaj.php");
  19.  }
  20. }
  21. ?>
erix
~Victor152, przecież to jest to samo (jeśli chodzi o logikę || i OR). :|

A problem tkwi w nazwach sprawdzanych pól.
kyan
erix masz rację w formularzu jest username a w login.php jest name, już poprawiłem formularz dałem też tak jak napisał EdeusEx.
Nadal jest tak jak było, nie ważne co to pojawia się ten komunikat, jakby w ogóle nie widziało drugiej części skryptu
erix
  1. <?php
  2. if (empty($_POST["name"]) or ($_POST["password"]))
  3. ?>

A masz drugie empty" title="Zobacz w manualu PHP" target="_manual? snitch.gif
likedat
Ponadto skrypt jest podatny na ataki SQL Injection winksmiley.jpg
kyan
No mam tak jak podał EdeusEx. Czyli drugie empty jest.
EdeusEx
Zamień to "name" na "username" ...

  1. <?php
  2.  
  3. $db = mysql_connect(&#092;"localhost\", \"kyan_kyan\", \"7531598426\");
  4. mysql_select_db(&#092;"kyan_korki\", $db);
  5.  
  6. if (empty($_POST[&#092;"username\"]) || empty($_POST[\"password\"]))
  7. {
  8.  echo &#092;"Wprowadź nazwę użytkownika i hasło\";
  9. }
  10. else
  11. {
  12. $result = mysql_query(&#092;"SELECT name, password FROM users where name='\".$_POST[\"username\"].\"'\");
  13. if (mysql_num_rows($result)>0)
  14. {
  15.   $row = mysql_fetch_assoc($result);
  16.       $_SESSION['name'] = $row['name'];
  17.       $_SESSION['password'] = $row['password'];
  18.       Header (&#092;"Location: dodaj.php\");
  19. }
  20. }
  21. ?>
kyan
EdeusEx, zmieniłem już, że w formularzu oraz w login.php jest tak samo czyli name, a to co podałeś to złe jakieś jest, to w poprzednim poście.
potreb
Pokaż cały kod PHP razem z formem.
kyan
  1. <form action="login.php" method="post">
  2. <table border="0">
  3. <tr>
  4. <td>Użytkownik:</td>
  5. <td><input type="text" size=10 name="name"></td>
  6. </tr>
  7. <tr>
  8. <td>Hasło:</td>
  9. <td><input type="password" size=10 name="password"></td>
  10. </tr>
  11. <input type=submit name="submit" value="Zaloguj się">
  12. </form>


  1. <?php
  2.  
  3. $db = mysql_connect("localhost", "kyan_kyan", "*");
  4. mysql_select_db("kyan_korki", $db);
  5.  
  6. if (empty($_POST["name"]) || empty($_POST["password"]))
  7. {
  8.  echo "Wprowadź nazwę użytkownika i hasło";
  9. }
  10. else
  11. {
  12. $result = mysql_query("SELECT name, password FROM users where name='".$_POST["name"]."'");
  13. if (mysql_num_rows($result)>0)
  14. {
  15.   $row = mysql_fetch_assoc($result);
  16.       $_SESSION['name'] = $row['name'];
  17.       $_SESSION['password'] = $row['password'];
  18.       Header ("Location: dodaj.php");
  19. }
  20. }
  21. ?>
ArekJ
Może spróbuj zamiast
  1. <?php
  2. $row = mysql_fetch_assoc($result);
  3. ?>

Dać
  1. <?php
  2. $row = mysql_fetch_array($result);
  3. ?>
potreb
  1. <?php
  2. if (empty($_POST['name']) && empty($_POST['password']))
  3. ?>


lub możesz:
  1. <?php
  2. if(!$_POST['name'] && !$_POST['password'])
  3. ?>


Nie wiem dlaczego, ale między or a and jest różnica, ktoś ci napisał warunek z or, dla którego wystarczy jedna zmienna.

I co ma mysql do warunku??
kyan
Po daniu
  1. <?php
  2. if(!$_POST['name'] && !$_POST['password'])
  3. ?>

tego, nie wyświetlał się już ten komunikat, ale strona stała w miejscu. Więc dałem tak:
  1. <?php
  2.  
  3. $db = mysql_connect("localhost", "kyan_kyan", "*");
  4. mysql_select_db("kyan_korki", $db);
  5.  
  6. if(!$_POST['name'] && !$_POST['password'])
  7. {
  8.  echo "Wprowadź nazwę użytkownika i hasło";
  9. }
  10. else
  11. {
  12. $result = mysql_query("SELECT name, password FROM users where name='".$_POST["name"]."'");
  13. (mysql_num_rows($result)>0)
  14.  
  15.   $row = mysql_fetch_assoc($result);
  16.       $_SESSION['name'] = $row['name'];
  17.       $_SESSION['password'] = $row['password'];
  18.       Header ("Location: dodaj.php");
  19. }
  20.  
  21. ?>



ale wywala błąd przy tym:
  1. <?php
  2. $row = mysql_fetch_assoc($result);
  3. ?>

A czy w ogóle ta druga część jest w porządku, tzn od else? Zarówno teraz tutaj jak i wcześniej czyli tak:
  1. <?php
  2.  
  3. $db = mysql_connect("localhost", "kyan_kyan", "*");
  4. mysql_select_db("kyan_korki", $db);
  5.  
  6. if (empty($_POST["name"]) || empty($_POST["password"]))
  7. {
  8. echo "Wprowadź nazwę użytkownika i hasło";
  9. }
  10. else
  11. {
  12. $result = mysql_query("SELECT name, password FROM users where name='".$_POST["name"]."'");
  13. if (mysql_num_rows($result)>0)
  14. {
  15.  $row = mysql_fetch_assoc($result);
  16.      $_SESSION['name'] = $row['name'];
  17.      $_SESSION['password'] = $row['password'];
  18.      Header ("Location: dodaj.php");
  19. }
  20. }
  21. ?>
potreb
http://pl.php.net/mysql_fetch_assoc
kyan
No z tego co tutaj wyczytałem to jest ok. Hmm żadnego błędu nie wywala, nie wiem co jest grane..
ArekJ
Daj do zapytania or die(mysql_error)
kyan
Dałem tutaj:
  1. <?php
  2. $result = mysql_query("SELECT name, password FROM users where name='".$_POST["name"].") or die(mysql_error) ;
  3. (mysql_num_rows($result)>0)
  4. ?>

i wtedy wywala błąd przy tym:
  1. <?php
  2. $_SESSION['name'] = $row['name'];
  3. ?>


całość:
  1. <?php
  2.  
  3. $db = mysql_connect("localhost", "kyan_kyan", "*");
  4. mysql_select_db("kyan_korki", $db);
  5.  
  6. if(!$_POST['name'] && !$_POST['password'])
  7. {
  8.  echo "Wprowadź nazwę użytkownika i hasło";
  9. }
  10. else
  11. {
  12. $result = mysql_query("SELECT name, password FROM users where name='".$_POST["name"].") or die(mysql_error) ;
  13. (mysql_num_rows($result)>0)
  14.  
  15.   $row = mysql_fetch_assoc($result);
  16.       $_SESSION['name'] = $row['name'];
  17.       $_SESSION['password'] = $row['password'];
  18.       Header ("Location: dodaj.php");
  19. }
  20.  
  21. ?>


EDIT
brakowało jednego " przy $result teraz wywala myslq_error czyli coś nie tak z tym wszystkim za $result, dobrze mówię? Czy jednak chodzi o łączenie z bazą danych?
potreb
Po co wklejasz kod który jest błędny??

  1. <?php
  2. print_r($_SESSION);
  3. print_r($_POST);
  4.  
  5. $db = mysql_connect("localhost", "kyan_kyan", "*");
  6. mysql_select_db("kyan_korki", $db);
  7.  
  8. if (empty($_POST['name']) && empty($_POST['password']))
  9. {
  10. echo "Wprowadź nazwę użytkownika i hasło";
  11. }
  12. else
  13. {
  14. $result = mysql_query("SELECT name, password FROM users where name='".$_POST["name"]."'") or die(mysql_error());
  15. if (mysql_num_rows($result)>0)
  16. {
  17. $row = mysql_fetch_assoc($result);
  18.     $_SESSION['name'] = $row['name'];
  19.     $_SESSION['password'] = $row['password'];
  20.     header ('location: dodaj.php');
  21. } else {
  22. echo "Wprowadziłes bledny logim sratat";
  23. }
  24. }
  25. ?>


Nie wiem po co tak z tym walczysz, ewidentnie nie znasz podstaw.

Na początku wkleiłem ci,po to aby wyświetlić przesyłane dane, POST czyli tez formularza oraz Session, czyli dane z sesji.

Druga sprawa twój kod nie jest zabezpieczony, hasło powinno być zahashowane md5, poczytaj co to jest sql injection, czyli przesyłasz dane gołe. Dla nich stosuj addslashes lub mysql_real_escape_tring lub co kolwiek byleby było mniej podatne na włamania.

Po trzecie warunek także musi sprawdzać czy login istnieje. I wiele innych rzeczy, które tak naprawdę musisz poznać czytając trochę artów, kursów byle czego i przede wszystkim testować.

Jeszcze jedno:
or die(mysql_error());

Na tym forum podobne przykłady przewijają się miliony razy.
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.