Hallo @portseven,
hab ein Chat System Programmiert. Alles läuft perfekt außer das er mir nicht die neusten Chat's zuerst sortiert.
Ich gehe mal durch deinen Code und stelle ein paar Verständnisfragen:
$user = $pdo->prepare(" SELECT * FROM user;"); if(!$user->execute()) { print_r($user->errorInfo()); }
- Hat das Newline im SQL-Statement einen Grund?
- Warum selektierst du blind alle Felder per Wildcard und nicht ausschließlich die gewünschten?
- Was passiert im Fehlerfall, wird da nur die
errorInfo
ausgegeben und das Programm läuft einfach weiter oder wird es ordnungsgemäß beendet?
<?php while($row = $user->fetch(PDO::FETCH_ASSOC)) { ?> <form class="left" action="" method="GET">
Du öffnest für jeden Eintrag in der Datenbank ein neues Formular, aber ich sehe nirgends typische Formularelemente oder das beendende </form>
-Tag.
if($stmt = $pdo->prepare(" SELECT msg.id, msg.user_id, msg.sender_id, msg.message, msg.date FROM msg WHERE msg.user_id = :user_id AND sender_id = :sender_id || msg.user_id = :sender_id AND msg.sender_id = :user_id ORDER BY date DESC LIMIT 1;")) { } $stmt->BindParam(':user_id', $_SESSION['id']); $stmt->BindParam(':sender_id', $row['id']); if(!$stmt->execute()) { print_r($stmt->errorInfo()); }
- Du bereitest die gleiche Query in jedem Schleifendurchlauf vor. Der Sinn von Prepared Statements ist es gerade, einmal prepare aufzurufen und mehrmals bind.
- kannst du diese Query hier mit der oben in eine Query verheiraten.
- Der Rückgabewert von prepare wird ignoriert – wie sieht es mit der Fehlerbehandlung aus?
- Von welchem SQL-Spaltentyp ist denn dein msg.date-Feld?
||
vs. OR.
<?php while($row2 = $stmt->fetch(PDO::FETCH_ASSOC)) { ?> <section class="all-user-list-msg"> <a href="messages.php?u=<?php echo $row['id']; ?>"> <p class="img"> <img src="<?php echo $row['image']; ?>"> </p>
p class="img"
mit lediglich einemimg
(ohne alt-Attribut!), das klingt prinzipiell nach einerfigure
– und das img trotzdem mit einem alternativen Text.- Die Kontextwechsel nach HTML und URI werden nicht behandelt.
<p class="date"> • <?php $time = convertTime($row2['date']); echo $time; ?></p>
- Die vielen Leerzeichen tun zwar nicht weh, haben aber keine Funktion. Aber was macht das Steuerzeichen 149 da?
- Die Ausgabe der Zeit kann ohne Zwischenvariable auskommen.
Viele Grüße
Robert