Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Pobranie z bazy danych nie działa
Forum PHP.pl > Forum > Przedszkole
goukan
Witam mam problem. Otóż na mojej stronie na której jest skrypt rejestracji i logowania dodałem jeszcze skrypt z newsami. Wiadomo, trzeba się zalogować aby móc pisać newsy na stronę. Dodałem do mojej bazy danych kolumne o nazwie 'acces' i tam dałem tinyint default 0. Jeżeli jest 1 to znaczy, że ktoś jest administratorem strony, aby to zmienić trzeba wejść do bazy i zmienić to ręcznie. Tera tak: jeżeli ktoś się zarejestruje na stronie to automatycznie przydziela mu acces 0, więc jest zwykłym użytkownikiem. W pliku mam coś takiego:
  1. <?php
  2. if (isset($_SESSION['login'])) {
  3. echo '<br>';
  4. echo '<div class="form">Jesteś zalogowany jako: <strong>'.$_SESSION['login'].'</strong></div>';
  5. }
  6. else {
  7. echo '';
  8. }
  9.  
  10. ?>


To jest w pliku header gdzie jak ktoś się zaloguje to pokazuje mu że jest zalogowany jako:... A chciałbym dodać pod tym takie zapytanie sql:
"jeśli acces =1 wtedy wyświetl link do mozliwosci pisania newsów w przeciwnym wypadku nie pokazuj nic"
robiłem to na różne sposoby, ale ciągle nie działa. Mniej więcej tak:
  1. $login = $_POST["login"];
  2. $haslo = $_POST["haslo"];
  3. $wynik=mysql_query("SELECT * FROM uzytkownik WHERE login='$login' and haslo='$haslo' and acces=1");
  4. if (mysql_num_rows($wynik) == 0) {
  5. $informacja = mysql_fetch_array($wynik);
  6. echo 'Jestes adminem';
  7. }
  8. else {
  9. echo 'nie jestes adminem';
  10. }


Niby działa i pojawia się tylko napis "jestes adminem" , ale jak się wyloguje to ten napis tez jest;/ Nie wiem co jest grane
Michael2318
Najlepiej do zmiennej sesyjnej przypisz sobie id obecnie zalogowanego użytkownika i wykonaj sobie takie zapytanie:

  1. $id = $_SESSION['login']; // tutaj mamy ID obecnie zalogowanego usera
  2. $sql = "SELECT * FROM `users` WHERE user_id = ".$id;
  3. if ( !($result = mysql_query($sql)) )
  4. {
  5. die('error in sql<br>'.mysql_error());
  6. }
  7. $num = mysql_num_rows($result);
  8. if ( $num < 1 )
  9. {
  10. header("Location: index.html"); // wylogowujemy gościa i przerzucamy go na główną stronę bo coś nie gra
  11. }
  12. else
  13. {
  14. $userdata = mysql_fetch_assoc($result);
  15. }


W tym momencie masz do dyspozycji tablicę $userdata, która zawiera wszystkie dane zalogowanego usera. Teraz, aby sprawdzić czy user to admin wystarczy:
  1. if ( $userdata['access'] )
  2. {
  3. echo 'witaj admin!';
  4. }
  5. else
  6. {
  7. echo 'witaj użytkowniku!';
  8. }
bpskiba
bøád logiczny:
  1. $wynik=mysql_query("SELECT * FROM uzytkownik WHERE login='$login' and haslo='$haslo' and acces=1");
  2. if (mysql_num_rows($wynik) == 0) {
  3. $informacja = mysql_fetch_array($wynik);
  4. echo 'Jestes adminem';
  5. }


Jezli zapytanie nie zwroci rekordow, to po co mysql_num_rows?? i kto jest adminem??
goukan
Niestety jak oba kody wkleiłem do mojego header to wyskakuje błąd :error in sql Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

nie wiem w czym może być problem;/

