Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] dodanie zapytania do kodu autoryzacji admina
fredzio90
post
Post #1





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


mam następujący problem.. mam podany niżej kod:

  1. <?php
  2. function login_user()
  3. {
  4. global $user_tbl, $REMOTE_ADDR;
  5.  
  6. if($_POST['a10']<>'' AND $_POST['b10']<>'')
  7. {
  8.  
  9. $_POST['a10']=addslashes($_POST['a10']);
  10.  
  11. $result = mysql_query("SELECT nick, pass, access FROM $user_tbl WHERE nick='{$_POST['a10']}'");
  12.  
  13. $r = mysql_fetch_array($result);
  14.  
  15.  
  16. if($r['nick']==$_POST['a10'] AND $r['pass']==md5($_POST['b10']) 
  17. {
  18. $_SESSION['nick'] = $r['nick'];
  19. $_SESSION['pass']  = $r['pass'];
  20. $_SESSION['access'] = $r['access']; .......
  21. ?>


i niestety nie wiem aby dodatkowo wybierało z tabeli acc_pass hasło..... mianowicie... tak mi się wydaje ale tuż pod:
  1. <?php
  2. $result = mysql_query("SELECT nick, pass, access FROM $user_tbl WHERE nick='{$_POST['a10']}'");
  3. ?>


dodać wybieranie z tabeli acc_pass pola haslo.... czyli na oko według mnie powinno być:


  1. <?php
  2. function login_user()
  3. {
  4. global $user_tbl, $REMOTE_ADDR;
  5.  
  6. if($_POST['a10']<>'' AND $_POST['b10']<>'')
  7. {
  8.  
  9. $_POST['a10']=addslashes($_POST['a10']);
  10.  
  11. $result = mysql_query("SELECT nick, pass, access FROM $user_tbl WHERE nick='{$_POST['a10']}'");
  12. $result = mysql_query("SELECT haslo FROM acc_pass");
  13. $r = mysql_fetch_array($result);
  14.  
  15.  
  16. if($r['nick']==$_POST['a10'] AND $r['pass']==md5($_POST['b10']) 
  17. {
  18. $_SESSION['nick'] = $r['nick'];
  19. $_SESSION['pass']  = $r['pass'];
  20. $_SESSION['access'] = $r['access']; .......
  21. ?>


ale nie działa....
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Cienki1980
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


W linijce 11 tworzysz zapytanie do bazy ... po czym nie wyciągasz żadnych wyników,
bo w linijce 12 tworzysz następne zapytanie do bazy pod tą samą zmienną $result i dopiero wtedy wyciągasz wynik.
Pomijam fakt, że w drugim zapytaniu wyciągasz wszystkie hasła z tej tabeli, a nie jedno ( a podejrzewam, że chcesz tylko jedno hasło danego usera ).

Zmień to tak:
zapytanie do bazy z linijki 11
wyciągnięcie danych
zapytanie do bazy z linijki 12
wyciągnięcie danych

zapis odpowiednich danych do sesji.


--------------------
404
Go to the top of the page
+Quote Post
fredzio90
post
Post #3





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


te haslo w tabeli acp_pass jest tylko jedno haslo...
mam poprostu taki zmair ze gdy mamy formulaz logowania admina, jest dodatkowe pole w które wpisujemy hasło globalne.. jezeli hacker zna haslo admina to nei pozna hasla globalnego...


czyli jak dobrze cier zrozumialem to tak:

  1. <?php
  2. function login_user()
  3. {
  4. global $user_tbl, $REMOTE_ADDR;
  5.  
  6. if($_POST['a10']<>'' AND $_POST['b10']<>'' AND $_POST['haslo']<>'')
  7. {
  8.  
  9. $_POST['a10']=addslashes($_POST['a10']);
  10.  
  11. $result = mysql_query("SELECT nick, pass, access FROM $user_tbl WHERE nick='{$_POST['a10']}'");
  12. $r = mysql_fetch_array($result);
  13.  
  14. $result = mysql_query("SELECT haslo FROM acc_pass");
  15. $r = mysql_fetch_array($result);
  16.  
  17.  
  18. if($r['nick']==$_POST['a10'] AND $r['pass']==md5($_POST['b10']) AND $r['haslo']==md5($_POST['haslo']))
  19. {
  20. $_SESSION['nick'] = $r['nick'];
  21. $_SESSION['pass']  = $r['pass'];
  22. $_SESSION['access'] = $r['access'];
  23. $_SESSION['haslo'] = $r['haslo'];
  24. ?>


i w polu do wpisania hasla:

  1. <?php
  2. <tr>
  3. <td class="uni_01" align="right"> ACP:</td>
  4. <td class="uni_01">
  5. <input type="password" name="haslo">
  6. <input type="hidden" name="cmd" value="login">
  7. </td>
  8. </tr>
  9. ?>


? narazie niemoge tego sprawdzic bo padł server usługodawcy... jak zadziała to sprawdze...

Ten post edytował fredzio90 24.02.2007, 14:08:39
Go to the top of the page
+Quote Post
Cienki1980
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Lepiej, ale nie wpisywałbym cały czas do zmiennej $r .. tylko z pierwszego zapytania np do $r1 a z drugiego do $r2 ... potem odpowiednio zmodyfikowane warunki i będzie OK.


--------------------
404
Go to the top of the page
+Quote Post
Saddam92
post
Post #5





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

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


MySQL to relacyjna baza danych, co oznacza ze mozesz w zapytaniach tworzyć relacje pomiędzy tabelami.. nie rozumiem co prawda dlaczego hasła przechowujesz w oddzielnej tabeli ale nawet jeśli to przy odpowiednim ułożeniu zapytania SQL, jedno zapytanie powinno wyciagnac ci dane z obu tabeli..

Jesli zaprezentujesz nam strukture swoich tabeli w SQL to może udało by nam się pomóc ułożyć ci to zapytanie.
Pozdrawiam smile.gif
Go to the top of the page
+Quote Post
fredzio90
post
Post #6





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


poprawilem.. ale wciaz czekam aż moja strona zacznie działac.. czyli wygląda teraz to tak:

  1. <?php
  2. function login_user()
  3. {
  4. global $user_tbl, $REMOTE_ADDR;
  5.  
  6. if($_POST['a10']<>'' AND $_POST['b10']<>'' AND $_POST['haslo']<>'')
  7. {
  8.  
  9. $_POST['a10']=addslashes($_POST['a10']);
  10.  
  11. $result = mysql_query("SELECT nick, pass, access FROM $user_tbl WHERE nick='{$_POST['a10']}'");
  12. $r = mysql_fetch_array($result);
  13.  
  14. $result2 = mysql_query("SELECT haslo FROM acc_pass");
  15. $r2 = mysql_fetch_array($result2);
  16.  
  17.  
  18. if($r['nick']==$_POST['a10'] AND $r['pass']==md5($_POST['b10']) AND $r2['haslo']==md5($_POST['haslo']))
  19. {
  20. $_SESSION['nick'] = $r['nick'];
  21. $_SESSION['pass']  = $r['pass'];
  22. $_SESSION['access'] = $r['access'];
  23. $_SESSION['haslo'] = $r2['haslo'];
  24. ?>
Go to the top of the page
+Quote Post
Saddam92
post
Post #7





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

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


z tymze to nie ma jak działać gdyż z bazy acc_pass pobierasz wszystkie rekordy, jesli juz to musisz jakas klauzule WHERE ustawić.. ale jak powiesz mi jak byglda struktury tych dwóch tabel to ci postaram sie jakies JEDNO zapytanie napisac..
Go to the top of the page
+Quote Post
fredzio90
post
Post #8





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


ale poc i one questionmark.gif te zapytanie z $user_tbl jest dobrze.. tylko chce dać zapytanie aby wybierało byle jakie hasło z bazy acp_pass......

załączam strukture tabeli acp_pass:


  1. CREATE TABLE `acp_pass` (
  2. `id` int(2) NOT NULL AUTO_INCREMENT,
  3. `haslo` varchar(64) NOT NULL DEFAULT '',
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 ;



chce do tej tabeli dodac kilka hasel i przy wpisywaniu jakiegoś losowego prawidłowego hasla zeby sie logowało.. czy to bedzie coś stylu RAND questionmark.gif

niestety wywala błąd mianowicie:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ..... 01.adm.php on line 33 a linijka 33 to:
  1. <?php
  2. $r2 = mysql_fetch_array($result2);
  3. ?>


proszę o pomoc... ;(

Ten post edytował fredzio90 24.02.2007, 18:25:13
Go to the top of the page
+Quote Post
Saddam92
post
Post #9





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

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


nazwa tabeli to acp_pass czy acc_pass questionmark.gif

czyli ty chcesz zrobić losowe hasło tak?? no to wyglada na to że bedziesz musiał w PHP wylosowac tą liczbę i potem pobrać klauzula WHERE wstawic odp. haslo.. albo pobrac wszystkie hasła do tablicy i potem juz w php z tej tablicy wylosowac odp. element...
Go to the top of the page
+Quote Post
fredzio90
post
Post #10





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


zmiaem nazwe tabeli i to samo.. mam takie zapytanie:

  1. <?php
  2. $result2 = mysql_query("SELECT haslo, for FROM acp_pass WHERE for='global'");
  3. ?>


dodalem pole for i wstawile global do niego.. i nic.. to samo...
Go to the top of the page
+Quote Post
Kicok
post
Post #11





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Tu masz rozwiązanie wykorzystujące jedno zapytanie SQL (z podzapytaniem). Dostosuj to sobie do swoich potrzeb.

  1. <?php
  2. $_POST['haslo'] = md5($_POST['haslo']);
  3. $_POST['pass'] = md5($_POST['pass']);
  4. $_POST['a10'] = addslashes($_POST['a10']);
  5.  
  6. $query = "SELECT nick, access
  7. FROM $user_tbl
  8. WHERE (nick = '{$_POST['a10']}') AND 
  9. (pass = '{$_POST['pass']}') AND 
  10. ('{$_POST['haslo']}' IN (SELECT haslo FROM acc_pass));";
  11. $result = mysql_query($query);
  12. $row = mysql_fetch_assoc($result);
  13.  
  14. if(is_array($row))
  15. {
  16. // Zalogowany
  17. $_SESSION['nick'] = $row['nick'];
  18. $_SESSION['pass'] = $_POST['pass'];
  19. $_SESSION['access'] = $row['access'];
  20. $_SESSION['haslo'] = $_POST['haslo'];
  21. }
  22. ?>


Ten post edytował Kicok 25.02.2007, 14:26:00


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
fredzio90
post
Post #12





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 19.02.2007

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


niestety nei działa.. dałem tak:

  1. <?php
  2. function login_user()
  3. {
  4. global $user_tbl, $REMOTE_ADDR;
  5.  
  6. if($_POST['a10']<>'' AND $_POST['b10']<>'' AND $_POST['haslo']<>'')
  7. {
  8.  
  9. $_POST['a10']=addslashes($_POST['a10']);
  10.  
  11. $result = mysql_query("SELECT nick, pass, haslo
  12. FROM $user_tbl LEFT JOIN acp_pass ON(haslo ='{$_POST['haslo']}') WHERE nick = '{$_POST['a10']}' AND
  13. pass = '{$_POST['pass']}' AND for='global'");
  14. $r = mysql_fetch_array($result);
  15.  
  16. if($r['nick']==$_POST['a10'] AND $r['pass']==md5($_POST['b10']) AND $r['haslo']==md5($_POST['haslo']))
  17. {
  18. $_SESSION['nick'] = $r['nick'];
  19. $_SESSION['pass'] = $r['pass'];
  20. $_SESSION['access'] = $r['access'];
  21. $_SESSION['haslo'] = $r['haslo'];
  22. }
  23. ?>


z innego forum powiediano mi żeby zrobić tak:

  1. <?php
  2. $result = mysql_query("SELECT nick, pass, haslo
  3. FROM $user_tbl LEFT JOIN acp_pass ON(haslo ='{$_POST['haslo']}') WHERE nick = '{$_POST['a10']}' AND
  4. pass = '{$_POST['pass']}' AND for='global'");
  5. $r = mysql_fetch_array($result);
  6. ?>


ale też nei działa.....

cięzki orzech do zgryzienia... offtopic.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 Aktualny czas: 21.08.2025 - 21:21