Ankündigung

Einklappen
Keine Ankündigung bisher.

Alternative zum Error Log?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Alternative zum Error Log?

    Hi,
    gibt es noch eine Möglichkeit die PHP Fehler direkt auf meinen Bildschirm auszugeben. Ich benutze XAMPP.

    PHP-Code:
    error_reporting(E_ERROR E_WARNING E_PARSE E_NOTICE);
    ini_set('display_errors''on'); 
    Im Prinzip funktioniert es aber irgendwie scheinen sich die Fehler "hinter meinen Design" zu verstecken, also die Fehler stören nicht da ich die meisten garnicht sehe. Ich sehe nicht alle Fehler angezeigt, welche aber im Seitenquelltext stehen und in der Error-Log. Kann ich das irgendwie machen, dass sobald ein Fehler ist die gesamte Seite weiß bleibt und mir die Fehler gleich im Browser ausgegeben werden? Es ist nicht so toll immer die Error-Log neu zu öffnen und manuell zu löschen.

    Marco

  • #2
    PHP-Code:
    set_error_handler(function ($errno$errstr$errfile$errline) {
        echo 
    '<div style="positon:fixed;top:0;left:0;width:100%;height:100%;z-index:10000000;background-color:white;color:red">';
        echo 
    '<h1>Fehler ',$errno,'</h1>';
        echo 
    '<p>',nl2br($errstr),'</p>';
        echo 
    '<hr>';
        echo 
    '<p>Datei: ',$errfile,'<br>Zeile: ',$errline,'</p>';
        echo 
    '</div>';
        die;
    }); 

    Kommentar


    • #3
      Danke.
      Irgendwie erfüllt das bei mir nicht den Zweck.
      Es wird nur ein Fehler eingeblendet und nach beheben bleibt dieser weiterhin stehen ... Also wegen z-index in der Höhe welcher im Code stande habe ich bis jetzt keinen das es daran liegen könnte^^ Auf die Idee ein Div um die Fehler zu machen kam ich auch schon ging auch nicht

      Kommentar


      • #4
        PHP.de Wiki | EVA

        Kommentar


        • #5
          Grundsätzlich halte ich mich an das Eva-Prinzip, mit ein paar Ausnahmen wie z.B. bei Optionsfeldern. Die Fehler welche es nicht anzeigt, sind meist
          Code:
          Notice: Undefined variable: ....
          Und diese muss ich ja an entsprechender Stelle im Inhalt anzeigen und dadurch wird es nicht immer angezeigt.

          Kommentar


          • #6
            Hi,

            dann definiere die Variablen doch.

            Kommentar


            • #7
              dann definiere die Variablen doch.
              Mach ich ja auch ^^ Nur gings mir darum das mir dafür nicht alle angezeigt werden immer und manchmal sieht man auch nicht wenn mal ein isset() vergessen wurde darum hatte ich hier gefragt.

              Kommentar


              • #8
                und manchmal sieht man auch nicht wenn mal ein isset() vergessen wurde
                Dann gewöhn Dir eine systematische Arbeitsweise an. Validiere User-Input immer, und immer vor der Ausgabe.

                Kommentar


                • #9
                  Dann gewöhn Dir eine systematische Arbeitsweise an.
                  Das möchte ich ja derzeit machen.

                  Validiere User-Input immer, und immer vor der Ausgabe.
                  Eingabe prüfen? Also:

                  PHP-Code:
                  if ( $feld_name == "" ){ echo "Bitte geben Sie einen Name ein." }
                  else {
                         @
                  mysql_query" INSERT INTO tabelle (name) VALUES (' " mysql_real_escape_string ($name) . " ')" 
                  So mache ich dies auch. Also ich frage alles mögliche zu Eingabefeldern ab, was man so abfragen könnte und trage alle Felder, auch Numerische mit mysql_real_escape_string() ein. Damit müsste ich ja sicher sein vor SQL-Injektion? Habe das Thema mit SQL Injektion mal kurz getestet und da hat mir zumindest mysql_real_escape_string() geholfen soetwas zu vermeiden und ohne konnte ich mich in meine eigene lokale Datenbank "einhacken".

                  und immer vor der Ausgabe.
                  Wie kann ich die Daten vor der Ausgabe validieren? Oder meintest du oben genanntes?

                  Kommentar


                  • #10
                    @ vor Funktionsaufrufen ist immer schlecht.
                    $feld_name <-> $name ...?

                    Kommentar


                    • #11
                      Zitat von xm22 Beitrag anzeigen
                      @ vor Funktionsaufrufen ist immer schlecht.
                      $feld_name <-> $name ...?
                      Ich nehme an, das ist ein Beispiel, das er auf die Schnelle hier gepostet hat.

                      Das ist keine gute Prüfung der Eingabe. Jede gute Prüfung einer Eingabe in PHP beginnt mit isset() oder array_key_exists().

                      Kommentar


                      • #12
                        @ vor Funktionsaufrufen ist immer schlecht.
                        Warum? Ich habe das so verstanden, dass ich mit @ Fehler unterdrücken kann? Ich meine beim Testen habe ich das @ nicht darin, sondern erst, wenn die Funktion funktioniert, sodass zukünftige Fehlerausgaben vermieden werden.
                        Ist das so dann trotzdem falsch und warum?

                        $feld_name <-> $name ...?
                        Ich nehme an, das ist ein Beispiel, das er auf die Schnelle hier gepostet hat.
                        Ja das habe ich nur hier zum Beschreiben schnell gepostet, dabei ist mir nicht aufgefallen, dass ich zwei verschiedene Namen hier habe. Sorry.

                        Das ist keine gute Prüfung der Eingabe. Jede gute Prüfung einer Eingabe in PHP beginnt mit isset() oder array_key_exists().
                        Für jeden Datensatz oder beim beginnen der Prüfung? Wenn zum Beginnen der Prüfung, habe ich ja so:

                        PHP-Code:

                        if ( isset ( $_POST ' submit ' ] ) {

                        if ( 
                        $feld == "" ){ echo "Bitte geben Sie einen Name ein." 
                        else { 
                        @
                        mysql_query" INSERT INTO tabelle (name) 
                        VALUES ("
                        .mysql_real_escape_string ($name) . " ')" ;


                        Oder sollte der Prüfung intern folgt ausfallen?

                        PHP-Code:

                        if ( isset ( $name ) {

                        ... }

                        // Jeden Formulareintrag mit isset() prüfen?
                        // Wenn ich abfrage, ob es leer ist wie im ersten Beispiel erfüllt es doch den selben Zweck wie isset() oder nicht? 

                        Kommentar


                        • #13
                          Für jedes Formularfeld, das du benutzen willst, musst du vorher überprüfen, ob es mitgesendet wurde:

                          PHP-Code:
                          if (isset($_POST['name'], $_POST['email']) {} 
                          usw...

                          Kommentar


                          • #14
                            Ok.
                            Dann werde ich das mal noch mit umstellen. Wobei ist da jetzt der Unterschied trotzdem ob ich mit isset() prüfe oder Abfrage ob leer ist?

                            PHP-Code:
                            if ( $name == " ) 
                            Dies hat doch im Prinzip genau das selbe Ergebnis?

                            Validiere User-Input immer, und immer vor der Ausgabe.
                            Wie kann man User-Input-Felder vor der Ausgabe validieren? Habe auch bei Google hierzu noch nichts gefunden. Oder ist dies das worüber wir gerade sprechen? Denn ich verstehe darunter was den User angezeigt wird und bei dem Überprüfen dies was sich abspielt und der User nichts merkt, also ein Normal-User.

                            Kommentar


                            • #15
                              $name ist eine Variable, die der Benutzer nicht erstellt hat.
                              $_POST['name'] muss erst überprüft werden.

                              PHP-Code:
                              $name $_POST['name']; 
                              Wenn kein "name" geschickt wurde, ergibt das eine PHP-Notice. Daher musst du erst überprüfen, ob $_POST['name'] existiert, nicht $name, so wie ich es dir schon gesagt habe.

                              Kommentar

                              Lädt...
                              X