Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Panel
Forum PHP.pl > Forum > Przedszkole
onelife
Witajcie,jestem początkujący. Chce sobie zrobić panel,który będzie wyświetlał takie rzeczy jak nick,punkty itp. Zrobiłem skrypt na logowanie z tego poradnika http://burning-brushes.pl/tutoriale-phpmys...-i-rejestracja/ .

  1. // jeśli zostanie naciśnięty przycisk "Zaloguj"
  2. if(isset($_POST['ok']))
  3. {
  4. $nick = trim($_POST['nick']);
  5.  
  6. $pass = trim($_POST['pass']);
  7.  
  8.  
  9. // sprawdzamy czy wszystkie dane zostały podane
  10. if(empty($nick) || empty($pass)) echo 'Wpisz wszystkie pola';
  11.  
  12. // jeśli tak...
  13. else
  14. {
  15. // filtrujemy dane
  16.  
  17.  
  18.  
  19.  
  20. // sprawdzamy czy istnieje użytkownik z takim loginem i hasłem
  21.  
  22.  
  23. $result = mysql_query ("SELECT * FROM `panel` WHERE `nick`='$nick' AND `password`='$pass'");
  24.  
  25. // jeśli nie istnieje
  26. if(mysql_num_rows($result)==0) echo 'Niestety podałes niepoprawne dane!';
  27.  
  28. // jeśli tak...
  29. else
  30. {
  31. // dodajemy wynik zapytania do tablicy
  32. $row = mysql_fetch_array($result);
  33.  
  34. // ustawianie sesji że użytkownik jest zalogowany
  35. $_SESSION['logged'] = true;
  36.  
  37. // dodawanie do sesji id użytkownika, login oraz datę rejestracji
  38. $_SESSION['nick'] = $row['nick'];
  39. $_SESSION['respect'] = $row['respect'];
  40. $_SESSION['skill'] = $row['skill'];
  41. $_SESSION['level'] = $row['level'];
  42.  
  43.  
  44. // wyświetlenie komunikatu oznaczającego poprawne logowanie
  45. header('location: panel.php');
  46. }
  47. }
  48. }
  49. }
  50. // rozłączenie z bazą danych
  51.  
  52. // koniec buforowania
  53. ?>


I tam co jest "dodawanie do sesji" dodałem to co mnie interesuje żeby wyświetliło po zalogowaniu. W pliku panel.php zrobiłem tak :


  1. // jeśli user jest zalogowany
  2. if($_SESSION['logged'])
  3. {
  4. // wyświetlamy userowi jego dane
  5. echo 'Witaj '.$_SESSION['nick'].'!<br />';
  6. echo 'Punkty: '.$_SESSION['respect'].'.<br />';
  7. echo 'Skill: '.$_SESSION['skill'].'.<br />';
  8. echo 'Level: '.$_SESSION['level'].'.<br />';
  9. echo '<a href="logout.php">WYLOGUJ</a>';
  10. }
  11.  
  12. // jeśli nie jest zalogowany


Tylko że mam problem bo wyświetla mi tylko nick i respect a level i skill już nie,jest tylko sama kropka.

Kshyhoo
A masz jakieś dane w bazie?
onelife
Tak,mam

EDIT:

Już sobie poradziłem smile.gif
Kshyhoo
Cytat(onelife @ 29.08.2013, 11:40:41 ) *
Tak,mam

EDIT:

Już sobie poradziłem smile.gif

Zwyczajem Forum jest podanie rozwiązania problemu smile.gif
Turson
Btw. trzymanie w sesji czegoś więcej aniżeli id usera jest bezsensu.
onelife
To jakbyś proponował to poprawić? smile.gif Bo jak próbowałem bez sesji a samym zapytaniem to poźniej strona robiła mi się cała biała
Turson
Jak napiszesz poprawne zapytanie to strona nie będzie biała
Turson
  1. $wynik = mysql_query("SELECT * FROM `statystyki` WHERE `nick` = '{$nick}'");

Co te klamry tu robią?


btw. polecam przejście na PDO a już nigdy nie wrócisz to zwykłych zapytań wink.gif
-onelife-
A co jest z nimi nie tak? smile.gif
kujol
Polecam jakiś kurs biggrin.gif :

