Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie użytkowników z bazy
Forum PHP.pl > Forum > PHP
LucKy_skiLL
Mam taki skrypt na wyświetlywanie userów z bazy

  1. <?php
  2. echo "<div id='srodek'><div id='tlo'><center><b>Użytkownicy</b></center></div></div><br/><br/><br/><br/><br/>";
  3.  
  4. $wynik = mysql_query('SELECT admin FROM uzytkownik WHERE login ="'.$_SESSION['login'].'"');
  5. $wynik = mysql_fetch_row($wynik); // Zamiana wyniku na tablice
  6.  
  7.  
  8. if (($wynik[0] == 1) and (isset($_SESSION['login']))) { // dostęp dla zalogowanego użytkownika
  9.  
  10. $result = mysql_query("SELECT Count(id) FROM uzytkownik");
  11. $row = mysql_fetch_row($result);
  12. $count_users = $row[0];
  13.  
  14. if ($count_users > 0) {
  15. $result = mysql_query("SELECT * FROM uzytkownik");
  16. while ($row = mysql_fetch_assoc($result)) {
  17. if (($row['status']) == 1) {
  18. $row['status'] = 'Tak';
  19. } else {
  20. $row['status'] = 'Nie';
  21. }
  22.  
  23. if (($row['admin']) == 1) {
  24. $row['admin'] = 'Tak';
  25. } else {
  26. $row['admin'] = 'Nie';
  27. }
  28. echo "<div id='srodek'><div id='tlo'><table width='98%' align='center' cellpadding='5' cellspacing='0'>
  29. <tr><th><div align='center'>ID</div></th><th><div align='center'>Login</div></th><th><div align='center'>GG</div></th><th><div align='center'>E-Mail</div></th><th><div align='center'>Aktywny</div></th><th><div align='center'>Admin</div></th></tr>
  30. <tr>
  31. <td><div align='center'><font size='2'>".$row['id']."</font></div></td>
  32. <td><div align='center'><font size='2'>".$row['login']."</font></div></td>
  33. <td><div align='center'><font size='2'>".$row['gg']."</font></div></td>
  34. <td><div align='center'><font size='2'>".$row['email']."</font></div></td>
  35. <td><div align='center'><font size='2'>".$row['status']."</font></div></td>
  36. <td><div align='center'><font size='2'>".$row['admin']."</font></div></td>
  37. </tr>\n
  38. </table></div></div>";
  39. }
  40. }
  41. } else {
  42. echo "<div id='srodek'><div id='tlo'><center>Musisz być zalogowany</center></div></div>";
  43. }
  44.  
  45. ?>


I wszystko jest fajnie, ale wyświetla tylko jednego użytkownika, a w bazie jest ich więcej.

cv65
  1. <?php
  2. echo "<div id='srodek'><div id='tlo'><center><b>Użytkownicy</b></center></div></div><br/><br/><br/><br/><br/>";
  3.  
  4. $wynik = mysql_query('SELECT admin FROM uzytkownik WHERE login ="'.$_SESSION['login'].'"');
  5. while ($wynik = mysql_fetch_assoc($wynik)) // Zamiana wyniku na tablice
  6. {
  7.  
  8. if (($wynik[0] == 1) and (isset($_SESSION['login']))) { // dostęp dla zalogowanego użytkownika
  9.  
  10. $result = mysql_query("SELECT Count(id) FROM uzytkownik");
  11. $row = mysql_fetch_row($result);
  12. $count_users = $row[0];
  13.  
  14. if ($count_users > 0) {
  15. $result = mysql_query("SELECT * FROM uzytkownik");
  16. while ($row = mysql_fetch_assoc($result)) {
  17. if (($row['status']) == 1) {
  18. $row['status'] = 'Tak';
  19. } else {
  20. $row['status'] = 'Nie';
  21. }
  22.  
  23. if (($row['admin']) == 1) {
  24. $row['admin'] = 'Tak';
  25. } else {
  26. $row['admin'] = 'Nie';
  27. }
  28. echo "<div id='srodek'><div id='tlo'><table width='98%' align='center' cellpadding='5' cellspacing='0'>
  29. <tr><th><div align='center'>ID</div></th><th><div align='center'>Login</div></th><th><div align='center'>GG</div></th><th><div align='center'>E-Mail</div></th><th><div align='center'>Aktywny</div></th><th><div align='center'>Admin</div></th></tr>
  30. <tr>
  31. <td><div align='center'><font size='2'>".$row['id']."</font></div></td>
  32. <td><div align='center'><font size='2'>".$row['login']."</font></div></td>
  33. <td><div align='center'><font size='2'>".$row['gg']."</font></div></td>
  34. <td><div align='center'><font size='2'>".$row['email']."</font></div></td>
  35. <td><div align='center'><font size='2'>".$row['status']."</font></div></td>
  36. <td><div align='center'><font size='2'>".$row['admin']."</font></div></td>
  37. </tr>\n
  38. </table></div></div>";
  39. }
  40. }
  41. } else {
  42. echo "<div id='srodek'><div id='tlo'><center>Musisz być zalogowany</center></div></div>";
  43. }
  44. }
  45. ?>


