Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] System komentarzy - wyróżnienie admina
Forum PHP.pl > Forum > Przedszkole
aroox
Witam.
Na wstępie chciałbym podkreślić, że dopiero raczkuję w PHP, ale staram się pisać coś swojego, ambitnego, dlatego nie bijcie mnie za jakość kodu jaki ujrzycie niżej : /
A więc nie owijając w bawełnę - stworzyłem system komentarzy umożliwiający dodawanie wpisów dla zalogowanych na stronie użytkowników. No i użytkownikiem jest admin i test. Admin ma prawa administratora, a test nie ma. Chciałbym, aby w komentarzach nick administratora był wyróżniony (w sensie jakieś podkreślenie, albo napis obok [ADMIN]), ale prawdę mówiąc to utkwiłem w martwym punkcie i nie mam pojęcia już jak się za to zabrać, ponieważ próbowałem coś kombinować, ale bezskutecznie. Podejrzewam że będzie to problem z samym MySQL, ale przezorny zawsze ubezpieczony, więc dodałem do tego wątku także PHP.

W phpmyadmin mam bazę danych nazwaną "cms", a w niej tabele "uzytkownicy" i "komentarze".

Struktura tabeli uzytkownicy:
id | user | password | email | admin

No i odpowiednio:
1 | admin | [haslo] | email@mail.local | 1
2 | test | [haslo] | email@mail.local | 0


Struktura tabeli komentarze:
id | data | user | komentarz

No i tutaj wiadomo co jest czym, więc nie będę przedstawiał. Jeśli dodaję komentarz z konta admin to wtedy w 'user' mam 'admin', natomiast jeśli z konta test to mam 'test'.

No i mam taki kod PHP do tego (wklejam cały plik, bo nigdy nie wiadomo co może się przydać):

  1. <?php
  2. require_once "../polacz.php";
  3. $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
  4. $polaczenie->query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
  5. if (isset($_SESSION['zalogowany']) && ($_SESSION['zalogowany']==true))
  6. {
  7. echo '<form action="test2.php" method="post">
  8. Dodajesz komentarz jako: <b>'.$_SESSION['user'].'</b><br/>
  9. <textarea name="tresc" cols="50" rows="10"></textarea><br/>
  10. <input type="submit" value="Wyślij komentarz"></form>
  11. </form>';
  12. }
  13. else
  14. {
  15. echo 'Musisz się zalogować, aby dodawać komentarze<br/><br/><br/>';
  16. }
  17. echo 'Aktualne komentarze:';
  18. $komentarze = @$polaczenie->query("SELECT * FROM komentarze ORDER BY id ASC");
  19. while($pokaz = mysqli_fetch_array($komentarze)) {
  20.  
  21. echo 'Data: '.$data = $pokaz['data'].'<br/>';
  22. echo 'Nick: '.$pokaz['user'].'<br/>';
  23. echo 'Treść komentarza: '.$pokaz['komentarz'].'<br/><br/><br/>';
  24. }
  25.  
  26. $polaczenie->close();
  27. ?>


I jeszcze plik test2.php który przetwarza te dane:

  1. <?php
  2. require_once "../polacz.php";
  3. $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
  4. $polaczenie->query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
  5. $nick = $_SESSION['user'];
  6. $tresc = $_POST['tresc'];
  7. if (empty($tresc)) {
  8. echo 'Treść komentarza nie może być pusta!';
  9. } else {
  10. $dodaj = "INSERT INTO cms.komentarze (id,data,user,komentarz) VALUES ('', now(), '$nick', '$tresc')";
  11. if($polaczenie->query($dodaj) == TRUE) {
  12. echo 'Dodano komentarz';
  13. } else {
  14. echo 'Nie dodano komentarza';
  15. }
  16. }
  17.  
  18. $polaczenie->close();
  19. ?>


No i jak widać - informację o aktualnie zalogowanym użytkowniku przetrzymuję w sesji i podczas wpisywania komentarza zamiast wklepywać nazwę użytkownika, jest ona z tej sesji odczytywana i wpisywana do bazy danych.

No i na koniec powtórzę jeszcze raz - jak mógłbym wyróżnić w takich wpisach później podczas czytania komentarzy nick użytkownika, który ma w bazie danych wartość 'admin' ustawioną na '1' (czyli jest po prostu administratorem)?

Z góry dziękuję za wszelką pomoc smile.gif
Damonsson
Cytat(aroox @ 7.10.2015, 12:46:39 ) *
No i tutaj wiadomo co jest czym, więc nie będę przedstawiał.

Właśnie, że nie wiadomo, a to ważne. Bo albu w user masz klucz obcy i musisz zrobić JOIN z tabelą użytkownicy, albo nie masz klucza obcego to musisz go utworzyć i też zrobić JOIN z tabelą użytkownicy.
aroox
Cytat(Damonsson @ 7.10.2015, 12:52:35 ) *
Właśnie, że nie wiadomo, a to ważne. Bo albu w user masz klucz obcy i musisz zrobić JOIN z tabelą użytkownicy, albo nie masz klucza obcego to musisz go utworzyć i też zrobić JOIN z tabelą użytkownicy.


No to więc tak:

Struktura tabeli komentarze:
id | data | user | komentarz

Jak pisałem w pierwszym poście i brak tu kluczy obcych. ID jest autoinkrementowany (bo określenie id aktualnego komentarza, a nie usera), data jest pobierana z wartości 'now()' z test2.php i wpisywana do bazy, user jest wpisywany na zasadzie sesji, co można zaobserwować w linijkach:

$nick = $_SESSION['user'];

I później zmienna ta z użytkownikiem zapisanym w sesji jest dodawana do bazy danych:

$dodaj = "INSERT INTO cms.komentarze (id,data,user,komentarz) VALUES ('', now(), '$nick', '$tresc')";

A treść komentarza pobierana jest z $_POST
Więc jak widać - kluczów obcych tu nie mam. Więc mam dodać klucz obcy na wartość 'user' czy może utworzyć osobną kolumnę do tego? Bo próbowałem pobrać już zmienną 'admin' z tabeli 'uzytkownicy' i wpisać ją w nowej kolumnie w tabeli 'komentarze', ale z miernym skutkiem, bo dodałem później do tego wszystkiego JOIN i niby działało poprawnie, ale chyba coś źle napisałem, bo jeśli admin wstawił komentarz to owszem - jego nick był wyróżniony, ale automatycznie były wyróżnione także pozostałe, nawet te, które praw administracyjnych nie posiadają. I dlatego piszę, że utkwiłem w martwym punkcie.
Damonsson
A więc tak:

test2.php#11
  1. $dodaj = "INSERT INTO cms.komentarze (id,data,user,komentarz) VALUES ('', now(), '$nick', '$tresc')";

zamiast $nick musi być ID USERA, jak nie masz w sesji to musisz sobie wyciągnąć z bazy, ale powinieneś ID też trzymać w sesji

#19
  1. $komentarze = @$polaczenie->query("SELECT komentarze.id, komentarze.data, komentarze.komentarz, uzytkownicy.user, uzytkownicy.admin FROM komentarze JOIN uzytkownicy ON komentarze.user = uzytkownicy.id ORDER BY komentarze.id ASC");

przy okazji, nie powinieneś nigdy używać @, chyba, że masz ku temu jakieś powody, typu znak od samego Boga.


i później wyświetlanie:
#23
  1. echo 'Nick: '.$pokaz['user'] . ' rola: ' . $pokaz['admin']'<br/>';
aroox
Super, działa świetnie!
Dzięki wielkie biggrin.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.