@up
niestety twój kod też nie pomógł. Pokazuje się ten napis, lecz widoczny jest on nawet jeżeli nie jestem zalogowany na żadne konto;/
Michael2318
Nie możliwe, musisz mieć kod pochrzaniony. Zapewne sesja cały czas istnieje, a Ty zakładasz że tak nie jest i stąd problem.
goukan
Po zalogowaniu użytkownika, przechodzi na stronę główną index.php w której jest include do header który wygląda oryginalnie tak:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. <meta name="Description" content="Serwer MyCrafts" />
  6. <meta name="Keywords" content="Minecraft, MyCrafts, Igrzyska œmierci" />
  7. <link rel="stylesheet" href="style.css" type="text/css">
  8. <link href="images/favicon.ico" rel="icon" type="image/x-icon" />
  9. <title>MyCrafts</title>
  10. </head>
  11. <body>
  12. <center>
  13. <img src="images/logo2.png"/>
  14. <div id="menu">
  15. <ul>
  16. <li><a href="index.php">Strona główna</a></li>
  17. <li><a href="#.php">Test1</a></li>
  18. <li><a href="#.php">Test2</a></li>
  19. <li><a href="#.php">Test3</a></li>
  20. <?php if (isset($_SESSION['login'])) { echo ''; } else {?>
  21. <li><a href="logowanie.php">Logowanie</a></li>
  22. <?php } ?>
  23. <?php if (isset($_SESSION['login'])) { echo ''; } else {?>
  24. <li><a href="rejestracja.php">Zarejestruj się</a></li>
  25. <?php } ?>
  26. <?php if (!isset($_SESSION['login'])) { echo ''; } else {?>
  27. <li><a href="zmiana-danych.php">Zmień swoje dane</a></li>
  28. <?php } ?>
  29. <?php if (!isset($_SESSION['login'])) { echo ''; } else {?>
  30. <li><a href="logowanie.php?wylogowanie=tak">Wyloguj się</a></li>
  31. <?php } ?>
  32. </ul>
  33.  
  34.  
  35. <?php
  36. // jeżeli użytkownik jest zalogowany wyświetlamy inforamcję
  37. if (isset($_SESSION['login'])) {
  38. echo '<br>';
  39. echo '<div class="form">Jesteś zalogowany jako: <strong>'.$_SESSION['login'].'</strong></div>';
  40. }
  41. else {
  42. echo '';
  43. }
  44.  
  45.  
  46. ?>
  47. </div>
  48. <div id="page">


Więc skoro ktoś się loguje i pokazuje się na górze "Jesteś zalogowany jako: ... " to znaczy, że sesja istnieje. W takim razie w czym może tkwić błąd w zwykłym przechwyceniu jednej danej z tabeli z bazy...
koxu1996
A dałeś że po zalogowaniu wpisuje do $_SESSION['login'] login użytkownika?
goukan
  1. $wynik=mysql_query("SELECT * FROM $tabela WHERE
  2. login='$login' and haslo='$haslo' and status=0");
  3.  
  4. // jeżeli użytkownik zarejestrował się, a nie aktywował swojego konta, to wyświetla się komunikat
  5. if (mysql_num_rows($wynik) == 1) {
  6. $informacja = mysql_fetch_array($wynik);
  7. echo '<span class="blad">Nie aktywowałeś jeszcze swojego konta. Aby to zrobić, wejdź w swoją skrzynkę odbiorczą, a następnie znajdź wiadmość z linkiem aktywacyjnym i aktywuj swoje konto</span>';
  8. }
  9.  
  10. // jeżeli wszystko jest dobrze, użytkownik się loguje
  11.  
  12. $wynik=mysql_query("SELECT * FROM $tabela WHERE
  13. login='$login' and haslo='$haslo' and status=1");
  14.  
  15. if (mysql_num_rows($wynik) == 1) {
  16. $informacja = mysql_fetch_array($wynik);
  17. $_SESSION["login"] = $informacja["login"];
  18. header('Location: index.php ');
  19. } else {
  20. echo '<span class="blad">Zostały wprowadzone nieprawidłowe dane!</span>';
  21. }
  22. mysql_close($polaczenie);


Tak wyglada skrypt logowania
Michael2318
jak odbywa sie wylogowywanie ?
goukan
Menu button:
  1. <?php if (!isset($_SESSION['login'])) { echo ''; } else {?>
  2. <li><a href="logowanie.php?wylogowanie=tak">Wyloguj się</a></li>
  3. <?php } ?>


Skrypt
  1. if ($_GET["wylogowanie"] == "tak") {
  2. // niszczenie sesji użytkownika
  3. header('Location: index.php'); // przekierwanie na stronę główną
  4. }


Ok zrobiłem sam..

Rozwiązanie kompletne:

  1. <?php
  2. include 'inc/db.php';
  3. if (isset($_SESSION['login']))
  4. {
  5. $nickname = $_SESSION['login'];
  6. $access = mysql_result(mysql_query("SELECT acces FROM uzytkownik where login='".$nickname."' LIMIT 1"),0);
  7. echo '<br>';
  8. echo '<div class="form">Jesteś zalogowany jako: <strong>'.$nickname.'</strong></div>';
  9. if($access == 1)
  10. {
  11. echo '<br>';
  12. echo '<div class="form">Jesteś adminem</div>';
  13. }
  14. }
  15.  
  16. ?>
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.