Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Odsyłacz do własnego id
Forum PHP.pl > Forum > Przedszkole
Croos22
Witam.
W jaki sposób mogę zrobić aby wyciągnąć dane zalogowanego użytkownika na konkretną stronę.Chodzi mi o to gdy zostaną wpisane login oraz hasło przeniesie mnie na stronę którą podałem i właśnie na tej ów stronie chciałbym aby zalogowany użytkownik miał.
Najbardziej mi zależy na tym, że zalogowani zobaczą na stronie swoje id wraz z odsyłaczem na stronę z własnym kontem (np.strona.pl/user.php?id=1)

Próbowałem to zrobić tylko, że id stale wynosi 1.

  1. <?php
  2.  
  3. mysql_connect("", "", "")or die("Nie można nawiązać połączenia z bazą");
  4. mysql_select_db("")or die("Wystąpił błąd podczas wybierania bazy danych");
  5.  
  6. $query = mysql_query("SELECT * FROM `uzytkownicy` WHERE id");
  7. if($dane=mysql_fetch_array($query))
  8. {
  9. echo "<b>Nazwa użytkownika: &nbsp;&nbsp;</b>";
  10. echo "<a href="$dane['id']">id</a>;
  11.  
  12. }
  13. ?>
blahy
wywolaj sobie w myadminie to zapytanie i zobacz czy wyniki sa takie jakbys chcial, albo print_r na $dane po zrobieniu tablicy z wynikami, bo chyba chcesz wybrac uzytkownika o okreslonym id (np po zalogowaniu loginem i haslem takiego ktory ma pole login takie jak podany login i haslo takie jak podane haslo) a nie wszystkich uzytkownikow
Croos22
No tak, każdy nowy użytkownik dostaje swój unikalny identyfikator po zarejestrowaniu.Wyświetla mi to w ten sposób http://strona.pl/user.php?id=1 .Chciałem aby po zalogowaniu gdy przeniesie mnie header("Location: indeks.php"); w moim wypadku na indeks.php był odsyłacz o nazwie np.mój profil.Ten ów odsyłacz chciałbym aby po kliknięciu przekierował mnie na taką stronę co podałem u góry lecz z własnym identyfikatorem (id).
thomson89
Na sam początek strony, dosłownie, pierwsza linijka:


Oraz potem, gdy sprawdzasz czy użytkownik istnieje (logujesz go):
  1. mysql_connect('xxx', 'xxx', 'xxx')or die('Nie można nawiązać połączenia z bazą');
  2. mysql_select_db('xxx')or die('Wystąpił błąd podczas wybierania bazy danych');
  3.  
  4. $query = mysql_query('SELECT * FROM `uzytkownicy` WHERE `login` =\''.$_POST['login'].'\' AND `haslo` = \''.sha1($_POST['haslo'].'\'');
  5. $result = mysql_num_rows($query);
  6. $results = mysql_fetch_assoc($query);
  7. if($result == 1)
  8. {
  9. echo "<b>Zalogowano</b>";
  10. $_SESSION['uzytkownik']['id'] = $results['id'];
  11. $_SESSION['uzytkownik']['login'] = $results['login'];
  12. }


Powyżej przykładowy kod logowania, oraz zapisanie w sesjach danych użytkownika. Potem, wystarczy na następnej stronie znowu dodać session_start(): i odczytać dane które zapisałeś.

I wystarczy dać, np. taki kod w PHP prowadzący do profilu:
  1. print '<a href="profiles.php?id='.$_SESSION['uzytkownik']['id'].'">Mój profil</a>'; ?>
Croos22
A mógłby mi ktoś pomóc przerobić to.Próbuje i próbuje tylko nic z tego nie wychodzi.
Logowanie:
  1. <?php include("config.php"); ?>
  2. <?php
  3. $login = $_POST['login'];
  4. $haslo = $_POST['haslo'];
  5. $haslo = addslashes($haslo);
  6. $login = addslashes($login);
  7. $login = htmlspecialchars($login);
  8.  
  9. if ($_GET['login'] != '') {
  10. }
  11. if ($_GET['haslo'] != '') {
  12. }
  13.  
  14. $haslo = md5($haslo);
  15. if (!$login OR empty($login)) {
  16. include("head2.php");
  17. echo '<p class="alert">Wypełnij pole z loginem!</p>';
  18. include("foot.php");
  19. }
  20. if (!$haslo OR empty($haslo)) {
  21. include("head2.php");
  22. echo '<p class="alert">Wypełnij pole z hasłem!</p>';
  23. include("foot.php");
  24. }
  25. $istnick = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM `uzytkownicy` WHERE `nick` = '$login' AND `haslo` = '$haslo'"));
  26. echo 'Logowanie nieudane. Sprawdź pisownię nicku oraz hasła.';
  27. } else {
  28.  
  29. $_SESSION['nick'] = $login;
  30. $_SESSION['haslo'] = $haslo;
  31.  
  32. header("Location: indeks.php");
  33. }
  34. ?>
