CR:
<?php
echo '<div class=\'kategorie\'>Wiadomości :</div>';
require_once("../../polaczenie/connect.php");
$idek = $_SESSION['ajdi'];
$wiadomosci = $polaczenie->query("SELECT * FROM wiadomosci WHERE odkogo = '$idek' OR dokogo = '$idek'"); //sql injection? :v
$ilosc = $wiadomosci->RowCount();
if ($ilosc > 0) { //bezsensowny warunek, wystarczy wpisać $ilosc
while ($r = $wiadomosci->fetch(PDO::FETCH_ASSOC)) { //może yeldem a potem foreach?
//zmien nazwe zmiennej "r", na taka, o ktorej wiadomo, co przechowuje
$tresc = $r['tresc']; //nie musisz przypisywac zmiennych z tablicy, po prostu użyj ich jak zmiennych
$data = $r['data']; //j.w.
$date = date_create($data);
$dataczas = new DateTime();
$czas_teraz = date_format($dataczas, 'Y-m-d');
$czas_wyslania = date_format($date, 'Y-m-d');
if (strlen($tresc) > 25) {
$tresci = substr($tresc, 0, 25);
$tresc = $tresci . "...";
}
$odkogo1 = $r['odkogo']; //j.w.
$dokogo2 = $r['dokogo']; //j.w.
if ($odkogo1 == $idek) {
$odkogo1 = $dokogo2;
$dokogo2 = $odkogo1;
} //domyslam sie, co tu sie odwalilo, ale nie pochwalam
$wiadomosciod = $polaczenie->Prepare("SELECT * FROM wiadomosci WHERE odkogo = :odkogo AND dokogo = :dokogo ORDER BY id DESC"); //prepare z malej
$wiadomosciod->bindValue(':odkogo', $odkogo1);
$wiadomosciod->bindValue(':dokogo', $dokogo2);
$wiadomosciod->Execute();
$ilosc1 = $wiadomosciod->RowCount();
if ($ilosc1 < 1) {
$dane = $polaczenie->Prepare("SELECT * FROM uzytkownicy WHERE ajdi = :odkogo");
$dane->bindValue(':odkogo', $odkogo1);
$dane->Execute();
while ($petly = $dane->fetch(PDO::FETCH_ASSOC)) {
$imie = $petly['imie']; //j.w.
$nazwisko = $petly['nazwisko']; //j.w.
$id = $petly['ajdi']; //j.w.
echo '<div class=\'wiadomosci\'>';
echo '<a href=\'?wyslij_wiadomosci&do=' . $id . '\'>' . $imie . ' ' . $nazwisko . '</a>';
if ($czas_teraz == $czas_wyslania) {
echo '<div class=\'data\'>' . date_format($date, 'H:i') . '</div>';
} else {
echo '<div class=\'data\'>' . date_format($date, 'Y-m-d H:i') . '</div>';
}
echo '<div class=\'tresc\'>' . $tresc . '</div>';
echo '</div>';
}
}
}
}//schody do nieba :V, za duzo nested blocks
Niestety calość masz do przepisania.
Czego brakuje, by rozwiązać twój problem: tabeli sql, która będzie wskazywać kto jest odbiorcą, a kto nadawcą
Jedna tabela która przechowuje wszystkie wiadomości, druga do wskazywania odbiorcy i nadawcy... by nie przechowywać tej samej wiadomości 2x.
O błedach do poprawy:
Dużo kodu się powtarza. Potwórz funkcje, zachowując zasady: 1 funkcja jedno dokladne zadanie. maksymalnie 30 lini kodu, 3 nested blocki (zagnieżdżenia warunków/pętli/etc), nie przesadzaj z iloscia "return".
Nazwy zmiennych do poprawy, niektóre nie wiadomo w ogóle, co przetrzymują.
Tworzysz niepotrzebne zmienne, kopiując tam dane z tablicy, kiedy możesz po prostu zadziałać na tej tablicy.
Odizoluj za pomocą funkcji to, część prezentacji (wszystko, co wypluwasz na ekran), od części logiki (np. zapytania SQL)