Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z logowaniem (MySQL + PHP), KazdeLogowanieJestPoprawne,NawetPuste
falkor
post 27.02.2005, 03:40:03
Post #1





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 27.02.2005

Ostrzeżenie: (10%)
X----


Pomozcie mi prosze bo totalny blackout przed oczyma mam sad.gif sadsmiley02.gif
Problem tkwi w tym ze po nizsze skrypty laczac sie z baza MySQL za kazdym razem loguja mnie poprawnie bez wzgledu na to co wpisze lub nie wpisze w pola Identyfikator i Haslo.Z gory dzieki!
  1. <table width="827" height="368" border="0" align="center">
  2.   <tr bgcolor="#0066CC">
  3.     <td>&nbsp;</td>
  4.   </tr>
  5.   <tr>
  6.     <td width="738" height="278"><form action="login.php" method="post" enctype="application/x-www-form-urlencoded" name="logowanie" target="_self" id="logowanie">
  7.       <table width="331" height="121" border="0" align="center">
  8.         <tr>
  9.           <td width="786"><fieldset><legend>Identyfikator</legend>
  10.               <p>
  11.                 <input name="id" type="text" id="id" size="30" maxlength="30" />
  12.               </p>
  13.           </fieldset> </td>
  14.         </tr>
  15.         <tr>
  16.           <td><fieldset><legend>Hasło</legend>
  17.               <p>
  18.                 <input name="pass" type="password" id="pass" size="32" maxlength="32" />
  19.               </p>
  20.           </fieldset> </td>
  21.         </tr>
  22.         <tr>
  23.           <td><input name="submit" type="submit" id="submit" value="Zatwierdź" />
  24.             <input name="reset" type="reset" id="reset" value="Wyczyść" /></td>
  25.         </tr>
  26.       </table>
  27.     </form></td>
  28.   </tr>
  29.   <tr bgcolor="#0066CC">
  30.     <td>&nbsp;</td>
  31.   </tr>
  32. </body>
  33. ?>

  1. <?php
  2. if(!isset($_POST['id']) && !isset($_POST['pass']))
  3. {
  4.     echo &#092;"<h1>Proszę się zalogować!!!</h1>\";
  5. }
  6. else
  7. {
  8.     $id = $_POST['id'];
  9.     $pass = $_POST['pass'];
  10.     //Łaczenie z bazą danych mysql
  11.     $db_conn = @mysql_connect ('localhost',$id);
  12.     if(!$db_conn)
  13.     {
  14.         echo &#092;"Nie można połączyć się z bazą danych.\";
  15.         exit;
  16.     }
  17.     //Wybór właściwej bazy danych
  18.     $db_sel = @ mysql_select_db ('ebank',$db_conn);
  19.     if(!$db_sel)
  20.     {
  21.         echo &#092;"Nie można wybrać bazy danych.\";
  22.         exit;
  23.     }
  24.     
  25.     //Zapytanie do bazy danych, które celem jest sprawdzenie,
  26.     //czy istnieje rekord odpowiadający wprowadzonym danym
  27.     
  28.     $query = &#092;"SELECT count(*) FROM konta WHERE
  29.             Identyfikator = '$id' AND Haslo = '$pass'&#092;";
  30.             
  31.     $result = mysql_query($query,$db_conn) or die('Błąd w zapytaniu takim a takim. Komunikat: '
  32.                                             .mysql_error().'; Numer błędu: '.mysql_errno());
  33.     if(!$result)
  34.     {
  35.         echo &#092;"Nie można uruchomić zapytania.\";
  36.         exit;
  37.     }
  38.     
  39.     if($lic=mysql_num_rows($result) == 1)
  40.     {
  41.         //Nazwa oraz hasło użytkownika są poprawne
  42.         $valid_user = $id;
  43.         //session_register(\"valid_user\");
  44.         
  45.         echo &#092;"<h1>Udało się!</h1>\";
  46.         echo &#092;"Ta strona jest tajna.\";
  47.         echo &#092;"$id<br>$pass<br>$result<br>$lic\";
  48.         mysql_free_result($result);
  49.     }
  50.     else
  51.     {
  52.         //nazwa lub hasło użytkownika nie jest poprawne
  53.         echo &#092;"<h1>Nic z tego!!!</h1>\";
  54.         echo &#092;"Nie masz prawa oglądać tych danych.\";
  55.     }
  56. }
  57. ?>


Ten post edytował falkor 27.02.2005, 03:50:15
Go to the top of the page
+Quote Post
tes
post 27.02.2005, 06:21:59
Post #2





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 23.06.2004
Skąd: Rzeszów

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


