Skocz do zawartości

Problem z logowaniem


Rekomendowane odpowiedzi

Witam:) Mam pewien problem. Utworzyłem w MySQL tabelę o nazwie Logowanie. Są dwie kolumny: nazwa i haslo. W nazwie jest nazwa użytkownika "Admin" a w haslo jest hasło "test". No i mam taki skrypt:

<?php
  if(!isset($HTTP_POST_VARS['nazwa'])&&!isset($HTTP_POST_VARS['haslo']))
  {
    //Użytkownik musi podać identyfikator i hasło dostępu
?>
    <h1>Zaloguj się</h1>
    Ta strona jest zastrzeżona.
    <form method = "post" action = "zastrz_baza.php">
    <table border = "1">
    <tr>
      <th> Użytkownik </th>
      <td> <input type = "text" name = "nazwa"> </td>
    </tr>
    <tr>
      <th> Hasło </th>
      <td> <input type = "password" name = "haslo"> </td>
    </tr>
    <tr>
      <td colspan = "2" align = "center">
        <input type = submit value = "Zaloguj się">
      </td>
    </tr>
    </form>
<?php
  }
  else
  {
    // połącz sie z MySQL
    $mysql_host = "mysql.cba.pl";
    $mysql_login = "Adamentium";
    $mysql_haslo = "*******";
    $mysql_baza = "thespiderstudio_cba_pl";
    $mysql = mysql_connect($mysql_host, $mysql_login, $mysql_haslo);
    if(!$mysql)
    {
      echo 'Brak połączenia z bazą danych.';
      exit;
    }
    // wybierz właściwą bazę danych
    $mysql = mysql_select_db($mysql_baza);
    if(!$mysql)
    {
      echo 'Błąd wyboru bazy danych.';
      exit;
    }

    // znajdź pasujący wiersz
    $zapytanie = "select count(*) from Logowanie where
                  nazwa = '$nazwa' and
                  haslo = '$haslo'";

    $wynik = mysql_query( $zapytanie );
    if(!$wynik)
    {
      echo 'Nie można wykonać zapytania.';
      exit;
    }

    $ile = mysql_result( $wynik, 0, 0 );

    if ( $ile > 0 )
    {
      // podana kombinacja: identyfikator i hasło jest prawidłowa
      echo '<h1>Oto ona!</h1>';
      echo 'Na pewno jesteś szczęśliwy, że możesz zobaczyć tę stronę.';
    }
    else
    {
      // kombinacja: identyfikator i hasło dostępu jest nieprawidłowa
      echo '<h1>Odejdź stąd!</h1>';
      echo 'Nie jesteś uprawniony do przeglądania tych zasobów.';

    }
  }
?>

No i problem jest taki, że nawet jeżeli wpiszę login i hasło dobre to pokazuje mi, że jest zła kombinacja. Bardzo prosze o pomoc.

Pozdrawiam

Adamentium

Odnośnik do komentarza
Udostępnij na innych stronach

Według mnie ten kod:

select count(*) from Logowanie where
                  nazwa = '$nazwa' and
                  haslo = '$haslo'

Jest całkowicie błędy. Zobacz jak to powinno wyglądać:

http://webmade.org/kursy-online/mysq_fetch...-kurs-mysql.php

Choć to pewnie tylko moje przyzwyczajenie :)

 

Edit: Tymon dobrze gada teraz jest $_POST['input_name'] :P Z kąt ty wziąłeś ten kod?

Odnośnik do komentarza
Udostępnij na innych stronach

A oto i mój system logowania:

 

<?php
$_GET['id'];
//Formularz
if (isset($id)==false)
{
    echo '<form id="logowanie" method="POST" action="site.php?id=login">
    <input type="text" name="login"/><br/>
    <input type="password" name="pass"/><br/>
    <button type="submit">Loguj</button>
    </form>';
}
else if ($id=="login")
{
    $login=$_POST['login'];
    $pass=$_POST['pass'];

    $zmienne = mysql_query("select * from `user` WHERE login='$login' AND pass='$pass'");
    $dane=mysql_fetch_array($zmienne);

    if (isset($dane['login'])){
        echo 'Zostałeś zalogowany!';
    }
    else
    {
        echo "Błędny login lub hasło!";
    } 
}
?>

 

Musisz jeszcze dodać łączenie z bazą i pozmieniać w mysql_query

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Raczej !empty, bo isset zwraca też true dla pustego stringa (czyli dla '').

 

