• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage Bei PHP Mysql abfrage wird alles angezeig.

nils320

Mitglied
Hallo,
ich programmiere derzeit ein Ticket-System.
Hier der Code:

Code:
if(isset($_GET['view']) != ""){
    $ticketid = isset($_GET['view']);
    $query_view = "SELECT * FROM tickets_antworten WHERE ID_ticket=$ticketid";
    $result_view = mysqli_query($verbindung, $query_view);

if(mysqli_num_rows($result_view) > 0) {
    $num = 0;

    while ($row_view = mysqli_fetch_array($result_view)) {
        if(mysqli_num_rows($result_view) == 0){
            break;
        }
        $userid = $row_view['userid'];
        $antwort = $row_view['antwort'];
        $rolle = $row_view['rolle'];
        $text = $row_view['antwort'];
        $num++;
        if($text == " "){
            break;
        }
        ?>

        <div class="card">
            <div class="card-header">
                <?php
                $query_rolle = "SELECT * FROM USER WHERE ID=$userid";
                $result_rolle = mysqli_query($verbindung, $query_rolle);
                $row_rolle = mysqli_fetch_array($result_rolle);
                $vorname_arbeiter = $row_rolle['Vorname'];
                $nachname_arbeiter = $row_rolle['Nachname'];

                if($rolle == "1")
                {
                    echo $vorname_arbeiter;?> <?php echo $nachname_arbeiter;
                }else{

                    echo $vorname_arbeiter;?> <?php echo $nachname_arbeiter;}?>
            </div>
            <div class="card-body">
               <?php
                    echo $text;
               ?>
            </div>
        </div>

        <br>

        <?php
    }
}

    ?>

Nur leider werden, egal welche Ticket-ID ich an die URL hänge, immer alle antworten ausgegeben.
Voran liegt das?

Viele Grüße
Nils
 
Werbung:
$ticketid = isset($_GET['view']);
$query_view = "SELECT * FROM tickets_antworten WHERE ID_ticket=$ticketid";

Da fällt dir nichts auf?

Wieso rennst du in die Schleife, wenn das zutrifft:
if(mysqli_num_rows($result_view) == 0)

Dein Select in der Schleife ist unnötig, die Daten, die du haben willst, kann man mit einer Abfrage erschlagen.

Beim Einsatz von SQL-Datenbanken sollte das Abrufen aller Spalten eines Datensatzes per SELECT * vermieden werden. Stattdessen sollten die gewünschten Spaltennamen explizit aufgelistet werden (SELECT col1, col2 FROM …). Einige Vorteile:
  1. Häufig werden in einer Abfrage nicht alle Spalten benötigt, die aktuell existieren oder in Zukunft existieren könnten, sodass unnötige Daten übertragen werden.
  2. Bei expliziter Angabe der gewünschten Spalten können Datenbanksysteme unter Umständen Indizes zur Beantwortung von Abfragen nutzen.
  3. Eine Auflistung der Spaltennamen macht den Code verständlicher, da die Tabellenstruktur nicht erst im Datenbankschema nachgelesen werden muss.
  4. Bei Änderungen am Datenbankschema (etwa bei Entfernung oder Umbenennung einer Spalte) schlägt eine Query, die kein SELECT * nutzt, sofort fehl. Das ist hilfreich, da so keine Stelle im Code übersehen werden kann, an der wahrscheinlich auch die PHP-Datenstrukturen an das neue Schema angepasst werden müssen.

Dein Code ist anfällig für SQL Injections. Benutzereingaben (z.B. aus einem Formular oder aus der URL), dürfen niemals ungefiltert in SQL-Strings eingebaut werden. Ein Angreifer wäre sonst in der Lage aktiven Code in Dein SQL einzuschleusen. SQL Injections gehören zu den gefährlichsten und weitverbreitesten Fehlern bei Webanwendugen. Dabei ist ihre Vermeidung recht einfach. PHP stellt für jede unterstützte Datenbank eine Funktion zum Entschärfen von Benutzereingaben zur Verfügung.

Für mysqli erledigt das mysqli_real_escape_string() bzw. für die veraltete mysql-Extension mysql_real_escape_string().

Außerdem bieten die beiden neueren Extensions PDO und mysqli die Möglichkeit, prepared Statements zu verwenden. In diesem Fall kümmern sich PHP und die Datenbank selbst um das Maskieren von gefährlichen Sonderzeichen.
 
Zuletzt bearbeitet von einem Moderator:
Ich weiß,dass es noch nicht ganz sicher ist.
Ich möchte erstmal, dass es geht und dann werde ich die Sicherheitslücken fixen.
Vielen Dank trotzdem für deine Hilfe.
Das mache ich bei allen meinen Projekten so.
Erst die Funktionen dann die Sicherheit.:D
Das ist eigentlich nicht Klug, aber egal.
 
Werbung:
Zurück
Oben