Robert B.: Order by Date funktioniert nicht ganz

Beitrag lesen

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());
			}
  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?
  5. || 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 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.
					<p class="date">  	&#149; <?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