PHP mysqli Schleife gibt kein % Zeichen aus

Pfandfinder

Lieutenant
Registriert
Nov. 2020
Beiträge
619
hallo,

ich setze diese Art von PHP-loop aus einer Schleife ein. Jetzt ist mir durch zufall aufgefallen, dass quasi DB-Einträge wo eine Spalte ein %-Zeichen enthält übersprungen werden... hier mal vereinfacht ein Script:

PHP:
<?php
include('connect_mysqli.php');
$user = 1;
$query = 'SELECT * FROM test WHERE user = '.$user.' ORDER BY id DESC';
if($result=$mysqli->query($query)) {
    while($row=$result->fetch_assoc()) {
        printf('<p>'.$row['content'].'</p>');
    }
}
$mysqli->close();

Die Ausgabe sieht so aus :

Code:
4. ausgabe

3. ausgabe

bla bla

Datenbank ist im Anhang.

selbst mit htmlspecialchars sehe ich die nicht. was ist das denn ??
 

Anhänge

  • 20201223-181754.png
    20201223-181754.png
    11,4 KB · Aufrufe: 267
Wieso printf? Da sind keine Parameter, das ist also nicht notwendig, und % hat eine besondere Bedeutung bei printf um die Parameter reinzubringen. Das könnte die Ursache sein für das Problem.

Die Ausgabe passt nicht auf das Skript, da müsste auch HTML stehen. So kann ich nicht sehen ob die Zeile komplett übersprungen wurde, leer ausgegeben wurde oder ob da evtl. was im HTML Quellcode steht das nicht direkt sichtbar ist. Um das zu debuggen ist die echte Ausgabge, der HTML Quellcode wichtig.

Und ich hoffe der User ist auch in der vollen Version des Skripts hardcoded, ansonsten ist das eine SQL Injection und die ganze Anwendung angreifbar.
 
  • Gefällt mir
Reaktionen: BeBur und Pfandfinder
Wenn du SQL-Abfragen in PHP sowieso gerade noch lernst dann guck dir gleich die moderne Variante mit PDO und Prepared Statements an.

SQL-Befehle setzt man nicht mit Variablen zusammen, da gehören keine Nutzerdaten rein, die sind als Teil des Programmcodes zu sehen!

Ansonsten hat Dalek es ja schon erklärt, printf gibt Strings eben nicht so aus wie sie sind. Das ist eine Formatierungsfunktion, die als ersten Parameter das Format annimmt, welches ebenfalls keine Variable zu sein hat!
Zudem ist print grundsätzlich ungeeignet um Text in einem HTML-Dokument auszugeben da Sonderzeichen nicht escaped sondern als HTML-Code interpretiert werden.

Genutzt werden müsste hier:
PHP:
echo "<p>" . htmlspecialchars($row['content']) . "</p>";
 
  • Gefällt mir
Reaktionen: BeBur und kim88
Zurück
Oben