Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL][SOLVED][logowanie - problem
Forum PHP.pl > Forum > Przedszkole
carck3r
Witam
Mam skrypt logowania połączony z bazą danych MySQL. Po wpisaniu odpowiednich danych cały czas pisze, że jestem niezalogowany ("Użyszkodnik niezalogowany"). Co z tym fantem zrobić?
  1. <?php
  2.  
  3. if(isset($userID) && isset($userPASS)){ // Jeżeli użytkownik podjął próbę zalogowania
  4.    $userID = $_POST[&apos;userID&apos;];
  5.    $userPASS = $_POST[&apos;userPASS&apos;];
  6.  
  7.    // łączenie z bazą danych MySQL
  8.    $dbConnect = new mysqli (&apos;localhost&apos;,&apos;root&apos;,&apos;xxxxx&apos;,&apos;users&apos;);
  9.    if(mysqli_connect_errno()){
  10.        echo &apos;Po&#322;ączenie z bazą danych nie powiodło się.&apos;;
  11.        exit;
  12.    }
  13.  
  14.    //zapytanie
  15.    $query = &apos;SELECT * FROM reg_users &apos;
  16.                 .&#092;"WHERE userLOGIN=&apos;$userID&apos;\"
  17.                 .&#092;"and userPASS=&apos;$userPASS&apos;\";
  18.  
  19.    // wykonanie zapytania
  20.    $result = $dbConnect->query($query);
  21.    if($result->num_rows > 0){ // jeżeli dane są w bazie
  22.        $_SESSION[&apos;prawid_uzyt&apos;] = $userID;
  23.    }
  24.    // koniec połączenia z bazą danych
  25.    $dbConnect->close();
  26. }
  27. ?>



Strona główna

  1. <?php
  2. if(isset($_SESSION[&apos;prawid_uzyt&apos;])){
  3.        echo &apos;Logowanie zako&#324;czone sukcesem.
  4. &apos;;
  5.        echo &apos;Twój login to: &apos;.$_SESSION[&apos;prawid_uzyt&apos;];
  6.        echo &apos;[url="http://%5C%22wyloguj.php"]Wyloguj si&#281;[/url]
  7. &#092;"&apos;;
  8.    }
  9.  
  10.    else
  11.    {
  12.        if(isset($userID)){
  13.            echo &apos;Zalogowanie nieudane.&apos;;
  14.        } else {
  15.            echo &apos;U&#380;yszkodnik niezalogowany.&apos;;
  16.        }
  17.  
  18.        // Tworzenie formularza, gdy użyszkodnik jest niezalogowany
  19.        ?>


Login

Hasło
nospor
a co to ma do obiektowki? Przenosze.

No i sprawdzaj czy przypadkiem nei masz bledow w zapytaniach, bo masz...
carck3r
  1. <?php
  2. //zapytanie
  3.    $query = 'SELECT * FROM reg_users '
  4.                 ."WHERE userLOGIN='$userLOGIN'"
  5.                 ."and userPASS='$userPASS'";
  6. ?>

Poprawiłem, jednak cały czas nie działa.
nospor
dalej masz blad zapytania.
No weź wyswietl sobie to zapytanie jak wyglada po wygenerowaniu, wyswietl sobie blad jaki konkretnie dostajesz to moze dojdziesz. No musisz sam radzic sobie z tak banalnymi rzeczami

edit: sorki, myslalem ze taka konstrukcja : where cos='cos'AND
bez spacji przed AND da nam blad zapytania. Ale sprawdzilem teraz u siebie i nie dalo bledu.

Tak czy siak wyswietl sobie to zapytanie, wstaw do PMA i zobacz czy dostaniesz jakies wyniki
carck3r
  1. <?php
  2. SELECT *
  3. FROM reg_users
  4. WHERE userLOGIN = 'rootek'
  5. AND userPASS = 'tajne'[/code]
  6. ?>

W PMA wyświetliło:
Kod
2      rootek      tajne

A jak wpisze na stronę, to już nic się nie dzieje.

Może w pozostałeś części kodu jest coś nie tak?
nospor
1) A sprawdzales czy weszlo ci do tej linii:
$_SESSION['prawid_uzyt'] = $userID;
?
Daj tam w tym ifie jakies echo

2) Moze sesji ci nie tworzy bo lecą jakies naglowki
Daj to :
http://nospor.pl/php-faq-n29.html#faq-2
na samym poczatku, to zobaczysz bledy jesli jakies są
carck3r
1) Wstawiłem echo:
  1. <?php
  2. // wykonanie zapytania
  3.    $result = $dbConnect->query($query);
  4.    if($result->num_rows > 0){ // jeżeli dane są w bazie
  5.        $_SESSION['prawid_uzyt'] = $userID;
  6.        echo "asdasdasd";
  7.    }
  8. ?>

Po odświeżeniu strony i wpisaniu prawidłowych danych napis 'asdasdasd' nie wyświetla się, więc jest coś nie tak smile.gif. Tylko co?

2) Wstawiłem to na początek skryptu:
  1. <?php
  2. ini_set('display_errors','1');
  3. ?>

Ale po odświeżeniu strony nie wyświetla się żaden error.

