PHP Wechsel auf 8.1 - Select Abfrage funktioniert nicht mehr
Hallo miteinander.
Ich habe vor wenigen Tagen von meinem Provider erfahren das meine aktuelle PHP-Version 7.4 Mitte nächsten Monat nicht mehr funktioniert.
Ich habe vor einigen Jahren eine Seite programmiert mit meinem laienhaften Wissen.
Nun stehe ich vor dem Problem das meine Select-Abfrage kein Ergebnis mehr bringt.
Habe mich auf unzähligen PHP-Tutorials durchgelesen und die Vorschläge durchgemacht.
Da aber keine Version zu erkennen ist, weiß ich nicht ob die Beispiele mit PHP 8.1 kompatibel sind.
Unter PHP7.4 funktioniert alles.
Schalte ich auf PHP 8.0 kommt gar nichx.
Habe den Fehler nun eingrenzen können, da bis auf dem PHP-Teil mit der Select-Abfrage noch alles angezeigt wird.
Was ist an meinem Code falsch ?
So verbinde ich mit der MySQL-DB.
Und das ist die Abfrage:
Gruss Andy
Ich habe vor wenigen Tagen von meinem Provider erfahren das meine aktuelle PHP-Version 7.4 Mitte nächsten Monat nicht mehr funktioniert.
Ich habe vor einigen Jahren eine Seite programmiert mit meinem laienhaften Wissen.
Nun stehe ich vor dem Problem das meine Select-Abfrage kein Ergebnis mehr bringt.
Habe mich auf unzähligen PHP-Tutorials durchgelesen und die Vorschläge durchgemacht.
Da aber keine Version zu erkennen ist, weiß ich nicht ob die Beispiele mit PHP 8.1 kompatibel sind.
Unter PHP7.4 funktioniert alles.
Schalte ich auf PHP 8.0 kommt gar nichx.
Habe den Fehler nun eingrenzen können, da bis auf dem PHP-Teil mit der Select-Abfrage noch alles angezeigt wird.
Was ist an meinem Code falsch ?
So verbinde ich mit der MySQL-DB.
$dbcon=mysqli_connect('localhost', 'xxxxxx', 'xxxxx') or die ("Keine Verbindung moeglich");
$dbopen=mysqli_select_db($dbcon,"xxxxx");
Und das ist die Abfrage:
<?
// News anzeigen
$found = 0;
echo "<table>";
$sql3 = mysqli_query($dbcon, "SELECT * FROM news order by datum DESC");
while($row3 = $sql3->fetch_array())
{
echo $row3;
echo "<tr><td>".date("d.m.y", strtotime($row3[datum]))."</td><td> <a href='".$row3[link]."'>".$row3[text]."</a></td></tr>";
echo "<tr><td colspan=2><hr></td></tr>";
$found = 1;
}
if ($found == 0)
{
echo "<tr><td><font color='#0000FF'></font></td><td>Im Moment sind keine News vorhanden</td></tr>";
}
echo "</table>";
?>
Gruss Andy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4177229995
Url: https://administrator.de/contentid/4177229995
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
13 Kommentare
Neuester Kommentar
Moin,
Quick und Dirty: Hast du einmal das Error Reporting von PHP aktiviert:
Die Zeilen gleich zu Beginn der PHP Datei hinzufügen. Je nach Anbieter musst du ggf. die Einstellungen über dessen Weboberfläche vornehmen. Wird dann unter PHP 8.1 ein Fehlermeldung ausgegeben?
Gruß,
Dani
Quick und Dirty: Hast du einmal das Error Reporting von PHP aktiviert:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Gruß,
Dani
Moin,
Gruß,
Dani
die ersten 2 ini_set Abfragen geben keinen Fehler aus.
du hast die drei Zeilen aber schon nach <?php eingefügt? Die 3. Abfrage error-reporting gibt den Fehler 3376 aus.
Hm. Poste mal ein Screenshot. Vermutlich unterstützt der Webhosters diesen Weg nicht. Wie heißt der Webhoster, so dass wir dort auf der Webseite/FAQ einmal gemeinsam nach den Möglichkeiten schauen können.Gruß,
Dani
Was ist an meinem Code falsch?
Ein paar Dinge. Keine Ahnung ob das Problem schon gelöst ist, aber hier noch ein paar Fehler in deinem Script:
while ($row3 = $sql3->fetch_array()) {
echo $row3;
..
Das Ergebnis von $row wird ein array sein (fetch_array). Da ist "echo" keine gute Wahl um sich den gesamten Inhalt anzeigen zu lassen. Versuche es eher mit:
print_r($row3)
Dann willst du die Inhalte von $row3 wie z.B. $row3[datum] ausgeben:
echo "<tr><td>" . date("d.m.y", strtotime($row3[datum])) . "</td><td> <a href='" . $row3[link] . "'>" . $row3[text] . "</a></td></tr>";
Du musst aber die Feldwerte wie z.B. "datum" oder "link" quoten (entweder mit " oder '). Also:
echo "<tr><td>" . date("d.m.y", strtotime($row3["datum"])) . "</td><td> <a href='" . $row3["link"] . "'>" . $row3["text"] . "</a></td></tr>";
Dann mag PHP 8.1 die Felder auch wieder - es sei denn, sie sind leer. Wenn sie leer sind erscheint auch wieder ein Fehler. Du musst die Werte also vorher prüfen (z.B. per isset()):
echo isset($row3["link"]) ? $row3["link"] : null;
Die Kurzform dieser Überprüfung lautet:
echo $row3["link"] ?? null;
Das spart viel Zeit
Bei deinem Beispiel sieht das dann so aus:
echo "<tr><td>" . date("d.m.y", strtotime(($row3["datum"] ?? null))) . "</td><td> <a href='" . ($row3["link"]?? null) . "'>" . ($row3["text"] ?? null) . "</a></td></tr>";
Statt "null" kannst du natürlich auch irgend einen anderen Wert angeben, der erscheinen soll, wenn z.B. die Variable $row["text"] keinen Wert hat.
echo $row3["link"] ?? "hier ist nichts drin";
Das alles müsste dir aber das PHP-Log unter "/var/log/php..." anzeigen. Wenn du kein Log hast, dann wie Dani oben schon beschrieben hat, es mit "ini_set('display_errors', 1);" einschalten oder in der php.ini unter /etc/php.. das Error-Log aktivieren. Ohne das Logfile wirst du nicht weiterkommen.
Gruß
@firefly