Pętla while
LucKy_skiLL
Gdzie jej użyć ?
cv65
Dałem Ci gotowca

  1. $wynik = mysql_fetch_row($wynik);
zwraca tylko jeden wynik
zaś

  1. while ($wynik = mysql_fetch_assoc($wynik))
  2. {
  3. echo $wynik[1];
  4. }


To jest przykład, pętla zwróci wszystkie wartości
LucKy_skiLL
No, ale ja wyświetlam rekordy tak

<td><div align='center'><font size='2'>".$row['id']."</font></div></td>
<td><div align='center'><font size='2'>".$row['login']."</font></div></td>
<td><div align='center'><font size='2'>".$row['gg']."</font></div></td>
<td><div align='center'><font size='2'>".$row['email']."</font></div></td>
<td><div align='center'><font size='2'>".$row['status']."</font></div></td>
<td><div align='center'><font size='2'>".$row['admin']."</font></div></td>

markonix
Czemu ten skrypt wykonuje aż 3 zapytania do tabeli `uzytkownik`?

Widzę tam na początku autoryzacje - po jakiego grzyba zapytanie do bazy zamiast po prostu sprawdzić czy istnieje w sesji.
Po co te zapytanie "autoryzujące" jest w pętli?
O css ktoś tu chyba nie słyszał.
LucKy_skiLL
Odświeżam, jak zastosować te pętle ?
markonix
Zamiast odświeżania może byś zamieścił poprawiony kod zgodnie z sugestiami?
LucKy_skiLL
"Widzę tam na początku autoryzacje - po jakiego grzyba zapytanie do bazy zamiast po prostu sprawdzić czy istnieje w sesji."

Niby tak, ale może być zalogowany i nie być adminem, i wtedy miał by dostęp, a tego nie chcę.


  1. <?php
  2. echo "<div id='srodek'><div id='tlo'><center><b>Użytkownicy</b></center></div></div><br/><br/><br/><br/><br/>";
  3.  
  4. $wynik = mysql_query('SELECT admin FROM uzytkownik WHERE login ="'.$_SESSION['login'].'"');
  5. $wynik = mysql_fetch_row($wynik); // Zamiana wyniku na tablice
  6.  
  7.  
  8. if (($wynik[0] == 1) and (isset($_SESSION['login']))) { // dostęp dla zalogowanego użytkownika
  9.  
  10. $result = mysql_query("SELECT Count(id) FROM uzytkownik");
  11. $row = mysql_fetch_row($result);
  12. $count_users = $row[0];
  13.  
  14. if ($count_users > 0) {
  15. $result = mysql_query("SELECT * FROM uzytkownik");
  16.  
  17. while ($row = mysql_fetch_assoc($result)) {
  18. if (($row['status']) == 1) {
  19. $row['status'] = 'Tak';
  20. } else {
  21. $row['status'] = 'Nie';
  22. }
  23.  
  24. if (($row['admin']) == 1) {
  25. $row['admin'] = 'Tak';
  26. } else {
  27. $row['admin'] = 'Nie';
  28. }
  29. echo "<div id='srodek'><div id='tlo'><table width='98%' align='center' cellpadding='5' cellspacing='0'>
  30. <tr><th><div align='center'>ID</div></th><th><div align='center'>Login</div></th><th><div align='center'>GG</div></th><th><div align='center'>E-Mail</div></th><th><div align='center'>Aktywny</div></th><th><div align='center'>Admin</div></th></tr>
  31. <tr>
  32. <td><div align='center'><font size='2'>".$row['id']."</font></div></td>
  33. <td><div align='center'><font size='2'>".$row['login']."</font></div></td>
  34. <td><div align='center'><font size='2'>".$row['gg']."</font></div></td>
  35. <td><div align='center'><font size='2'>".$row['email']."</font></div></td>
  36. <td><div align='center'><font size='2'>".$row['status']."</font></div></td>
  37. <td><div align='center'><font size='2'>".$row['admin']."</font></div></td>
  38. </tr>\n
  39. </table></div></div>";
  40. }
  41. }
  42. } else {
  43. echo "<div id='srodek'><div id='tlo'><center>Musisz być zalogowany</center></div></div>";
  44. }
  45.  
  46. ?>
markonix
Cytat(LucKy_skiLL @ 15.07.2012, 21:24:16 ) *
"Widzę tam na początku autoryzacje - po jakiego grzyba zapytanie do bazy zamiast po prostu sprawdzić czy istnieje w sesji."

Niby tak, ale może być zalogowany i nie być adminem, i wtedy miał by dostęp, a tego nie chcę.


