1. Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!
    Information ausblenden

Was habe ich für einen Denkfehler?

Dieses Thema im Forum "PHP" wurde erstellt von nils320, 3 Februar 2018.

  1. nils320

    nils320 Mitglied

    Registriert seit:
    20 Juni 2017
    Beiträge:
    54
    Punkte für Erfolge:
    6
    Hallo,
    ich habe ein Ticket-System programmiert.
    Um dieses abzusichern habe ich folgenden Code eingebaut:
    Code (text):
    1.  
    2. $query_view_02 = "SELECT * FROM tickets WHERE ID=$ticketid";
    3. $result_view_02 = mysqli_query($verbindung, $query_view_02);
    4. $row_view_02 = mysqli_fetch_array($query_view_02);
    5. $userid_jetzt = $_SESSION['userid'];
    6. if($_SESSION['userid'] != $row_view_02['USER_ID']){
    7.  
    8.     $error_no_perm = ' <div class="container"><div class="alert alert-danger">Dachtest du echt, dass ich so doof bin? :D <br> Du hast keine Berechtigungen dieses Ticket zu Sehen!</div></div>';
    9.     echo $_SESSION['userid'];
    10.     echo "<br>";
    11.  
    12.     echo $userid_jetzt;
    13.     echo $error_no_perm;
    14.     header('Location: viewticket.php');
    15.     exit;
    16. }
    17.  
    Es wird folgendes ausgegeben:
    [​IMG]
    So wie der Code geschrieben ist, sollte das aber eigentlich nicht passieren...
    Was habe ich falsch gemacht?
    Mehrere Augen sehen schließlich mehr Fehler, als nur 2 Augen :D

    Viele Grüße
    Nils
     
    Werbung:

    Jetzt registrieren, damit diese Werbung verschwindet
  2. m.scatello

    m.scatello Aktives Mitglied

    Registriert seit:
    15 Februar 2017
    Beiträge:
    586
    Punkte für Erfolge:
    28
    Da hilft nur

    Richtig debuggen
    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    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:
    • 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.
    • Bei expliziter Angabe der gewünschten Spalten können Datenbanksysteme unter Umständen Indizes zur Beantwortung von Abfragen nutzen.
    • Eine Auflistung der Spaltennamen macht den Code verständlicher, da die Tabellenstruktur nicht erst im Datenbankschema nachgelesen werden muss.
    • 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.
     
    themrdomi und nookie gefällt das.
  3. sysop

    sysop Mitglied

    Registriert seit:
    10 Juli 2015
    Beiträge:
    147
    Punkte für Erfolge:
    18
    Offenbar sind die Werte in der Session und der gelesenen Variablen nicht gleich.

    Beachte:
    9 ist nicht gleich '9' ist nicht gleich '9 ' ist nicht gleich ' 9'
     
  4. nils320

    nils320 Mitglied

    Registriert seit:
    20 Juni 2017
    Beiträge:
    54
    Punkte für Erfolge:
    6
    Ich habe es jetzt gelöst.
    Danke für die Hilfe

    Viele Grüße
    Nils
     
  5. nookie

    nookie I did it all for the nookie

    Registriert seit:
    14 Mai 2013
    Beiträge:
    1.394
    Punkte für Erfolge:
    83
    Kommt mir so bekannt vor.(bdt600)
     
  6. m.scatello

    m.scatello Aktives Mitglied

    Registriert seit:
    15 Februar 2017
    Beiträge:
    586
    Punkte für Erfolge:
    28
    Wenn du auch auf phpforum.de unterwegs bist, ist das kein Wunder, habe ich von dort.

    Sollte mir das etwas sagen?