PHP Warning: Undefined array key "status"?
Hey,
Ich habe ein Array in PHP programmiert, welches per MySQL alle Sachen selektiert.
Nun werden aber die Arrays nicht gefunden.
Code:
$stmt = $link->prepare('SELECT * FROM tickets ORDER BY created DESC');
$stmt->execute();
$resultSet = $stmt->get_result();
// pull all results as an associative array
$tickets = $resultSet->fetch_all();
<?php foreach ($tickets as $ticket): ?>
<a href="view.php?id=<?= $ticket['id'] ?>" class="ticket">
<span class="con">
<?php if ($ticket['status'] == 'open'): ?>
<i class="far fa-clock fa-2x"></i>
<?php elseif ($ticket['status'] == 'resolved'): ?>
<i class="fas fa-check fa-2x"></i>
<?php elseif ($ticket['status'] == 'closed'): ?>
<i class="fas fa-times fa-2x"></i>
<?php endif; ?>
</span>
<span class="con">
<span class="title"><?= htmlspecialchars($ticket['title'], ENT_QUOTES) ?></span>
<span class="msg"><?= htmlspecialchars($ticket['msg'], ENT_QUOTES) ?></span>
</span>
<span class="con created"><? date('F dS, G:ia', strtotime($ticket['created'])) ?></span>
</a>
Fehler:
C:\xampp\htdocs\ticket.php on line 271
" class="ticket">
Warning: Undefined array key "status" in C:\xampp\htdocs\ticket.php on line 273
Warning: Undefined array key "status" in C:\xampp\htdocs\ticket.php on line 275
Warning: Undefined array key "status" in C:\xampp\htdocs\ticket.php on line 277
Warning: Undefined array key "title" in C:\xampp\htdocs\ticket.php on line 282
Warning: Undefined array key "msg" in C:\xampp\htdocs\ticket.php on line 283
Kann mir jemand sagen, ob ich etwas übersehen habe?
2 Antworten
Die fetch_all-Methode liefert ein Array mit numerischen Indizes. Um ein assoziatives Array zu erhalten, solltest du den entsprechenden Modus noch mit angeben.
$tickets = $resultSet->fetch_all(MYSQLI_ASSOC);
Lass dir den Array mal ausgeben und schau, ob die keys überhaupt drin sind. Dann Vergiss nicht einzubauen, dass du sowas prüfst, bevor du die abfragst, da sowas ein Sicherheitsproblem werden kann, wenn andere einen Einblick erhalten durch den Fehler
var_dump("array"); glaube ich war das. Es geht erstmal nur um das Array anschauen, nicht mehr
Auf der HTML Seite. Nur dass du dafür nicht HTML brauchst. Du sollst es nur ausgeben lassen
Dann ist der Array wohl leer. Das solltest du immer mit einer if Abfrage prüfen, bevor du die Elemente darin abfragst. Dann musst du jetzt noch einen Schritt zurück. Schauen, warum der leer ist
Okay, mir faellt grad auf, dass ich ein Fehler gemacht habe. Jetzt wird doch etwas ausgegeben: string(7) "tickets"
Sieht aber trotzdem nicht so richtig aus, oder?
string(7) tickets ist immerhin die richtige Ausgabe. Wenn da aber nicht mehr steht, ist der leer. string ist der Datentyp und tickets hat 7 Zeichen
verstehe. Kannst du mir helfen herauszufinden, warum er leer ist? Ich check es irgendwie nicht
Im Thema PHP und MySQL(i) bin ich überhaupt nicht drin. Ist denn die Verbindung zu deiner Datenbank aktuell? Also funktioniert die überhaupt? (Ich vermute mal ja)
Ja, funktioniert alles. Die Verbindung laeuft ohne Probleme.
Dann einen Schritt weitergehen, gibt es die Tabellen und Splalten aus der Query? Wenn ja, ist der PHP Code davon korrekt? Oder fehlt vielleicht noch etwas? Die SQL Query sieht soweit richtig aus, ob die Tabellen/Spalten richtig sind weiß ich aber nicht
Dann den PHP Code Prüfen, ob die Anfrage überhaupt ausgeführt wird, also ob vielleicht Code fehlt oder so
Um ein Array (ich nenne es folgend $arr) auszugeben, nutze:
print_r($arr);
oder
var_dump($arr);
Auch wenn das Array leer ist, erhältst du eine Ausgabe. Andernfalls gibt es im Skript einen Fehler, der es vorzeitig abbrechen lässt.
Mit
var_dump("tickets");
lässt du dir nur die Information zum String tickets ausgeben. Einen Bezug zur Variable $tickets gibt es nicht.
ich weiss nicht ob ich es richtig gemacht hab.
Hab ganz einfach das hier reingemacht:
<? echo '<p>' $tickets '</p>' ?>
Und es wird das ausgegeben:
' $tickets '' ?>