Co do niezadeklarowanych to raz, a dwa, może być kiedyś przypisał login i hasło do tych zmiennych jak chcesz ich użyć?

Odnośnik do komentarza
Udostępnij na innych stronach

<?php
  if(!isset($HTTP_POST_VARS['nazwa'])&&!isset($HTTP_POST_VARS['haslo']))
  {
    //Użytkownik musi podać identyfikator i hasło dostępu
?>
    <h1>Zaloguj się</h1>
    Ta strona jest zastrzeżona.
    <form method = "post" action = "zastrz_baza.php">
    <table border = "1">
    <tr>
      <th> Użytkownik </th>
      <td> <input type = "text" name = "nazwa"> </td>
    </tr>
    <tr>
      <th> Hasło </th>
      <td> <input type = "password" name = "haslo"> </td>
    </tr>
    <tr>
      <td colspan = "2" align = "center">
        <input type = submit value = "Zaloguj się">
      </td>
    </tr>
    </form>
<?php
  }
  else
  {
    // połącz sie z MySQL
    $mysql_host = "mysql.cba.pl";
    $mysql_login = "Adamentium";
    $mysql_haslo = "*******";
    $mysql_baza = "thespiderstudio_cba_pl";
    $mysql = mysql_connect($mysql_host, $mysql_login, $mysql_haslo);
    if(!$mysql)
    {
      echo 'Brak połączenia z bazą danych.';
      exit;
    }
    // wybierz właściwą bazę danych
    $mysql = mysql_select_db($mysql_baza);
    if(!$mysql)
    {
      echo 'Błąd wyboru bazy danych.';
      exit;
    }

    // o to dodane!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    $nazwa = $HTTP_POST_VARS['nazwa'];
    $haslo = $HTTP_POST_VARS['haslo'];

    // znajdź pasujący wiersz
    $zapytanie = "select count(*) from Logowanie where
                  nazwa = '$nazwa' and
                  haslo = '$haslo'";

    $wynik = mysql_query( $zapytanie );
    if(!$wynik)
    {
      echo 'Nie można wykonać zapytania.';
      exit;
    }

    $ile = mysql_result( $wynik, 0, 0 );

    if ( $ile > 0 )
    {
      // podana kombinacja: identyfikator i hasło jest prawidłowa
      echo '<h1>Oto ona!</h1>';
      echo 'Na pewno jesteś szczęśliwy, że możesz zobaczyć tę stronę.';
    }
    else
    {
      // kombinacja: identyfikator i hasło dostępu jest nieprawidłowa
      echo '<h1>Odejdź stąd!</h1>';
      echo 'Nie jesteś uprawniony do przeglądania tych zasobów.';

    }
  }
?>

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

isset zwraca czy wartość jest ustawiona (is = jest, set = ustawiony), więc zwraca czy dana zmienna istnieje (variable_exists w GM), a empty sprawdza czy ma wartosc i zwraca false także dla 0, NULL, FALSE, array() itp.

 

http://php.net/manual/en/function.isset.php

 

$var = '';

// This will evaluate to TRUE so the text will be printed.
if (isset($var)) {
    echo "This var is set so I will print.";
}

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki Tymon. Już działa. Pytaliście skąd to mam. To jest po części przykład z książki trochę zmodyfikowany. Ta książka jest z biblioteki i jest tam php 4.3.0 Dlatego były tam $HTTP_POST_VARS['nazwa']. Napisali, że lepiej zadeklarować długą nazwą, więc tak zrobiłem.

EDIT: Czy dodacie funkcji addslashes() zabezpieczy przed MySQL injection?

Czyli zmieniłem tak:

$nazwa = $_POST['nazwa'];
$haslo = $_POST['haslo'];
addslashes($nazwa);
addslashes($haslo);

Odnośnik do komentarza
Udostępnij na innych stronach

Mam jeszcze jedno pytanie. Podczas łączenia się z bazą funkcją mysql_connect() trzeba podać hasło. W moim skrypcie hasło jest w zmiennej i jest otwartym tekstem. Czy osoby logujące się za pomocą tego skryptu mogą jakoś podejrzeć hasło zapisane w zmiennej? Jeśli tak to jak można je zabezpieczyć?

EDIT: Przepraszam za duble posta :P

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Powiem lepiej. Plik z konfiguracją powinien lądować nie w katalogu public_html, a ponad nim. Wtedy taki plik nie jest absolutnie do odczytania z poziomu www (poza dziurawym skryptem czytającym katalogi, no ale to już kwestia zaprogramowania).

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...