http://webmade.org/
-onelife-
Zrobiłem coś takiego


  1.  
  2. *** połączenie z bazą ****
  3.  
  4.  
  5.  
  6. // jeśli user jest zalogowany
  7. if($_SESSION['logged'])
  8. {
  9.  
  10.  
  11. // wyświetlamy userowi jego dane
  12. $zapytanie = "SELECT * FROM `statystyki` WHERE `nick`='$nick' AND `password`='$pass'";
  13. //wykonujemy zdefiniowane zapytanie na bazie mysql
  14. $wynik = mysql_query($zapytanie);
  15. while ( $row = mysql_fetch_row($wynik) ) {
  16. echo "</tr>";
  17. echo "<td bgcolor=\"ffff99\">" . $row['respect'] . "</td>";
  18. echo "<td bgcolor=\"ffff99\">" . $row['level'] . "</td>";
  19. echo "</tr>";
  20. }
  21. echo "</table>";
  22.  
  23.  
  24. //Zamykamy połączenie z bazą danych
  25. if ( !mysql_close() ) {
  26. echo 'Nie moge zakonczyc polaczenia z baza danych';
  27. exit (0);
  28. }
  29. }
  30.  
  31.  
  32.  
  33. // jeśli nie jest zalogowany
  34. else



Ale nic się nie wyświetla.
Kshyhoo
Pokaż strukturę bazy.
-onelife-
  1. --
  2. -- Struktura tabeli dla `statystyki`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `statystyki` (
  6. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  7. `nick` varchar(24) CHARACTER SET ascii NOT NULL,
  8. `password` varchar(32) NOT NULL,
  9. `ip_registered` varchar(16) NOT NULL,
  10. `ip_last` varchar(16) NOT NULL,
  11. `datetime_registered` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  12. `datetime_last` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  13. `session` bigint(11) NOT NULL,
  14. `level` tinyint(4) NOT NULL,
  15. `vip` date NOT NULL,
  16. `gang` int(11) NOT NULL,
  17. `language` tinyint(4) NOT NULL,
  18. `ban_count` mediumint(9) NOT NULL,
  19. `kick_count` mediumint(9) NOT NULL,
  20. `login_count` mediumint(9) NOT NULL,
  21. `kill_count` mediumint(9) NOT NULL,
  22. `teamkill_count` mediumint(9) NOT NULL,
  23. `death_count` mediumint(9) NOT NULL,
  24. `suicide_count` mediumint(9) NOT NULL,
  25. `respect` int(11) NOT NULL,
  26. `skill` mediumint(9) NOT NULL,
  27. `next_nick_change` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  28. `bank_money` int(11) NOT NULL,
  29. `wallet_money` int(11) NOT NULL,
  30. `hitman_prize` int(11) NOT NULL,
  31. `jail` mediumint(9) NOT NULL DEFAULT '-1',
  32. `last_skin` smallint(5) unsigned NOT NULL DEFAULT '0',
  33. `mute` mediumint(9) NOT NULL DEFAULT '0',
  34. `hud0` tinyint(1) NOT NULL DEFAULT '1',
  35. `hud1` tinyint(1) NOT NULL DEFAULT '1',
  36. `hud2` tinyint(1) NOT NULL DEFAULT '1',
  37. `hud3` tinyint(1) NOT NULL DEFAULT '1',
  38. `hud4` tinyint(1) NOT NULL DEFAULT '1',
  39. `hud5` tinyint(1) NOT NULL DEFAULT '1',
  40. `hud6` tinyint(1) NOT NULL DEFAULT '1',
  41. `hud7` tinyint(1) NOT NULL DEFAULT '1',
  42. `hud8` tinyint(1) NOT NULL DEFAULT '1',
  43. `gender` tinyint(1) NOT NULL DEFAULT '0',
  44. PRIMARY KEY (`id`),
  45. UNIQUE KEY `nick` (`nick`),
  46. KEY `session` (`session`),
  47. KEY `respect` (`respect`),
  48. KEY `skill` (`skill`),
  49. FULLTEXT KEY `ip_last` (`ip_last`)
  50. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=17017 ;
  51.  
  52. --
  53. -- Zrzut danych tabeli
Kshyhoo
A tak:
  1. $wynik = mysql_query("SELECT * FROM statystyki WHERE `nick`='$nick'");
  2.  
  3. while ($wynik and $dane = mysql_fetch_assoc($wynik)) {
  4. echo '<p>';
  5. echo '<b>Nick:</b> '.$dane['nick'].'<br />';
  6. echo '<b>Level:</b> '.$dane['level'].'<br />';
  7. echo '<b>Respect:</b> '.$dane['respect'].'<br />';
  8. echo '<b>Skil:</b> '.$dane['skill'];
  9. echo '</p>';
  10. }

questionmark.gif
-onelife-
Niestety dalej nie działa


  1. <?php
  2.  
  3. // rozpoczęcie buforowania (jest to potrzebne by nie mieć błędów typu headers already sent)
  4.  
  5. // start sesji
  6.  
  7. // połączenie z mysql
  8. mysql_connect('xxxx, 'xxxxx', 'xxxxx')
  9. or die('Nieudane polaczenie z baza danych...');
  10.  
  11. // wybór bazy danych
  12. mysql_select_db('xxxxxx')
  13. or die('Nie udalo sie wybrac bazy danych...');
  14.  
  15. $wynik = mysql_query("SELECT * FROM `statystyki` WHERE `nick`='$nick'");
  16.  
  17. while ($wynik and $dane = mysql_fetch_assoc($wynik)) {
  18. echo '<p>';
  19. echo '<b>Nick:</b> '.$dane['nick'].'<br />';
  20. echo '<b>Level:</b> '.$dane['level'].'<br />';
  21. echo '<b>Respect:</b> '.$dane['respect'].'<br />';
  22. echo '<b>Skil:</b> '.$dane['skill'];
  23. echo '</p>';
  24. }
  25. mysql_close();
  26.  
  27. ?>



Biała strona
-onelife-
Przepraszam za double post,nie że biała strona tylko nic się nie wyświetla.
Turson
  1. mysql_connect('xxxx, 'xxxxx', 'xxxxx')

Brakuje zamknięcia wartości
-onelife-
poprawiłem na

  1. mysql_connect('xxxx, 'xxxxx', 'xxxxx');
i pusta biała strona.
Kshyhoo
  1. $wynik = mysql_query("SELECT * FROM statystyki WHERE nick='$nick'");

Co mówi echo zapytania?
Turson
Widzę, że nie zrozumiałeś...
  1. mysql_connect('xxxx, 'xxxxx', 'xxxxx'); //źle
  2. mysql_connect('xxxx', 'xxxxx', 'xxxxx'); //dobrze

Widzisz różnicę?
-onelife-
A no racja,teraz już widzę. Z tym,że gdy zamknąłem to efekt nadal taki sam,zawartość z zapytania się nie wyświetla..;/
Turson
  1. while ($wynik and $dane = mysql_fetch_assoc($wynik))

Nie rozumiem sensu dania '$wynik and $dane'

Popraw na samo $dane
fiszol
Zacznij od ustawienia error_reporting i display_errors (ini_set). Bez tego nie dojdziesz co jest nie tak, a ta "pusta biała strona" świadczy o tym, że coś jest skopane.
Turson
Jeśli jest pusta najczęściej są tego 2 powody:
- nie sprawdzasz działania na jakimś serwerze tylko bezpośrednio na komputerze bez użycia xamppa, webserv etc.
- plik ma rozszerzenie html zamiast php

Kod, który podałeś w poście #24 jest całym kodem w tym pliku? Jak masz coś tam jeszcze oprócz tego, to wypadałoby podać...
Dominator
Pokaż cały plik, a postaramy się pomóc.
-onelife-
Cytat(TursoN @ 8.09.2013, 11:39:16 ) *
Jeśli jest pusta najczęściej są tego 2 powody:
- nie sprawdzasz działania na jakimś serwerze tylko bezpośrednio na komputerze bez użycia xamppa, webserv etc.
- plik ma rozszerzenie html zamiast php

Kod, który podałeś w poście #24 jest całym kodem w tym pliku? Jak masz coś tam jeszcze oprócz tego, to wypadałoby podać...


Sprawdzam na swoim vps,rozszerzenie jest dobre .php


A więc tak na stronie głównej mam logowanie za pomocą nicku i hasła z poradnika i wygląda to tak :


  1. // jeśli zostanie naciśnięty przycisk "Zaloguj"
  2. if(isset($_POST['ok']))
  3. {
  4. $nick = trim($_POST['nick']);
  5.  
  6. $pass = trim($_POST['pass']);
  7.  
  8.  
  9. // sprawdzamy czy wszystkie dane zostały podane
  10. if(empty($nick) || empty($pass)) echo 'Wpisz wszystkie pola';
  11.  
  12. // jeśli tak...
  13. else
  14. {
  15. // filtrujemy dane
  16.  
  17.  
  18.  
  19.  
  20. // sprawdzamy czy istnieje użytkownik z takim loginem i hasłem
  21.  
  22.  
  23. $result = mysql_query ("SELECT * FROM `statystyki` WHERE `nick`='$nick' AND `password`='$pass'");
  24.  
  25. // jeśli nie istnieje
  26. if(mysql_num_rows($result)==0) echo 'Niestety podałes niepoprawne dane!';
  27.  
  28. // jeśli tak...
  29. else
  30. {
  31. // dodajemy wynik zapytania do tablicy
  32. $row = mysql_fetch_array($result);
  33.  
  34. // ustawianie sesji że użytkownik jest zalogowany
  35. $_SESSION['logged'] = true;
  36.  
  37. // dodawanie do sesji id użytkownika, login oraz datę rejestracji
  38. $_SESSION['nick'] = $row['nick'];
  39.  
  40.  
  41. // wyświetlenie komunikatu oznaczającego poprawne logowanie
  42. header('location: panel.php');
  43. }
  44. }
  45. }
  46. }
  47. // rozłączenie z bazą danych
  48.  
  49. // koniec buforowania
  50. ?>


Po zalogowaniu przenosi nas do panel.php

  1. <?php
  2.  
  3.  
  4. // rozpoczęcie buforowania (jest to potrzebne by nie mieć błędów typu headers already sent)
  5.  
  6. // start sesji
  7.  
  8.  
  9. // tutaj mam połączenie z mysql
  10.  
  11.  
  12.  
  13. $wynik = mysql_query("SELECT * FROM `statystyki` WHERE `nick`='$nick'");
  14.  
  15. while ($dane = mysql_fetch_assoc($wynik)) {
  16. echo '<p>';
  17. echo '<b>Nick:</b> '.$dane['nick'].'<br />';
  18. echo '<b>Level:</b> '.$dane['level'].'<br />';
  19. echo '<b>Respect:</b> '.$dane['respect'].'<br />';
  20. echo '<b>Skil:</b> '.$dane['skill'];
  21. echo '</p>';
  22. }
  23.  
  24. ?>



+ do tego mam jeszcze tylko samo tło pod stronę,tło się wyświetla wynik zapytania nie/



fiszol
samo error reporting nie spowoduje wyświetlenia błędu jeśli w ustawieniach php masz display_errors wyłączone.

wrzuć na samym początku, jeszcze przed ob_start:
  1. <?php
  2. ini_set('display_errors',1);
  3. error_reporting('E_ALL');
  4. ?>
Twoje wywołanie error_reporting też pownno wygenerować błąd, notice o użyciu niezdefiniowanej stałej.
-onelife-
Już jakiś postęp

"Notice: Undefined variable: nick in /var/www/panel.php on line 55 "


  1. or die('Nie udalo sie wybrac bazy danych...');
  2.  
  3.  
  4. [b] $wynik = mysql_query("SELECT * FROM `statystyki` WHERE `nick`='$nick'");[/b]
  5.  
  6. while ($dane = mysql_fetch_assoc($wynik)) {
  7. echo '<p>';
  8. echo '<b>Nick:</b> '.$dane['nick'].'<br />';
  9. echo '<b>Level:</b> '.$dane['level'].'<br />';
  10. echo '<b>Respect:</b> '.$dane['respect'].'<br />';
  11. echo '<b>Skil:</b> '.$dane['skill'];
  12. echo '</p>';
  13. }


Linijka 55 to ta pogrubiona
Turson
I wszystko jasne.
Co to $nick? Albo zdefiniuj to z POST albo GET i po sprawie.
fiszol
Gubisz gdzieś dane przy przesyłaniu formularza, teraz var_dump($_POST) przed zapytaniem:
  1. var_dump($_POST);
  2. $wynik = mysql_query("SELECT * FROM `statystyki` WHERE `nick`='$nick'");
-onelife-
Dodałem to


var_dump($_POST);

i

  1. array(0) { } Notice: Undefined variable: nick in
Turson
Nie widzisz, że nigdzie nie zdefiniowałeś co to $nick? Skąd skrypt ma wiedzieć?
fiszol
zdefiniował, przynajmniej teoretycznie, tutaj:
  1. // jeśli zostanie naciśnięty przycisk "Zaloguj"
  2. if(isset($_POST['ok']))
  3. {
  4. $nick = trim($_POST['nick']);
  5.  
  6. $pass = trim($_POST['pass']);
  7. // bla bla reszta kodu

$_POST jest pusty, nie przesłałeś formularza i tyle. onelife pokarz formularz którego używasz do przesłania danych
-onelife-
Formularz :



  1. // tworzymy prosty formularz
  2.  
  3. echo '<center><form action="index.php" method="POST">
  4. Nick: <br />
  5. <input type="text" name="nick" placeholder="Wprowadź nick z gry" ><br />
  6. Hasło: <br />
  7. <input type="password" name="pass" placeholder="Wprowadź hasło" ><br />
  8. <input type="submit" name="ok" value="Zaloguj">
  9. </form></center>';
  10. // jeśli zostanie naciśnięty przycisk "Zaloguj"
  11. if(isset($_POST['ok']))
  12. {
  13. $nick = trim($_POST['nick']);
  14.  
  15. $pass = trim($_POST['pass']);
  16.  
  17.  
Turson
Zdefiniował, ale nie w tym pliku co trzeba.

W sesji trzymasz nick usera, wykorzystaj to
  1. $wynik = mysql_query('SELECT * FROM statystyki WHERE nick='.$SESSION["nick"].'');
fiszol
nvm, Turson wskazał Ci błąd. formularz wysyłasz do index.php, a do $nick próbujesz się odwołać w panel.php. Zrób tak jak pokazał Ci Turson albo zdefiniuj sobie nick jeszcze raz, z sesji, gdzieśna początku dokumentu, byle po session_start(). $nick = $_SESSION['nick'];
onelife
Okej,już mam. Wielkie dzięki za pomoc. smile.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.