Fatal error: Uncaught Error: Object of class mysqli_result could not be converted to string?
Hallo zusammen
Ich bin grade an einer Webseite, die zwar immer das gleiche Layout haben soll, einfach mit monatlich angepassten Inhalten. Um dies zu erreichen, habe ich bei Texten, Bildern und Animation einfach eine Php-Variable in "src" eingefügt (Siehe unten). Wenn ich das aber mache, kommt der Fehler "Fatal error: Uncaught Error: Object of class mysqli_result could not be converted to string". Was mach ich falsch?
Hier noch der Quellcode:
Vielen Dank schon im Voraus!
2 Antworten
https://www.peterkropff.de/site/php/mysqli_methoden_result.htm
Hier ne abhandlung zur benutzung von mysqli.
Du kriegst an der stelle noch keine daten. Sondern ein Objekt mit welchem man die daten dann holen kann.
Das Ergebniss haste in $row. Schau halt was die Fetchassoc zurückliefert und wie du das gebrauchen kannst.
eventuell musste noch $row->column(0) oder soetwas machen um an den wert zu kommen.
https://www.w3schools.com/php/func_mysqli_fetch_assoc.asp
Hier ist nochmal ein beispiel.
Für Php. Solltest du dir die seite also w3schools bookmarken. Die dürften alles wissenswerte drüber haben.
Ich gehe zunächst einfach einmal auf alles ein, was mir so auffällt.
HTML
1) Als Sprache hast du für dein Dokument en, also Englisch angegeben. Ich sehe aber nur deutsche Texte?
2) In einem ul-Element dürfen nur li-Elemente als direkte Kinder aufgeführt werden. Dein form-Tag gehört da nicht hin. Entweder du entfernst/änderst den ul-Tag oder du verschiebst das Formular woandershin (z.B. in ein li-Element innerhalb des ul).
3) Bei deinen button-Elementen im Formular fehlt jeweils das c für das class-Attribut. Da sie übrigens standardmäßig schon submit-Buttons sind, kannst du das type-Attribut jeweils weglassen.
4) Einheitsangaben sind in den Attributen width und height nicht erlaubt. Setze die Werte stattdessen mit CSS.
5) Das align-Attribut (auf dem video-Tag) gibt es nicht mehr. Setze die Position des Videos stattdessen via CSS (bspw. mit Hilfe des text-align-Properties).
6) Auf dem iframe-Tag sind ein paar Attribute, die längst als obsolete gekennzeichnet wurden (allowtransparency, frameborder, scrolling). Zumindest die beiden letzten kannst du mit CSS leicht ersetzen (siehe border und overflow).
PHP
1) Wenn $sh_id eh immer einen festen Wert besitzt, brauchst du den SQL-Query nicht zusammenzubauen. Zumal es performanter wäre, beide Werte in einem Schwung aus der Datenbank zu holen.
"SELECT `title`, `text` FROM `texts` WHERE `id`='1'"
Wenn du nun $sh_id dahingehend ändern solltest, sodass dessen Wert von außen (bspw. via GET/POST) hereingetragen wird, solltest du ein Prepared Statement verwenden.
2) Schau zu den Fehlern jeweils in die Dokumentation der Funktionen.
Fatal error: Uncaught Error: Object of class mysqli_result could not be converted to string?
Die Rückgabe ist bei Erfolg ein mysqli_result-Objekt. Aus diesem müssen die Werte erst ausgelesen werden. Verwende die fetch-Funktion.
Fatal error: Uncaught Error: Call to a member function fetch_assoc() on bool
Wenn die Anfrage an die Datenbank aus irgendeinem Grund scheitert, gibt dir mysqli_query einen boolschen Typ (false) zurück. Diese besitzt allerdings keine Methoden, wie fetch.
Du solltest demzufolge erst prüfen, ob die Datenbankabfrage erfolgreich war oder nicht.
$connection = new mysqli(/* ... */);
$statement = $connection->prepare("SELECT title, text FROM texts WHERE id=?");
$statement->bind_param("s", $sh_id);
if ($statement->execute()) {
// fetch ...
}
else {
// error ...
}
Warum deine Abfrage gescheitert ist, kann ich dir allerdings (noch nicht) sagen. Prüfe den String auf seine Syntax. Wenn du Zugriff auf die Datenbank hast (z.B. via phpMyAdmin), kannst du deine konkreten Queries auch einmal darüber an die Datenbank verschicken. Möglicherweise findest du damit Fehler schneller.
Achso, und was kommt dann in "while" hinein? Und wie krieg ich das Ergebnis in die Variable $sh_title rein?