Ankündigung

Einklappen
Keine Ankündigung bisher.

Übermittelte daten auslesen

Einklappen

Neue Werbung 2019

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

  • Übermittelte daten auslesen

    Hallo.

    Manchen mag diese Frage nun komisch vorkommen, ich bring sie trotz alle dem.

    Habe nun auch schon in diversen php-Handbüchern und in google nach einer antwort geschaut, bin aber nicht fündig geworden.

    Code:
    if ( isset($HTTP_GET_VARS['sub']) || isset($HTTP_POST_VARS['sub']) )
    {
       $sub = ( isset($HTTP_GET_VARS['sub']) ) ? $HTTP_GET_VARS['sub'] : $HTTP_POST_VARS['sub'];
       $sub = htmlspecialchars($sub);
    }
    Es wurde ein link geklickt "plapla.php?sub=x
    Mit diesem Code lese ich nun den Wert von sub aus.

    Und genau darum geht es mir, was gibt es noch für wege übermittelte werte auszulesen, irgendwie kenne ich 1000e Varianten vom sehen in anderen script, verstehe aber nicht was an ihnen anders ist... Der einzige unterschied ist immer nur das es entweder nur eine kurze zeile ist also im Beispiel wäre das nun $sub = plapla; - oder eben so ein riesiger code wie der obige.
    Kann mir jemand sagen, wie mans am kürzensten hinbekommt den wert auszulesen??? Also mit den nötigsten angaben (die führen ja dann doch schließlich auch zum Ziel?!) Denn wenn ich manchmal 4 werte übergebe ist das manchmal für mich unverständlich langer code...

    Grüßli

    edit:
    reicht dashir im übergeben normaler zahlenwerte??
    Code:
    $sub = $HTTP_POST_VARS['sub'];

  • #2
    $HTTP_POST_VARS ist veraltet und sollte nicht mehr verwendet werden. Bitte benutze stattdesen $_POST

    ansonsten $sub = $_POST['sub']; reicht meistens nicht, vor allem wenn du damit Werte für SQL Sachen oder dergleichen übermittelst. $_POST ist für Post Formulare $_GET ist für Get-Formulare und/oder URL-Angaben

    Das Manual sagt dir auch vieles über htmlspecialchars, isset und co

    isset
    htmlspecialchars
    trim
    addslashes

    Bitte lern erst die Grundlagen richtig

    Deine Frage gehört mehr oder weniger ins Anfänger Forum, eher mehr

    So far, grüße

    [EDIT]

    Aber für dein Beispiel würde folgender Code denke ich mal abdeckend sein:

    PHP-Code:
      if(isset($_GET['sub']) AND $_GET['sub'] != '') {
        
    $sub trim($_GET['sub']);
        
    $sub htmlspecialchars($sub);
      } else {
        
    $sub '';
      } 

    Kommentar


    • #3
      Falls das mit dem POST nun komplett raus soll:
      Code:
      $sub = '';
      if(isset($_GET['sub']) AND $_GET['sub'] != '') {
          $sub = trim($_GET['sub']);
          $sub = htmlspecialchars($sub);
      }
      (Nebenbei: beim [php]-Tag passen die Zeilennummern nicht mit den Zeilen überein. Also sie sind ein wenig versetzt.)

      Kommentar


      • #4
        Oder ums konkret zu sagen:

        Dein ursprüngliches Beispiel prüft die Übermittlung von sub sowohl aus Formularen als auch über die Betreffzeile. Letztere wird dabei bevorzugt!! Deswegen, weil die if Abfrage zuerst nach HTTP_GET_VARS fragt. Unterschieden wird über den sogenannten 'Trinitäts-Operator'. Anschließend werden im gefundenen Inhalt noch Zeichen htmlgerecht maskiert.

        Die aktuelle Form, die aber nur auf neuerem PHP funktioniert nutzt wie bereits gesagt $_GET statt $HTTP_GET_VARS und $_POST statt $HTTP_POST_VARS.

        Die dritte Variante ist die unsicherste, nämlich $sub einfach so zu verwenden, wenn register_globals = on gesetzt ist. Sie birgt zahlreiche Sicherheitsrisiken.

        Frage an die Comunity: Funktioniert nicht auch empty() statt der Kombi aus isset() und !='' ??

        also bspw.
        Code:
        if (!empty($_GET['sub'])) $sub = $_GET['sub'];
        else  
          $sub = (!empty($_POST['sub'])) ? $_POST['sub'] : '';
        Und von trim() hat niemand was gesagt, denn wir wissen ja nicht, was das für Daten sind...

        Kommentar


        • #5
          Hi zusammen.

          Ja, empty() würde hier reichen.

          Noch eine Ergänzung:

          * Setze in der php.ini oder am Beginn deiner Skripte error_reporting auf E_ALL.
          * Ebenso register_globals auf off (das muss in der php.ini oder auch .htaccess o.Ä passieren)
          * Neben $_POST und $_GET gibt es noch $_REQUEST (siehe Manual).
          * Wenn magic_quotes.gpc auf on gesetzt ist, dann werden alle eingehenden Werte ziemlich nervig escaped. Den Wert also etweder ausschalten oder diese Funktion rückgängig machen (such mal hier im Forum danach).
          * Alle eingehenden Variablen müssen geprüft bzw. je nach weiterer Verwendung entsprechend maskiert werden. Setzt du sie z.B. in eine MySQL-Abfrage, dann benutze mysql_real_escape_string() etc.

          Basti

          Kommentar


          • #6
            Zitat von Basti
            Ja, empty() würde hier reichen.
            Warum nur hier?
            Kannst Du mir bitte den genauen Unterschied von

            PHP-Code:
            isset($_GET['sub']) AND $_GET['sub'] != '' 
            zu

            PHP-Code:
            !empty($_GET['sub']) 
            erklären

            Danke

            Kommentar


            • #7
              Zitat von Basti
              Ja, empty() würde hier reichen.
              hmm nein eigentlich nicht. also es kommt drauf an was man übergeben will.
              Wenn man zum beispiel folgende URL hat : index.php?sub=0
              dann ist $_GET['sub'] empty. Das gleiche gilt z.B. auch für "false" oder "NULL"

              Kommentar


              • #8
                Stimmt. Sorry.

                Also zumindest, was '0' angeht. 'false' und 'NULL' werden allerdings nicht zu false und NULL. Das wäre ja noch der Gipfel dieser besch* Typenumwandlung

                Basti

                Kommentar

                Lädt...
                X