Prywatne wiadomości (prośba o poradę)

0

Witam, jestem nowym użytkownikiem forum jak i świeżakiem w kodowaniu php;)

Otóż mam taki problem, "tworzę" w php na mojej stronie system prywatnych wiadomości (nic wielkiego ani skomplikowanego), w bazie danych mam tabele o nazwie "użytkownicy" i kolejną "wiadomosci", kod już w zasadzie działa, zalogowany użytkownik wpisuje nazwę użytkownika do którego chce wysłać wiadomość (docelowo nie będzie musiał wpisaywać nazwy użytkownika) oraz treść i w bazie danych w tabeli pojawia się od kogo jest wiadomość, treść oraz do kogo. Na stronie gdy "wywołuje" echem treść czy tam id wiadomości pokazuje mi wszystkie wiadomości od wszystkich użytkowników. Mógł by mi ktoś pomóc bądź nakierować w jaki sposób mogę zrobić tak by mi z tabeli "wiadomośći" wyskakiwały tylko wiadomości to danego odbiorcy ?

2

A jak wygląda twoje zapytanie do bazy danych? Trzeba tam dodać klauzule "WHERE"

0

$do = $_POST['do'];
$od = $_POST['od'];
$wiadomosc = $_POST['wiadomosc'];
$ins_query="insert into wiadomosci (do,wiadomosc,od) values ('$do','$wiadomosc','$od')";
mysqli_query($con,$ins_query) or die(mysql_error());
$status = 'Wiadomość została wysłana!';
echo "

$status
";</p>

Czyli klauzula "WHERE" może wyciągać informacje z baz danych tylko do danego użytkownika ? Czy jak to działa ?

2

Tak, umożliwia coś takiego. Przeczytaj sobie tutaj:
https://www.w3schools.com/sql/sql_where.asp
Co do twojego zapytania to wysłałeś mi inserta, a mi chodziło o select'a na podstawie którego pobierasz wiadomości z bazy
insert - zapisuje do bazy danych
select - odczytuje z bazy danych

0

Aaaa ok przepraszam źle zrozumiałem

<?php $id=$_SESSION['id']; $sql="SELECT * FROM wiadomosci"; $result = mysqli_query($con,$sql); while($row = mysqli_fetch_assoc($result)) { ?> <?php echo $row['od'] ." Napisał: " .$row["wiadomosc"] ." Do: " .$row['do']; ?>
<?php } ?>

jest zwykłe zapytanie bo nie wiedziałem jak się za to zabrać.

Po sprawdzeniu tego co mi wysłałeś próbuje kombinacji:
$sql="SELECT * FROM messages WHERE to_user=$_SESSION['id']";
$sql="SELECT * FROM messages WHERE $row['to_user'] = $_SESSION['id']";

ale w obu przypadkach wychodzi mi błąd :
Parse error: syntax error, unexpected string content "", expecting "-" or identifier or variable or number in C:\xampp\htdocs\noName\xxxxx.php on line 145

0

@Ephyron "Troche nie rozumiem. Na górze masz SELECT (gwiazdka) FROM wiadomosci, natomiast na dole masz "messages". Czemu raz po polsku raz po angielsku? "

  • błąd w przepisaniu (nie patrz na to :) )
1

Rozumiem. Dawno nie pisałem w php więc nie pamiętam dokładnie składni, ale wydaje mi się że twoje $_SESSION nie jest rozpoznawane jako zmienna w tym przypadku. Może spróbuj coś w tym stylu:

$id=$_SESSION['id'];
$sql = "SELECT * FROM wiadomosci WHERE do='$id'";
0

Z tym kodem nie wyświetla żadnego błędu ani żadnej wiadomości

0

To myślę że składniowo przeszło pomyślnie. Teraz tylko sprawdź czy aby na pewno są dane dla tego usera, oraz czy 'do' przechowuje ID usera do którego wysyła, a nie jakiś np. login. No i sprawdź też czy aby na pewno zmienna "id" zainicjowała się poprawnie, czyli czy zaciągnęła numerek z sesji 'id'.

0

Przede wszystkim jak zaczynasz to zmien nazwy na angielskie. nie uzywaj zadnych polskich nazw pol w tabeli, zmiennych itd.
Jak juz użytkownik sie zaloguje trzymasz jego ID z tabeli uzytkownicy. I wlasnie jak bierzesz wiadomosci to WHERE to_user_id = (id zalogowanego uzytkownika)
to ci pokaze wtedy wiadomosci tylko do uzytkownika do ktorego je wyslano

0

@Ephyron świetnie mnie nakierowałeś dziękuje bardzo! Teraz musze rozgryźć reszte :)
@masterc Masz w zupełności racje, aczkolwiek jak robię coś w formie testu nie zwracam uwagi zbytnio na to, dopiero jak wrzucam działający kod na stronę robię to z poprawnymi nazwami, mimo że wychodzi mi wtedy czasowo x2 i może czas to zmienić :) dziękuję za sugestie

0

@Ephyron: Super już prawie działa ! Wielkie dzięki za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1