Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]nie pobiera id uzytkownika
Forum PHP.pl > Forum > Przedszkole
scroll
witam
mam skryp logowania, mozna sie zalogować ale nie jest pobierane id_uzytkownika. nie mam pojęcia gdzie jest bład. z góry dziekuje za informacje

  1. include("check.php"); //dane do połączenia
  2. function filtruj($filtracja){
  3. $filtracja = stripslashes($filtracja); //usuwa slashe
  4. $filtracja = htmlspecialchars($filtracja); // usuwa spacje, tagi html oraz niebezpieczne znaki
  5. $filtracja = mysql_real_escape_string($filtracja); //zamienia nie bezpieczne znaki
  6. return $filtracja;
  7. }
  8. $login = filtruj($_POST['login']);
  9. $pass = md5(filtruj($_POST['pass']));
  10.  
  11. if (isset($_POST['zaloguj'])) //sprawdza czy użytkownik wcisną przycisk zaloguj
  12. if(!empty($_POST['login']) AND !empty($_POST['pass'])) //sprawdza czy użytkownik wypełnił wszystkie pola
  13. if (mysql_num_rows(mysql_query("SELECT id_uzytkownika, login, haslo FROM uzytkownicy WHERE login = '$login' AND haslo = '$pass' ")) > 0 ){ //sprawdza czy użytkownik o podanym loginie i haśle istnieje w bazie
  14. $zapytanie = "SELECT id_uzytkownika FROM uzytkownicy WHERE login = '$login' "; //pobiera dane o użytkowniku
  15. $idzzapytanie = mysql_query($zapytanie);
  16. while($pokaz = mysql_fetch_array($idzzapytanie)){
  17. $id = $pokaz[0];
  18. }
  19.  
  20. $_SESSION['login'] = $login;
  21. $_SESSION['id'] = $id;
  22. $_SESSION['online'] = '1';
  23. echo "Zostałeś zalogowany jako: $login. Możesz teraz przejść do swojego <a href=\"konto.php\">konta</a>";
  24. header("Location: konto.php");
  25. }
  26. else{
  27. echo "<p class=\"errorlog\">Nie ma takiego użytkownika!</a></p>";
  28. }
  29. else{
  30. echo "<p class=\"errorlog\">Wypełnij wszystkie pola!</a></p>";
  31. }
  32. ?>
Kshyhoo
A w bazie masz id_uzytkownika?
scroll
tak, jest.
nospor
Pomijajac juz bez sens tego kodu, bo najpierw wykonujesz zapytanie pobierajace id uzytkownika, login i haslo pasujace do podanego loginu i hasla, i jesli cos zwroci to na nowo wykonujesz to samo zapytanie, ale tym razem pobierasz juz tylko id uzytkownika... zero sensu i optymalnosci. Robisz dwa razy niepotrzebnie to samo.

Zas do problemu:
Temat: Jak poprawnie zada pytanie
Masz tam pare cennych wskazowek na szukanie bledow w skypcie. Zastosuj sie, a wszystko bedzie jasne
scroll
to może podacie przykład prostego logowania? bo ten nie jest mojego autorstwa
tomxx
  1. <?php
  2. #Poniżej podano przykładowe nazwy użytkownika, najlepiej je zastąpić tablicą z danymi z bazy
  3. $użytkownicy = [
  4. ['uzytkownik', 'bbeee'],
  5. ['hhh', 'ooooab'],
  6. ['cccdd', 'dededeb2'],
  7. ];
  8.  
  9. if(!isset($_SESSION['zalogowany']))
  10. {
  11. ?>
  12. <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>" method="post">
  13. <p>Nazwa użytkownika: <input name="nazwa"></p>
  14. <p>Hasło: <input type="password" name="hasło"></p>
  15. <p><input type="submit" name="submit" value="Zaloguj się!"></p>
  16. </form>
  17. <?php
  18. if(isset($_POST['submit']))
  19. {
  20. foreach($użytkownicy as $dane)
  21. if( ($dane[0] == $_POST['nazwa']) && ($dane[1] == $_POST['hasło']) )
  22. {
  23. $_SESSION['zalogowany'] = $_POST['nazwa'];
  24. echo '<script>location.href="'.$_SERVER['SCRIPT_NAME'].'"</script>';
  25. }
  26. if(!isset($_SESSION['zalogowany'])) echo "Błędne dane!";
  27. }
  28. }
  29. else
  30. echo "Witaj! Jesteś zalogowany jako {$_SESSION['zalogowany']}";
  31. ?>