Wydaje mi sie ze nie masz warunkow sprawdzajacych czy dane przesylane przez formularz sa prawdziwe, np:

  1. <?php
  2.  
  3. $u=user;
  4. $p=haslo;
  5. $login = $_POST['id'];
  6. $passwd = $_POST['haslo'];
  7. if ($u == $login && $p == $passwd) {
  8. echo 'brawo' ;
  9. } else { 
  10. echo 'zle';
  11. }
  12.  
  13. ?>


W php to ja raczej nie programuje wiec da sie to na pewno lepiej zrobic, ale chyba wiesz o co chodzi winksmiley.jpg pozdrawiam


--------------------
czemuja?
Go to the top of the page
+Quote Post
falkor
post 27.02.2005, 08:35:01
Post #3





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 27.02.2005

Ostrzeżenie: (10%)
X----


hmmm....no wlasnie nie baldzo.Dzialac to ma tak: pada jakis identyfikator i haslo (nie wzne czy dobre czy zle na razie).Sprawdzane jest czy w oba pola (a wiec i zmienne $id i $pass) zostalo cos wpisane.Dalej nastepuje polaczenie z baza na uzytkownika $id (na razie bez hasla) a jezeli to sie powiedzie, wyslana zostaje kwerende do bazy by sprawdzic czy w tabeli 'konta' jest wiersz zawierajacy podany login i haslo.Nastepuje porownanie i pozytywny lub negatywny wynik...i tu sie sprawa rypie bo wynik porownanie zdaje sie byc zawsze pozytywny.Kwerenda dziala poprawnie w monitorze.Dlatego juz nic nie rozumiem, aczkolwiek porownywanie identyfikatora i hasla odbywa sie z udzialem wartosci z bazyy a nie zawatych w zmiennych php, tak jak zasugerowales.Ale dzienX winksmiley.jpg

Ten post edytował falkor 27.02.2005, 08:37:16
Go to the top of the page
+Quote Post
zbig13
post 27.02.2005, 13:21:34
Post #4





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.04.2004
Skąd: Legionowo

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


Zamiast
  1. <?php
  2. $query = &#092;"SELECT count(*) FROM konta WHERE Identyfikator = '$id' AND Haslo = '$pass'\";
  3. ?>

Wpisz:
  1. <?php
  2. $query = &#092;"SELECT * FROM konta WHERE Identyfikator = '$id' AND Haslo = '$pass'\";
  3. ?>