A sesja działa:
Kod
Name    PHPSESSID
Value    4919c750392232ccd10f71bcdd69e5de
Host    localhost
Path    /
Secure    No
Expires    At End Of Session
nospor
hihi:
if(isset($userID) && isset($userPASS)){ // Jeżeli użytkownik podjął próbę zalogowania
$userID = $_POST['userID'];
$userPASS = $_POST['userPASS'];

Najpierw sprawdzasz czy zmienna jest ustawiona, a dopiero potem ją ustawiasz winksmiley.jpg

ps: choc z drugiej strony do echo $query ci doszlo... magic... or register_globals winksmiley.jpg

wyswetl sobie jeszcze ewentualnie blad zapytania bo moze jednak cos jest nie tak: blad polaczenia bazy lub inne
carck3r
biggrin.gif Działa! Dzięki.

BTW: Wyświetla mi błędy:
Kod
Notice: Undefined index: userLOGIN in /var/www/logowanie.php on line 7

Notice: Undefined index: userPASS in /var/www/logowanie.php on line 8

Ale loguje się prawidłowo.

Dam cały kod:
  1. <?php
  2. ini_set('display_errors','1');
  3.  
  4.  
  5. $userLOGIN = $_POST['userLOGIN'];
  6. $userPASS = $_POST['userPASS'];
  7. if(isset($userLOGIN) && isset($userPASS)){ // Jeżeli użytkownik podjął próbę zalogowania
  8.    // łączenie z bazą danych MySQL
  9.    $dbConnect = new mysqli ('localhost','root','2w2w2w','users');
  10.    if(mysqli_connect_errno()){
  11.        echo 'Połączenie z bazą danych nie powiodło się.';
  12.        exit;
  13.    }
  14.  
  15.    //zapytanie
  16.    $query = 'SELECT * FROM reg_users '
  17.                 ." WHERE userLOGIN='$userLOGIN'"
  18.                 ." and userPASS='$userPASS'";
  19.  
  20.    // wykonanie zapytania
  21.    $result = $dbConnect->query($query);
  22.    if($result->num_rows > 0){ // jeżeli dane są w bazie
  23.        $_SESSION['prawid_uzyt'] = $userLOGIN;
  24.        echo "asdasdasd";
  25.    }
  26.    // koniec połączenia z bazą danych
  27.    $dbConnect->close();
  28. }
  29. ?>
  30. <html>
  31.    <body>
  32.    <h1>Strona główna</h1>
  33.    <?
  34.    if(isset($_SESSION['prawid_uzyt'])){
  35.        echo 'Logowanie zakończone sukcesem.<br />';
  36.        echo 'Twój login to: '.$_SESSION['prawid_uzyt'];
  37.        echo '<a href="wyloguj.php>Wyloguj się</a><br />"';
  38.    }
  39.  
  40.    else
  41.    {
  42.        if(isset($userID)){
  43.            echo 'Zalogowanie nieudane.';
  44.        } else {
  45.            echo 'Użyszkodnik niezalogowany.';
  46.        }
  47.  
  48.        // Tworzenie formularza, gdy użyszkodnik jest niezalogowany
  49.        ?>
  50.        <form action="logowanie.php" method="post">
  51.            <table>
  52.                <tr>
  53.                    <td>Login <br />
  54.                    <input type="text" name="userLOGIN" /></td>
  55.                </tr>
  56.                <tr>
  57.                    <td>Hasło <br />
  58.                    <input type="password" name="userPASS" /></td>
  59.                </tr>
  60.                <tr>
  61.                    <td><input type="submit" value="Zaloguj się" /></td>
  62.                </tr>
  63.            </table>
  64.        </form>
  65.        <?
  66.    }
  67.    ?>
  68.    <br />
  69.    <a href = "tylko_czlonkowie.php">Cześć członkowska</a>
  70.    </body>
  71. </html>
Chrom
definiujesz zmienne $userLOGIN = $_POST['userLOGIN']; i $userPASS = $_POST['userPASS']; sprawdź najpierw czy wysyłasz formularz
carck3r
Cytat(Chrom @ 19.02.2009, 10:15:44 ) *
definiujesz zmienne $userLOGIN = $_POST['userLOGIN']; i $userPASS = $_POST['userPASS']; sprawdź najpierw czy wysyłasz formularz


Ok, zrobiłem tak i jest dobrze:
  1. <?php
  2. if(isset($_POST['userLOGIN']) && isset($_POST['userPASS'])){ // Jeżeli użytkownik podjął próbę zalogowania
  3. $userLOGIN = $_POST['userLOGIN'];
  4. $userPASS = $_POST['userPASS'];
  5. ?>


Mam jeszcze jedno pytanie. Zrobiłem stronę wyloguj.php, a jej kod to po prostu:
  1. <?php
  2. $_SESSION = array();
  3. ?>
  4. <a href="logowanie.php">logowanie</a>

Jednak po wejściu na tą stronę zmienna sesji cały czas istnieje, a powinna się usunąć. Dlaczego tak jest?
nospor
no a gdzie session_start() ?
Chrom
raczej
  1. <?php
  2. if(isset($_POST['submit']))
  3. ?>
i używałbym empty sprawdza od razu czy wyrażenie przesłane nie jest puste
nospor
@Chrom przeciez nie ma takiego pola.
Pozatym dzieki temu sprawdza czy ma pola, ktore chce miec
Chrom
racja name ma inne
carck3r
Dobra, dzięki za pomoc. Wszystko działa jak należy.
nospor
a wytlumacz mi jeszcze jakim cudem uzyskales to zapytanie:
SELECT *
FROM reg_users
WHERE userLOGIN = 'rootek'
AND userPASS = 'tajne'

ktore wstawiles do PMA, skoro nie dochodzil ci wogole do momentu wykonywania zapytania? Prosilem przeciez,, byś wyswietlil wygenerowane zapytanie, a ty chyba z palca je sobie do PMA wpisales...
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.