Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] (Unerklärliche) PHP-Fehlermeldung?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] (Unerklärliche) PHP-Fehlermeldung?

    Servus Leute!

    Die Machine spuckt folgende Fehlermeldungen aus:

    PHP-Code:
    [Wed Jan 07 10:45:29 2015] [error] [client 140.14.217.54PHP Notice:  Undefined indexNodeName in /http/htdocs/Webseite/test.html on line 46refererhttps://localhost/Webseite/test.html
    [Wed Jan 07 10:45:29 2015] [error] [client 140.14.217.54PHP Notice:  Undefined index:  in /http/htdocs/Webseite/test.html on line 48refererhttps://localhost/Webseite/test.html 
    Hier mal die Zeilen:

    PHP-Code:
     46 $NodeName $_POST['NodeName'];
     
    47
     48 
    if ($AllValidNodes[$NodeName] == 'HIER') {
     
    49      $NodeName;
     
    50 
    Hat jemand eine Lösung/Erklärung dafür?
    Was ist mir einer undefinierten index gemeint?


  • #2
    Setze das POST-Feld. *schulterzuck*

    Kommentar


    • #3
      Zitat von mermshaus Beitrag anzeigen
      Setze das POST-Feld. *schulterzuck*
      Wurde schon und alles funktioniert prima!

      Kommentar


      • #4
        PHP-Code:
        var_dump($_POST); 
        ?
        Ist das Feld auch innerhalb des Formulars?

        Was ist mir einer undefinierten index gemeint?
        Das weißt du.
        Relax, you're doing fine.
        RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

        Kommentar


        • #5
          Zitat von VPh Beitrag anzeigen
          PHP-Code:
          var_dump($_POST); 
          ?
          Ist das Feld auch innerhalb des Formulars?


          Das weißt du.
          Var dump zuerst auf 0 nach dem submit -> array(1) { ["NodeName"]=> string(6) "test" }

          PHP-Code:
          <?php

          $DBCN 
          "DBP1";

          require 
          "/http/htdocs/shared/connect_db.inc";

          $AllValidNodes = array ();

          $conn ConnectDB("$DBCN");

          $sql "select distinct NODENAME from NODES where PLATTFORM in ('hsv1', 'hsv2') and NAME in ('dfg','qwe','wer') order by NODENAME";

          $AllValidNodes QueryDB ($conn,$sql);

          DisConnectDB ($conn);

          $NodeName $_POST['NodeName'];

          if (
          $AllValidNodes[$NodeName] == 'HIER') {
               
          $NodeName;
          }
          else {
               
          $NodeName "Incorrect Name";
          }

          ?>

          Reports: <?php echo  "<u>" $NodeName "</u>";
           
          ?>
          Das Formular befindet sich auf einer externen Datei, das wiederum über POST die Daten vermittelt, die schließlich in $NodeName geschrieben werden.

          Hier das Formular:

          PHP-Code:
          echo '<form action="/Webseite/index.html" method="post">';

          echo 
          '<input type="input" maxlength="20" name="NodeName" class="input" style="width:120px;" size="40" value=""/>';
          echo 
          '<input type="submit" value="Go " >';
          echo 
          '</form>'
          Funktioniert jedoch alles.

          Habe hier anscheinend was gefunden:

          http://www.php-kurs.com/notice-undef...ex-meldung.htm

          Kommentar


          • #6
            Var dump gibt erstmal nichts aus. nach dem submit -> array(1) { ["NodeName"]=> string(6) "test" }
            Ja klar, $_POST ist auch nur gefüllt, wenn du das Script über einen Form-Submit aufrufst. Ohne dem ist $_POST leer. Also bei einem direkten Aufruf. Siehe isset() oder empty() (oder ich versehe dich falsch).
            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Zitat von hausl Beitrag anzeigen
              Ja klar, $_POST ist auch nur gefüllt, wenn du das Script über einen Form-Submit aufrufst. Ohne dem ist $_POST leer. Also bei einem direkten Aufruf. Siehe isset() oder empty() (oder ich versehe dich falsch).
              Ist ja auch alles in Ordnung habe es nur mal so erwähnt.

              Ich möchte nur die Fehlermeldung los werden...

              Also ich soll ein isset setzen...? --> laut Link

              Kommentar


              • #8
                Prüfen ob das Formular abgesendet wurde, ja.
                Relax, you're doing fine.
                RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                Kommentar


                • #9
                  Was noch niemandem aufgefallen ist: PHP-Befehle lassen sich nicht in HTML-Dateien ausführen (es sei denn, du hast das explizit über .htaccess geregelt). Benenne die Endung ".html" in ".php" um.

                  Kommentar


                  • #10
                    Zitat von VPh Beitrag anzeigen
                    Prüfen ob das Formular abgesendet wurde, ja.
                    Danke! Jetzt versteh ichs, das PHP muss ersteinmal prüfen ob das Formular bereits gesendet wurde, sonst schmeißt es 'ne Fehlermeldung (oder?)

                    "Die PHP-Funktion isset(). Wie der Name schon sagt, überprüft diese Funktion, ob z.B. unser GET-Wert gesetzt ist."

                    Kommentar


                    • #11
                      Zitat von 199708897 Beitrag anzeigen
                      PHP muss ersteinmal prüfen ob das Formular bereits gesendet wurde, ...
                      Ja, schau dir das hier mal an: http://php-de.github.io/jumpto/affenformular/#umsetzung
                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Das folgende Bsp. stellt eine Möglichkeit dar Index Fehler zu vermeiden

                        PHP-Code:
                        if(isset($_POST['index'])
                        {
                        $index $_POST['index'];}
                        else{
                        $index "";} 
                        Im Ergebnis hast du danach die Variable immer gesetzt und musst nur noch mit den Werten arbeiten Sollte es sich um User eingaben handeln, kannst du auch an der Stelle gleich Vorkehrungen gegen SQL Injection einbauen.

                        Kommentar


                        • #13
                          Sollte es sich um User eingaben handeln,
                          Um was denn sonst in einem Form? Im Ernst, alles gehört geprüft, sich zB auf einen "guten" SELECT-Wert zu verlassen kann böse ausgehen, auch POST ist "fakebar".

                          kannst du auch an der Stelle gleich Vorkehrungen gegen SQL Injection einbauen
                          Nein, Vorkehrungen gegen SQL Injection wären an der Stelle falsch da falscher Kontext. Wenn er direkt danach den Inhalt ausgeben will, dann ist der unter Umständen dadurch verkrüppelt.

                          Vorkehrungen gegen SQL-Injection sollen in dem betreffenden Kontext (der MySQL Schnittstelle) passieren, also direkt beim Anwenden auf die Query bevor diese abgefeuert wird, oder halt impliziert durch Prepared Statements und nicht irgendwo zuvor im Code.

                          Du meinst vermtulich eher sowas wie filter_input() zum "abholen" von POST/GET etc..?
                          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                          PHP.de Wissenssammlung | Kein Support per PN

                          Kommentar


                          • #14
                            Ok zugegebener maßen dürfte es sich wohl um eine User Eingaben handeln. Aber welchen vernünftigen Grund sollte es bei einem Formular geben eine User Eingabe direkt außzugeben? I.d.R. wirst du die wohl in eine DB speichern wollen. Ich dachte an sowas wie htmlentities() um das ganze dan anschließend mit einem PDO prepared Statement in die DB zu speichern.

                            Kommentar


                            • #15
                              htmlentities() verwendet man bevor man das Zeugs ins/als HTML zum Browser rausschickt, also für den Ausgabekontext. Das hat eigentlich nichts mit SQL-Injection bzw. der Absicherung der/einer Eingabe zu tun. Da reichen prep. Statements.

                              Hier würden dann sonst, wenn du auf die Eingaben htmlentites() machst, umgekehrter Weise die Eingabewerte verkrüppelt dann in die DB kommen, also genau seitenverkehrt. Man will in der DB kein "Hans &amp; Sohn" in der DB haben. Das muss als "Hans & Sohn" in die DB kommen wenn es so eingegeben wurde und erst bei der Ausgabe in HTML dann mit htmlentities() erst in die korrekten Entitäten gewandelt werden "Hans &amp; Sohn"

                              Schau dir diese Artikel mal durch: http://php-de.github.io/#security
                              (bei XSS zB geht es um den Ausgabekontext)

                              http://php-de.github.io/jumpto/kontextwechsel/ und der große Bruder (Artikel) dazu: http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel

                              Im Grunde dürfen die Werte selbst nicht im Ursprung verändert werden, sondern nur für den jeweiligen Kontext (SQL-Query, HTML, ..) behandelt werden, das die etwaigen Zeichen die möglicherweise eine Sonderzeichenfunktion haben dort dann als solche escaped sind und als "Textzeichen" (die sie ja sind) und nicht fälschlicherweise als Sonderzeichen (~ "Steuerzeichen") behandelt werden.

                              LG
                              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                              PHP.de Wissenssammlung | Kein Support per PN

                              Kommentar

                              Lädt...
                              X