Go to the top of the page
+Quote Post
tiraeth
post 27.02.2005, 13:29:19
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Ja mam taki kodzik i działa:
  1. <?
  2. $username = $_POST['login']; // Przykład
  3. $userpass = md5($_POST['password']); // Przykład - hasło w bazie mam w md5 więc jest tutaj md5
  4.  
  5. $result = mysql_query('SELECT * 
  6. FROM uzytkownicy 
  7. WHERE username=''.$username.'
  8. AND user_password=''.$userpass.''', $connect) or die('<b>'.mysql_errno().'</b>: '.mysql_error().'!');
  9.  
  10. while($row = mysql_fetch_assoc($result))
  11. {
  12. if($row['username'] == $username)
  13. {
  14. $session_userid = $row['userid'];
  15. $session_rank = $row['user_rank'];
  16. $session_user = $row['username'];
  17. }
  18. }
  19.  
  20. if($session_userid)
  21. {
  22. echo 'Zalogowany';
  23. }
  24. else
  25. {
  26. echo 'Wracaj buraku na działkę! Nie wejdziesz biggrin.gif';
  27. }
  28. ?>
Go to the top of the page
+Quote Post
falkor
post 27.02.2005, 16:36:02
Post #6





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 27.02.2005

Ostrzeżenie: (10%)
X----


SWIETNIE!!! smile.gif dziala...a powiem ze takie rozwiazanie tzn ( count(*) ) jest podane w ksiazce"php i MySQL Programowanie w sieci Web" Luke Welling i Laura Thompson.

Jest tylko jeden maly problemik z tym ifem na poczatku...powinien nie puszczac dalje jesli jedno z pol nie zostalo wypelnione a niestety przepuszcza...
Go to the top of the page
+Quote Post
zbig13
post 27.02.2005, 17:54:40
Post #7





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.04.2004
Skąd: Legionowo

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


Cytat(falkor @ 2005-02-27 17:36:02)
Jest tylko jeden maly problemik  z tym ifem na poczatku...powinien nie puszczac dalje jesli jedno z pol nie zostalo wypelnione a niestety przepuszcza...

Problem z if'em polega na tym, że zamiast isset() w tym wypadku lepiej jest zastosowac funkcje empty():
  1. <?php
  2. if( (empty($_POST['id'])) && (empty($_POST['pass'])) ) 
  3. {
  4.     echo &#092;"<h1>Proszę się zalogować!!!</h1>\";
  5. }
  6. else
  7. {
  8. ....
  9. ?>

Sprawdza ona czy do pola formularza zostala wprowadzona jakaś wartosc, jesli tak, zostają wykonane żądane polecenia.

Ten post edytował zbig13 27.02.2005, 17:59:06
Go to the top of the page
+Quote Post
falkor
post 27.02.2005, 18:23:50
Post #8





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 27.02.2005

Ostrzeżenie: (10%)
X----


Jasne snitch.gif to bylo nie przemyslane pytanie...ja jednak zrobilem ten kod tak:
  1. <?php
  2. if(empty($_POST['id']) || empty($_POST['pass']))
  3. {
  4. echo &#092;"<h1>Proszę się zalogować!!!</h1>\";
  5.  
  6. }
  7. else
  8. ?>

Zastanawiam sie jednak nad dwoma rzeczami.
1.Jak to jest ze na wielu stronach gdy chce sie podejrzec kod nawet zwyklego formularza, to go po prostu nie widac, sa puste znaczniki tabel itp, ale tego rdzenia w kodzie nie widac?
2.Czy musze robic identyczna druga strone jezeli chce by roznila sie od poprzedniej jedynie napisem gdy logowanie sie nie powiedzie...po prostu by pojawial sie napis w stylu "Wpisz poprawny klucz i haslo"?

Ten post edytował falkor 27.02.2005, 18:25:24
Go to the top of the page
+Quote Post
zbig13
post 1.03.2005, 16:47:20
Post #9





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.04.2004
Skąd: Legionowo

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


odp 1. Może dlatego, że formularz jest w ramce, albo część źródła jest w jakiś sposób ukryta. Musiałbyś podać link do jakiejś strony na której tak się dzieje, bo nie bardzo wiem o co chodzi dry.gif .
odp 2. Nie chyba nie musisz tworzyć dwóch plików, można pokombinować ze zmiennymi. Ale w sumie to po co zmieniać jeden napis w takich samych plikach logowania? blink.gif
Go to the top of the page
+Quote Post
falkor
post 1.03.2005, 22:19:03
Post #10





Grupa: Zarejestrowani
Postów: 76
Pomógł: 0
Dołączył: 27.02.2005

Ostrzeżenie: (10%)
X----


1.ehh nakrecilem z tym troche...moze pominmy to tongue.gif.Moze raczej zamienmy to na pytanie jak da sie ukryc kod tak zeby nie byl w ogole widoczny w zrodle i czy to jest mozliwe w ogole...
2.Juz tlumacze po co zmieniac.Moje logowanie jest w dwoch plikach dla przyzwoitosci; w jednym formularz, w drugim kod php.Jesli ktos nic nie wpisze to zamiast strony "zaloguj sie" i jakiegos "wstecz" chce by wyskoczyla od razu strona do logowania ale z napisem "wpisz identyfikator i haslo".tak jest no przy logowaniu do lukasbanku.Pewnie do innych tez.
3.czy istnieje inna metoda wywolywania plikow z kodu php niz include('plik')?
4.Jaki jest znacznik html'owy ktorym mozna wywolac wykonywanie pliku *.php lub *.html.Wiem ze jest cos takiego jak
  1. <IMG SRC="pli.php?s=costamo&p=jakas_wartosc&f=inna_wartosc&r=jeszcze_inna&g=i_jeszcze_jeden&b=i_jeszcze_raz">
.Ale czy istnieje inna mozliwosc (to w oparciu o konkretny problem jaki mam z wyswietleniem obrazka statystyki bedacego jednoczesnie linkiem ją uruchamiajacym,generowanym przez kod php).
Uffff...duzo tego, ale moze komus odpowiedzi na te pytania jakos pomoga... blink.gif

Ten post edytował falkor 1.03.2005, 22:24:19
Go to the top of the page
+Quote Post
zbig13
post 2.03.2005, 07:37:37
Post #11





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.04.2004
Skąd: Legionowo

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


2. No to wystarczy na poczatku skryptu z logowaniem uzyc header(). To by wygladalo mniej wiecej tak:
  1. <?php
  2.  
  3. if (empty($_POST['login']) || empty($_POST['haslo'])) {
  4. // Tutaj ta strona z napisem \"wpisz identyfikator i haslo\":
  5. header ('Location: strona.html');
  6. exit();
  7. } else {
  8. // Wykonuj skrypt...
  9. ?>


3. Jest jeszcze include_once(), require() i require_once() smile.gif
4. Tego nie wiem sad.gif
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 20.04.2024 - 12:04