Komentarz przy warunku mówi zupełnie o czym innym.
Sprawdzanie "czy admin" faktycznie ma sens ale ubrałbym to po pierwsze w funkcje, po drugie wystarczy to sprawdzić za pomocą count.

  1. function isAdmin($username) {
  2.  
  3. $result = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM FROM `uzytkownik` WHERE login = '$username' AND `admin` = 1"));
  4. return (boolean)$result[0];
  5.  
  6. }


Kolejny błąd to zliczanie użytkowników - skoro oglądasz wynik skryptu masz admina, a skoro masz admina to jesteś też użytkownikiem, skoro jesteś użytkownikiem to jest chociaż jeden rekord. Więc błędne koło i zapytanie zupełnie zbyteczne. Jeżeli już przyjmiemy jakieś zmiany w skrypcie to pobrałbym raz wszystkich userów, zliczył mysql_num_rows. Nie stosuje się go do liczenia bo pobiera wszystkie rekordy, ale i tak będą pobierane przecież do listy userów.

Nadal kod wygląda beznadziejne pod względem HTML/CSS.

LucKy_skiLL
Zrobiłem tak

  1. $all_1 = mysql_query("SELECT * from uzytkownik ORDER BY id DESC, login DESC LIMIT 0, 50")or die(mysql_error()); while ($users_row = mysql_fetch_array($all_1))
  2. {
  3. $numer++
  4. echo <<< HTML
  5. <tr>
  6. <td>{$users_row['login']}</td>
  7. </tr>
  8. HTML;
  9. }



I ładnie wyświetla mi dwóch użytkowników których mam, moje pytanie brzmi, jak wyświetlić ich w mojej tabelce, robiąc tak, wyświetla mi tylko jedną osobe.


  1. <table width='98%' align='center' cellpadding='5' cellspacing='0'>
  2. <tr>
  3. <th><div align='center'>ID</div></th>
  4. <th><div align='center'>Login</div></th>
  5. <th><div align='center'>GG</div></th>
  6. <th><div align='center'>E-Mail</div></th>
  7. <th><div align='center'>Aktywny</div></th>
  8. <th><div align='center'>Admin</div></th>
  9. </tr>
  10. <tr>
  11. <td><div align='center'><font size='2'>".$users_row['id']."</font></div></td>
  12. <td><div align='center'><font size='2'>".$users_row['login']."</font></div></td>
  13. <td><div align='center'><font size='2'>".$users_row['gg']."</font></div></td>
  14. <td><div align='center'><font size='2'>".$users_row['email']."</font></div></td>
  15. <td><div align='center'><font size='2'>".$users_row['status']."</font></div></td>
  16. <td><div align='center'><font size='2'>".$users_row['admin']."</font></div></td>
  17. </tr>
  18. </table>
markonix
Zależy co chcesz osiągnąć - jeżeli ma powtarzać wiersz nagłówkowy to w pętli powinny się zawrzeć oba wiersze <tr>, jeżeli tylko konkretne dane to wiersz drugi.
I popraw ten HTML i zastosuj CSS bo nie można na to patrzeć!
LucKy_skiLL
Tak jak pisałem wcześniej, mam taki kod na tabele która ładnie wyświetla to co chce, ale wyświetla tylko jednego użytkownika, drugiego nie, tak więc pytam, jak i co zastosować, aby osiągnąć ten efekt.


  1. <table width='98%' align='center' cellpadding='5' cellspacing='0'>
  2. <tr>
  3. <th><div align='center'>ID</div></th>
  4. <th><div align='center'>Login</div></th>
  5. <th><div align='center'>GG</div></th>
  6. <th><div align='center'>E-Mail</div></th>
  7. <th><div align='center'>Aktywny</div></th>
  8. <th><div align='center'>Admin</div></th>
  9. </tr>
  10. <tr>
  11. <td><div align='center'><font size='2'>".$users_row['id']."</font></div></td>
  12. <td><div align='center'><font size='2'>".$users_row['login']."</font></div></td>
  13. <td><div align='center'><font size='2'>".$users_row['gg']."</font></div></td>
  14. <td><div align='center'><font size='2'>".$users_row['email']."</font></div></td>
  15. <td><div align='center'><font size='2'>".$users_row['status']."</font></div></td>
  16. <td><div align='center'><font size='2'>".$users_row['admin']."</font></div></td>
  17. </tr>
  18. </table>
markonix
Po pierwsze poprawić ten badziewiasty kod HTML co powtarzam po raz 3.

Co do samego wyświetlania użytkowników przecież napisałem co trzeba zrobić, potrafisz czytać?
LucKy_skiLL
Już sobie sam poradziłem.
markonix
Cytat(LucKy_skiLL @ 17.07.2012, 13:42:55 ) *
Już sobie sam poradziłem.

To jest taka niepisana tradycja, że umieszcza się zwykle rozwiązanie dla potomnych.
LucKy_skiLL
Tutaj znalazłem w sumie gotowca.


http://www.w3schools.com/php/php_mysql_select.asp
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.