Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] dodanie zapytania do kodu autoryzacji admina
Forum PHP.pl > Forum > Przedszkole
fredzio90
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....
Cienki1980
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.
fredzio90
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...
Cienki1980
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.
Saddam92
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
fredzio90
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. ?>
Saddam92
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..
fredzio90
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... ;(
Saddam92
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...
fredzio90
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...
Kicok
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. ?>
fredzio90
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
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.