evolucja
To może tak?
  1. <?php
  2.  
  3. mysql_connect("", "", "")or die("Nie można nawiązać połączenia z bazą");
  4. mysql_select_db("")or die("Wystąpił błąd podczas wybierania bazy danych");
  5.  
  6. $query = mysql_query("SELECT * FROM `uzytkownicy` WHERE `nick` = '".$_SESSION['nick']."' AND `haslo` = '$_SESSION['haslo']'");
  7. if($dane=mysql_fetch_array($query))
  8. {
  9. echo "<b>Nazwa użytkownika: &nbsp;&nbsp;</b>";
  10. echo "<a href="$dane['id']">id</a>;
  11.  
  12. }
  13. ?>
thomson89
Wystarczy dodać, w odpowiednim miejscu mój kod.

  1. <?php
  2. session_start(); //to trzeba dodać
  3. include("config.php");
  4.  
  5. $login = $_POST['login'];
  6. $haslo = $_POST['haslo'];
  7. $haslo = addslashes($haslo);
  8. $login = addslashes($login);
  9. $login = htmlspecialchars($login);
  10.  
  11. if ($_GET['login'] != '') {
  12. }
  13. if ($_GET['haslo'] != '') {
  14. }
  15.  
  16. $haslo = md5($haslo);
  17. if (!$login OR empty($login)) {
  18. include("head2.php");
  19. echo '<p class="alert">Wypełnij pole z loginem!</p>';
  20. include("foot.php");
  21. }
  22. if (!$haslo OR empty($haslo)) {
  23. include("head2.php");
  24. echo '<p class="alert">Wypełnij pole z hasłem!</p>';
  25. include("foot.php");
  26. }
  27.  
  28. $query = mysql_query("SELECT * FROM `uzytkownicy` WHERE `nick` = '$login' AND `haslo` = '$haslo'");
  29. $result = mysql_num_rows($query);
  30. $results = mysql_fetch_assoc($query);
  31. if($result == 1)
  32. {
  33. echo "<b>Zalogowano</b>";
  34. $_SESSION['uzytkownik']['id'] = $results['id'];
  35. $_SESSION['uzytkownik']['login'] = $results['login'];
  36. header("Location: indeks.php");
  37. }
  38. else
  39. {
  40. echo 'Logowanie nieudane. Sprawdź pisownię nicku oraz hasła.';
  41. }
  42. ?>
Croos22
W chwili obecnej po wpisaniu loginu oraz hasła przenosi mnie na stronę indeks.php jest to strona dla zalogowanych użytkowników czy w niej też muszę coś teraz zmienić czy tak na prawdę nie zostałem zalogowany do strony a przeniosło mnie bez jakiego kolwiek sprawdzenia?

Kod index.php
  1. <?php include("config.php");
  2. $nick = $_SESSION['nick'];
  3. $haslo = $_SESSION['haslo'];
  4. if ((empty($nick)) AND (empty($haslo))) {
  5. echo '<br>Zarejestruj się lub zaloguj<br><a href="index.php">Strona Główna</a><br>';
  6. }
  7. $user = mysql_fetch_array(mysql_query("SELECT * FROM uzytkownicy WHERE `nick`='$nick' AND `haslo`='$haslo' LIMIT 1"));
  8. if (empty($user[id]) OR !isset($user[id])) {
  9. echo '<br>Nieprawidłowe logowanie.Spróbuj pomownie.<br>';
  10. }
  11. // tresc dla zalogowanego uzytkownika
  12. echo 'Witaj '.$user[nick].' zostałeś/aś pomyślnie zalogowany/a, tutaj umieść ukryta strone tylko dla zalogowanych';
  13. echo '<br><a href="wyloguj.php">Wyloguj mnie</a>';
  14. ?>