Zmienna $_SESSION['zalogowany'] będzie przechowywała aktualną nazwę zalogowanego użytkownika.
scroll
ale mi potrzebne jest id
do tego mojego skryptu jest jeszcze taka klasa

  1. <?php
  2. /**
  3.  * Klasa wykonująca wszystkie podstawowe operacje
  4.  * @author Sobak
  5.  * @package User System
  6.  */
  7.  
  8. class user {
  9.  
  10. public static $user = array();
  11.  
  12. /**
  13.   * Zwraca tablicę ze wszystkimi danymi o użytkowniku.
  14.   * Indeksy tablicy odpowiadają nazwom pól w bazie danych (login, pass etc...)
  15.   * @param string $login
  16.   * @param string $pass
  17.   * @return array
  18.   */
  19. public function getData ($login, $pass) {
  20. if ($login == '') $login = $_SESSION['login'];
  21. if ($pass == '') $pass = $_SESSION['pass'];
  22.  
  23. self::$user = mysql_fetch_array(mysql_query("SELECT * FROM uzytkownicy WHERE login='$login' AND haslo='$pass';"));
  24. return self::$user;
  25. }
  26.  
  27.  
  28. /**
  29.   * Zwraca tablicę ze wszystkimi danymi o użytkowniku, tak jak powyższa metoda klasy,
  30.   * ale rozpoznaje użytkownika nie po podaniu loginu i hasła tylko po podaniu ID.
  31.   * Używana np. do wyświetlania strony profilu.
  32.   * @param int $id
  33.   * @return array
  34.   */
  35. public function getDataById ($id) {
  36. $user = mysql_fetch_array(mysql_query("SELECT * FROM uzytkownicy WHERE id_uzytkownika='$id';"));
  37. return $user;
  38. }
  39.  
  40. /**
  41.   * Jeśli użytkownik jest zalogowany - zwraca true, w przeciwnym wypadku - false
  42.   * @return bool
  43.   */
  44. public function isLogged () {
  45. if (empty($_SESSION['login']) || empty($_SESSION['pass'])) {
  46. return false;
  47. }
  48.  
  49. else {
  50. return true;
  51. }
  52. }
  53.  
  54. /**
  55.   * "Soli" hasło przed jego zahashowaniem funkcją md5()
  56.   * @param string $pass
  57.   * @return string
  58.   */
  59. public function passSalter ($pass) {
  60. $pass = '$@@#$#@$'.$pass.'q2#$3$%##@';
  61. return md5($pass);
  62. }
  63.  
  64. }
nospor
@tomxx twoj skrypt jest jeszcze gorszy od tego co ma scroll..... Wyobraz sobie ze w bazie masz 1000000 uzytkownikow. Twoje logowanie bedzie trwac i trwac.... o ile w ogole skrypt sie nie wylozy wpierw :/ Tak, wiem, 1000000 malo prawdopodobne. Chce ci tylko pokazac kiepskosc tego kodu.
tomxx
Cytat(nospor @ 4.02.2014, 13:34:41 ) *
@tomxx twoj skrypt jest jeszcze gorszy od tego co ma scroll..... Wyobraz sobie ze w bazie masz 1000000 uzytkownikow. Twoje logowanie bedzie trwac i trwac.... o ile w ogole skrypt sie nie wylozy wpierw :/ Tak, wiem, 1000000 malo prawdopodobne. Chce ci tylko pokazac kiepskosc tego kodu.
To sobie zmieni na SELECT * FROM ... WHERE. Napisałem tylko zarys skryptu, bo przecież to nie forum gotowe rozwiązania. wink.gif
nospor
@tomxx poprostu odnosze sie do tego:
  1. #Poniżej podano przykładowe nazwy użytkownika, najlepiej je zastąpić tablicą z danymi z bazy
  2.  
  3. $użytkownicy = [
  4.  
  5. ['uzytkownik', 'bbeee'],
  6.  
  7. ['hhh', 'ooooab'],
  8.  
  9. ['cccdd', 'dededeb2'],
  10.  
  11. ];

Gdzie sugerujesz, by tablice w php budowac wszystkimi danymi z bazy. Ciut nieoptymalne wink.gif
tomxx
Ok, z tą tablicą to trochę nietrafiony pomysł, więc zamiast tablicy niech będzie
  1. SELECT `haslo` FROM `tablica` WHERE `nazwa` = '{$_POST['nazwa']}'
i później sprawdza czy hasło wybrane z bazy jest identyczne z tym w formularzu.
Cytat
ale mi potrzebne jest id
A do czego Ci ten id?
nospor
Cytat
A do czego Ci ten id?
Id uzytkownika w sesji to bardzo wazna informacja, wiec nie rozumiem Twojego zdziwienia.
scroll
do tej pory mialem na sztywno po wyszukiwaniu loginu. teraz chche po id. ale kurde nie moge sobie sam poradzic z tym
tomxx
Cytat
to może podacie przykład prostego logowania? bo ten nie jest mojego autorstwa
W takim razie zdecyduj, czy chcesz naprawić tamten skrypt, czy chcesz napisać własny od podstaw (a raczej czekasz na gotowca). Wykonaj zapytanie z "nie Twojego" skryptu np. w phpMyAdmin, może dowiesz się do jest nie tak.
scroll
w php my admin działają zapytania wyszukując po id
tomxx
Jeżeli w PMA działa, to znaczy, że coś źle jest w skrypcie. Zrób print_r zmiennych $id czy $pokaz i sprawdź, co te zmienne zawierają.
markuz
zamiast print_r polecam var_dump smile.gif
nospor
Cytat
Jeżeli w PMA działa, to znaczy, że coś źle jest w skrypcie. Zrób print_r zmiennych $id czy $pokaz i sprawdź, co te zmienne zawierają.
Pisalem o tym w pierwszym poscie, a nawet podalem wiecej rzeczy do zrobienia, ale zostalem olany... Moze ty bedziesz mial na niego wiekszy wplyw wink.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.