Order by Date funktioniert nicht ganz
bearbeitet vonHallo @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:
> ~~~PHP
> $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
> <?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.
> ~~~php
> 	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());
> 			}
> ~~~
1. Du bereitest die gleiche Query *in jedem Schleifendurchlauf* vor. Der Sinn von Prepared Statements ist es gerade, *einmal prepare* aufzurufen und *mehrmals bind*.
2. kannst du diese Query hier mit der oben in *eine Query* verheiraten.
3. Der Rückgabewert von prepare wird ignoriert – wie sieht es mit der Fehlerbehandlung aus?
4. Von welchem SQL-Spaltentyp ist denn dein msg.date-Feld?
> ~~~php
> 				<?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 einem `img` (ohne alt-Attribut!), das klingt prinzipiell nach einer `figure` – und das img trotzdem mit einem alternativen Text.
- Die Kontextwechsel nach HTML und URI werden nicht behandelt.
> ~~~php
> 					<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