Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Ustalenie id użytkownika
Forum PHP.pl > Forum > Przedszkole
topgear
Witam Napisałem sobie taki prosty skrypt logowania oparty na sesjach
  1. <?php
  2. session_register("zalogowany");
  3.  
  4. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  5.  
  6. include('laczbaza.php');
  7.  
  8. $imie = $_POST['imie'];
  9. $nazwisko = $_POST['nazwisko'];
  10. $klasa = $_POST['klasa'];
  11. $haslo = $_POST['haslo'];
  12.  
  13.  
  14.  
  15. if($_SESSION["zalogowany"]!=1){
  16. $zaloguj_z1 = "SELECT imie, nazwisko, haslo, klasa klasa FROM uczniowie WHERE (imie = '" . $imie . "' and nazwisko = '" . $nazwisko . "'and klasa = '" . $klasa . "'and haslo = '" . $haslo . "') LIMIT 1;";
  17. $zaloguj_w1 = mysql_query($zaloguj_z1);
  18. if(mysql_num_rows($zaloguj_w1) == 0) {
  19. echo 'Dane niepoprawne';
  20. }else{
  21. $zaloguj_d1 = mysql_fetch_array($zaloguj_w1);
  22. if( ($zaloguj_d1['imie'] == $imie) && ($zaloguj_d1['nazwisko'] = $nazwisko) && ($zaloguj_d1['klasa'] = $klasa)&& ($zaloguj_d1['haslo'] = $haslo)) {
  23. echo 'Zalogowano';
  24. $_SESSION["zalogowany"]=1;
  25. }
  26. }
  27. }
  28.  
  29.  
  30.  
  31. ?>


Następnie mam w pliku kod który dodaje do bazy 1 pkt jeżeli się dobrze rozwiąże zadanie
  1. $dodaj = "UPDATE uczniowie SET punkty = punkty+1 WHERE id_uczen='32'";


Jak widać id_uczen jest ustawione na sztywno.

I mam pytanie jak tym skryptem logowania na podstawie tych 4 danych czyli: imie,nazwisko,klasa,haslo ustalać id_ucznia

Rysh
Musisz sobie ustawić $_SESSION['id'] id zalogowanego, a następnie wstawiać to podczas aktualizacji danych do mysql.

PS. Jeśli to jest Twój skrypt, to lepiej go zabezpiecz winksmiley.jpg
DiH
1. Za trzymanie haseł w bazie w postaci niezaszyfrowanej powinno się wieszać
2. Jeżeli id jest liczbą, to nie traktuj go jako stringa. Powinno być WHERE id=x (bez apostrofów)
3. Po zalogowaniu użytkownika pobierz z bazy jego id do zmiennej, którą potem wykorzystasz w zapytaniu.

I to wszystko.
Edit: drugi ;
topgear
Cytat(Rysh @ 22.03.2010, 18:05:32 ) *
Musisz sobie ustawić $_SESSION['id'] id zalogowanego, a następnie wstawiać to podczas aktualizacji danych do mysql.


Nie za bardzo rozumiem mógłbyś to przedstawić na podstawie jakiegoś przykładu rolleyes.gif a co do zabezpieczeń to aktualnie mi są niepotrzebne ponieważ te kody to jest tak jakby wstępne przygotowanie projektu smile.gif


Cytat(DiH @ 22.03.2010, 18:13:43 ) *
3. Po zalogowaniu użytkownika pobierz z bazy jego id do zmiennej, którą potem wykorzystasz w zapytaniu.


O tym sam myślałem tylko nie wiem jak ustalić przy logowaniu które id ma pobierać ( którego użytkownika)

np: jak loguje sie Jan Kowalski to żeby nie pobrało id Janna Kowalskiego
DiH
Nie przesadzasz? Czytanie manuala naprawdę nie boli. Każdy użytkownik w bazie powinien mieć w bazie swój id. Jeżeli tak nie jest, to zrób tak, żeby miał. Przy logowaniu pobierasz z bazy jego id i zapisujesz choćby do $_SESSION['uid']. Tą zmienną podstawić właśnie w zapytaniu: "...WHERE id=".$_SESSION['uid'];

Edit: Jak to nie wiesz jak pobrać id? A jak rozpoznajesz użytkownika? Sprawdzasz jego login i hasło zapytaniem mysql. W tym samym zapytaniu pobierz także id użytkownika, który się loguje. Skoro login i hasło wpisane w formularz pasują, to pobiera id z wiersza tego właśnie użytkownika, dla którego spełniony jest warunek poprawności hasła.
topgear
Właśnie o to mi chodziło dzięki snitch.gif

Jednak znowu mam problem zrobiłem tak jak poradziłeś i wywala błąd o takiej treści

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/supromyk/ftp/iw/rozdzial_27/dodaj_zak.php on line 4

Kod mam taki

  1. <?php
  2.  
  3. $dodaj = "UPDATE `uzytkownik` SET `punkty` = punkty+1 WHERE nazwa_uz=.$_SESSION['uzyt'].";
  4. $wynik = mysql_query($dodaj);


Sesja jest raczej dobra bo po wstawieniu kodu
  1. f (isset($_SESSION['uzyt'])) {
  2. echo "Zalogowano jako ".$_SESSION['uzyt']."


Wyświetla "zalogowany jako (ta osoba na którą się zalogowałem)."
DiH
Czysta niekonsekwencja. Raz używasz ` a raz nie.
  1. $dodaj = "UPDATE uzytkownik SET punkty = punkty+1 WHERE nazwa_uz=".$_SESSION['uzyt'];

Edit: mój błąd - już poprawione
topgear
Działa thx

Błędów nie ma ale niestety punktów dalej nie dodaje w sesji odczytuje mi, że jestem zalogowany jako "uzyt1" ale do niego nie dodaje
tak wygląda baza


Wpisałem echo $dodaj i wyświetliło się UPDATE uzytkownik SET punkty = punkty+1 WHERE nazwa_uz=uzyt1 wydaje mi sie, żę wszystko gra
DiH
  1. WHERE id = 1
  2. WHERE nazwa='wartosc'

Dla liczb nie potrzeba apostrofów. Dla stringów tak.
topgear
Jak próbuje dodać do .$_SESSION['uzyt'] apostrofy to wywalają błędy bo chyba właśnie to jest stringiem
Rysh
co zwraca mysql_error()?
topgear
Cytat(Rysh @ 22.03.2010, 22:49:33 ) *
co zwraca mysql_error()?


Unknown column 'uzyt1 in 'where clause'
Trochę mnie to dziwi bo "uzyt1" nie ma być kolumną tylko ma na podstawie tego wyszukiwać do którego uzytkownika dodać punkty
topgear
Tak jest to kolumna nazwa_uz
Rysh
Sprawdziłeś co pisał DiH?
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.