thomson89
Musisz dodać session_start(); - pcozytaj wgl o sesjach. Oraz dopasować zmienne które pobierasz (linijka 1, 2) do tych które zapisujesz (mój skrypt linijka 38, 39).
evolucja
Cytat(thomson89 @ 25.07.2010, 14:03:20 ) *
Musisz dodać session_start(); - pcozytaj wgl o sesjach. Oraz dopasować zmienne które pobierasz (linijka 1, 2) do tych które zapisujesz (mój skrypt linijka 38, 39).

Jak byś nie zauważył, to on chce skorzystać z mojej propozycji, nie twojej winksmiley.jpg

W takim razie tylko dodajesz session_start() na początku.
Croos22
Coś nadal jest nie tak ponieważ nie idzie się zalogować.

Sami zobaczcie:
http://samisobie.unl.pl/strony_internetowe/rejestracja.php

login.php
  1. <?php
  2. session_start(); //to trzeba dodać
  3. include("config.php");
  4.  
  5. $login = $_POST['login'];
  6. $haslo = $_POST['haslo'];
  7. $haslo = addslashes($haslo);
  8. $login = addslashes($login);
  9. $login = htmlspecialchars($login);
  10.  
  11. if ($_GET['login'] != '') {
  12. }
  13. if ($_GET['haslo'] != '') {
  14. }
  15.  
  16. $haslo = md5($haslo);
  17. if (!$login OR empty($login)) {
  18. include("head2.php");
  19. echo '<p class="alert">Wypełnij pole z loginem!</p>';
  20. include("foot.php");
  21. }
  22. if (!$haslo OR empty($haslo)) {
  23. include("head2.php");
  24. echo '<p class="alert">Wypełnij pole z hasłem!</p>';
  25. include("foot.php");
  26. }
  27.  
  28. $query = mysql_query("SELECT * FROM `uzytkownicy` WHERE `nick` = '$login' AND `haslo` = '$haslo'");
  29. $result = mysql_num_rows($query);
  30. $results = mysql_fetch_assoc($query);
  31. if($result == 1)
  32. {
  33. echo "<b>Zalogowano</b>";
  34. $_SESSION['uzytkownik']['id'] = $results['id'];
  35. $_SESSION['uzytkownik']['login'] = $results['login'];
  36. header("Location: indeks.php");
  37. }
  38. else
  39. {
  40. echo 'Logowanie nieudane. Sprawdź pisownię nicku oraz hasła.';
  41. }
  42. ?>



index.php
  1. <?php session_start();
  2.  
  3. include("config.php");
  4. $_SESSION['uzytkownik']['id'] = $results['id'];
  5. $_SESSION['uzytkownik']['login'] = $results['login'];
  6. if ((empty($nick)) AND (empty($haslo))) {
  7. echo '<br>Zarejestruj się lub zaloguj<br><a href="index.php">Strona Główna</a><br>';
  8. }
  9. $user = mysql_fetch_array(mysql_query("SELECT * FROM uzytkownicy WHERE `nick`='$nick' AND `haslo`='$haslo' LIMIT 1"));
  10. if (empty($user[id]) OR !isset($user[id])) {
  11. echo '<br>Nieprawidłowe logowanie.Spróbuj pomownie.<br>';
  12. }
  13. // tresc dla zalogowanego uzytkownika
  14. echo 'Witaj '.$user[nick].' zostałeś/aś pomyślnie zalogowany/a, tutaj umieść ukryta strone tylko dla zalogowanych';
  15. echo '<br><a href="wyloguj.php">Wyloguj mnie</a>';
  16. ?>



Wydaje mi się, że błąd może znajdować się w indeksie 4 i 5 lini a w loginie.php 38 i 39.
Oto moja tabela wydaje mi się, że dane nie zgadzają się ze sobą w liniach których podałem wyżej.Mam rację?
  1. CREATE TABLE `uzytkownicy` (
  2. `id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
  3. `nick` VARCHAR( 32 ) NOT NULL ,
  4. `haslo` VARCHAR( 40 ) NOT NULL ,
  5. `email` VARCHAR( 40 ) NOT NULL ,
  6. `ip` VARCHAR( 20 ) NOT NULL ,
  7. PRIMARY KEY ( `id` )
  8. );
dg2001
  1. $_SESSION['uzytkownik']['id'] = $results['id'];
  2. $_SESSION['uzytkownik']['login'] = $results['login'];


Tego w pliku indeks.php już nie musisz mieć gdyż te wartości został zapisane w sesji. Bardziej powinno tu chyba być:

  1. $id = $_SESSION['uzytkownik']['id'];
  2. $nick = $_SESSION['uzytkownik']['login'];


  1. if ((empty($nick)) AND (empty($haslo))) {
  2. echo '<br>Zarejestruj się lub zaloguj<br><a href="index.php">Strona Główna</a><br>';


Prawdopodobnie to cię nie pozwala logować, gdyż nigdzie nie masz zadeklarowanych zmiennych $nick i $ hasło. Po drugie jak już chcesz sprawdzić czy zalogował się prawidłowy user, to sprawdzaj to co jest w sesji z bazą. Po trzecie w sesji nie masz wartości Hasło! Wiec czy prawidłowy user się zalogował powinno się sprawdzić czy $_SESSION['uzytkownik']['login'] istnieje w bazie danych i czy są one identyczne.
thomson89
Po pierwsze, na czas naprawy usuń headera.

Po drugie, powiedz czy dane się nie zgadzają czy wyświetla się komunikat
  1. echo 'Logowanie nieudane. Sprawdź pisownię nicku oraz hasła.';


Przenosi cię do strony indeks.php?

--EDIT:
login.php - to:
  1. $_SESSION['uzytkownik']['nick'] = $results['nick'];

zamień na:
  1. $_SESSION['uzytkownik']['nick'] = $results['nick'];


--EDIT2:

index popraw:
  1. <?php session_start();
  2.  
  3. include("config.php");
  4. $id = $_SESSION['uzytkownik']['id']; //tutaj zamieniłem przypisywanie - [rzypisywałeś puste zmienne do istniejących
  5. $nick = $_SESSION['uzytkownik']['nick']; //i tu to samo co wyżej
  6. if (empty($nick)) {
  7. echo '<br>Zarejestruj się lub zaloguj<br><a href="login.php">Strona Główna</a><br>'; //tu poprawiłem index na login
  8. }/*
  9. $user = mysql_fetch_array(mysql_query("SELECT * FROM uzytkownicy WHERE `nick`='$nick' AND `haslo`='$haslo' LIMIT 1"));
  10.   if (empty($user[id]) OR !isset($user[id])) {
  11. echo '<br>Nieprawidłowe logowanie.Spróbuj pomownie.<br>';
  12. exit;
  13. }*/
  14. //powyższy kod jest nie potrzebny, gdyż nie wiem czy zauważyłeś ale logowania dokonałeś już w pliku login
  15. // tresc dla zalogowanego uzytkownika
  16. echo 'Witaj '.$user[nick].' zostałeś/aś pomyślnie zalogowany/a, tutaj umieść ukryta strone tylko dla zalogowanych';
  17. echo '<br><a href="wyloguj.php">Wyloguj mnie</a>';
  18. ?>
dg2001
Tu jest jeszcze błąd:
  1. echo 'Witaj '.$user[nick].' zostałeś/aś pomyślnie zalogowany/a, tutaj umieść ukryta strone tylko dla zalogowanych';
  2. echo '<br><a href="wyloguj.php">Wyloguj mnie</a>';


Powinno być:
  1. echo 'Witaj '.$nick.' zostałeś/aś pomyślnie zalogowany/a, tutaj umieść ukryta strone tylko dla zalogowanych';
  2. echo '<br><a href="wyloguj.php">Wyloguj mnie</a>';

Croos22
Poprawiłem wszystko usunąłem header wyświetlał się komunikat, że jestem zalogowany lecz gdy go z powrotem przywróciłem pojawiał się komunikat z indeks.php informacja dla niezalogowanych.
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.