Ankündigung

Einklappen
Keine Ankündigung bisher.

Formulardaten vor INSERT ?

Einklappen

Neue Werbung 2019

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

  • Formulardaten vor INSERT ?

    hi,

    ich möchte Formulardaten vor dem speichern in die Datenbank prüfen ob diese "Leer" sind.

    Dazu habe ich eine generelle Frage.
    PHP-Code:
    $username $_POST['username'];

    if (
    $username == '') {
      
    $fehler[] = 'Bitte trage einen Namen ein.';
    }

    // oder 
    if (empty($username)) {  
      
    $fehler[] = 'Bitte trage einen Namen ein.';
    }

    // oder 
    if (isset($username)) {  
      
    $fehler[] = 'Bitte trage einen Namen ein.';

    Welche Variante ist Stand 2014 ?

    Dann noch eine Frage bzl. Filtern. Wenn eine Angabe zur Anzeige kommen soll, schicke ich diese vorher durch:
    PHP-Code:
    $username htmlspecialchars($_POST['username'], ENT_QUOTES'utf-8');
    // trim ? 
    Wenn es jetzt aber zu keiner Anzeige kommt (es wird nur geprüft ob was drin steht) reicht da nicht einfach sowas ?
    PHP-Code:
    $username $_POST['username']; 
    Wenn dem so ist, dann wäre dieses ja nicht "Böse" oder ?
    PHP-Code:
    extract($_POSTEXTR_SKIP); 

  • #2
    beim isset() fehlt schomal ein nicht ?
    sonstt schau mal dalang:

    http://php-de.github.io/jumpto/form/

    Kommentar


    • #3
      hi moma,

      vielen dank für deine Antwort (wieder mal)

      Die Seite aus deinem Link behandelt Grundlagen, sind die noch Aktuell ?

      Meine PHP Kenntnisse sind noch von 2008 und ich dachte mir hey 2014, da hat sich bestimmt einiges getan.

      Was macht ihr Profis mit
      Code:
      $_POST['username']
      filter_var ? trim ? nicht, weil es egal ist was drin steht ausser bei der Ausgabe htmlspecialchars, hauptsache bindParam ?

      Kommentar


      • #4
        Zitat von Gianna Beitrag anzeigen
        Dann noch eine Frage bzl. Filtern. Wenn eine Angabe zur Anzeige kommen soll, schicke ich diese vorher durch:
        PHP-Code:
        $username htmlspecialchars($_POST['username'], ENT_QUOTES'utf-8');
        // trim ? 
        Wenn es jetzt aber zu keiner Anzeige kommt (es wird nur geprüft ob was drin steht) reicht da nicht einfach sowas ?
        PHP-Code:
        $username $_POST['username']; 
        Warum willst du prüfen, ob etwas drin steht? Wie du oben schreibst, jagst du den Nutzernamen wenn es zu Anzeige kommt durch htmlspecialchars, d.h. dann, wenn du die Daten aus der DB gezogen hast, nicht wenn du diese reinschreibst.

        Zitat von Gianna Beitrag anzeigen
        Wenn dem so ist, dann wäre dieses ja nicht "Böse" oder ?
        PHP-Code:
        extract($_POSTEXTR_SKIP); 
        Es gibt Gründe, warum Superglobale nichtmehr automatisch extracted werden. Was für Gründe hast du, die Formulardaten zu extracten?

        Zitat von Gianna Beitrag anzeigen
        Was macht ihr Profis mit
        Code:
        $_POST['username']
        filter_var ? trim ? nicht, weil es egal ist was drin steht ausser bei der Ausgabe htmlspecialchars, hauptsache bindParam ?
        Du und nur du weißt, wie ein Username bei dir aussehen darf. Und genau darauf musst du dementsprechend Prüfen. Natürlich gibt es vorgefertigte Filter (filter_var), die passen aber nicht unbedingt auf jede Eingabe.
        [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

        Kommentar


        • #5
          Zitat von tkausl Beitrag anzeigen
          Warum willst du prüfen, ob etwas drin steht? Wie du oben schreibst, jagst du den Nutzernamen wenn es zu Anzeige kommt durch htmlspecialchars, d.h. dann, wenn du die Daten aus der DB gezogen hast, nicht wenn du diese reinschreibst.

          Es gibt Gründe, warum Superglobale nichtmehr automatisch extracted werden. Was für Gründe hast du, die Formulardaten zu extracten?

          Du und nur du weißt, wie ein Username bei dir aussehen darf. Und genau darauf musst du dementsprechend Prüfen. Natürlich gibt es vorgefertigte Filter (filter_var), die passen aber nicht unbedingt auf jede Eingabe.
          zu 1. Wegen sowas z.b. (es gibt noch kein INSERT)
          PHP-Code:
          echo '<p>Hallo '.$_POST['username'].', bitte Trage auch eine eMail ein.</p>'
          zu 2. Wenn ich z.b. als Admin viele Daten eintrage:
          PHP-Code:
          $titel $_POST['titel'];
          $text $_POST['text'];
          $blub $_POST['blub'];
          $blabla $_POST['blabla'];
          $usw $_POST['usw'];
          // warum nicht gleich extract($_POST); 
          zu 3. Ich erwarte garnichts, alles darf, nur eben nichts "Böse". Und wenn sich jemand "eval($_POST['evil'])" nennen will, soll er doch

          Kommentar


          • #6
            Zitat von Gianna Beitrag anzeigen
            zu 1. Wegen sowas z.b. (es gibt noch kein INSERT)
            PHP-Code:
            echo '<p>Hallo '.$_POST['username'].', bitte Trage auch eine eMail ein.</p>'
            Wenn jemand noch garnichts eingegegeben hat als Username? Ich würde das weglassen, jemanden im Registrierungsprozess schon mit dem (grade eingegebenen) namen anzusprechen.

            Zitat von Gianna Beitrag anzeigen
            zu 2. Wenn ich z.b. als Admin viele Daten eintrage:
            PHP-Code:
            $titel $_POST['titel'];
            $text $_POST['text'];
            $blub $_POST['blub'];
            $blabla $_POST['blabla'];
            $usw $_POST['usw'];
            // warum nicht gleich extract($_POST); 
            Niemand zwingt dich, die Variablen in den lokalen Raum zu übertragen. Du kannst auch gleich auf $_POST arbeiten.
            PHP-Code:
            //Bad:
            $name $_POST['name'];
            $name htmlspecialchars($name);

            //Bad:
            extract($_POST);
            $name htmlspecialchars($name);

            //Good:
            $name htmlspecialchars($_POST['name']); 
            (Vorheriges isset & validieren ist selbstverständlich)

            Zitat von Gianna Beitrag anzeigen
            zu 3. Ich erwarte garnichts, alles darf, nur eben nichts "Böse". Und wenn sich jemand "eval($_POST['evil'])" nennen will, soll er doch
            Da hast du deine Antwort. Prüfe auf die Länge, mehr nicht.
            [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

            Kommentar


            • #7
              Zitat von tkausl Beitrag anzeigen
              Wenn jemand noch garnichts eingegegeben hat als Username? Ich würde das weglassen, jemanden im Registrierungsprozess schon mit dem (grade eingegebenen) namen anzusprechen.
              hey tkausl,

              ok, war ein schlechtes Beispiel, ich dachte da eher an sowas hier:
              PHP-Code:
              echo '<p>Username<br /><input type="text" name="username" value="'.$_POST['username'].'"></p>'
              wie oder ob ich dort Validieren muss.

              (Vorheriges isset & validieren ist selbstverständlich)
              Also erst "trim" dann "isset" und dann empty bzw. ='' ?

              Ich hab hier gerade sowas gefunden:
              PHP-Code:
              $var trim($var);
                  
                  if(isset(
              $var) === true && $var !== '') {
                  
                      
              // It's empty
                  
                  

              Kommentar


              • #8
                Zitat von Gianna Beitrag anzeigen
                Also erst "trim" dann "isset" und dann empty bzw. ='' ?

                Ich hab hier gerade sowas gefunden:
                PHP-Code:
                $var trim($var);
                    
                    if(isset(
                $var) === true && $var !== '') {
                    
                        
                // It's empty
                    
                    

                Nee, das Beispiel kannst du vergessen. Isset immer zuerst, nach trim() steht in $var definitiv etwas, wenn auch nur eine leere Zeichenkette.
                [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                Kommentar


                • #9
                  Zitat von tkausl Beitrag anzeigen
                  Nee, das Beispiel kannst du vergessen. Isset immer zuerst, nach trim() steht in $var definitiv etwas, wenn auch nur eine leere Zeichenkette.
                  sowas muss man wissen hihi

                  Ich mach das dann mal so:
                  PHP-Code:
                  if (isset($_POST['username']) === true && trim($_POST['username']) !== '') {
                    
                  $fehler[] = 'Bitte trage einen Namen ein.';

                  Hast du noch ne Idee dbzl. ?
                  Zitat von Gianna Beitrag anzeigen
                  PHP-Code:
                  echo '<p>Username<br /><input type="text" name="username" value="'.$_POST['username'].'"></p>'
                  wie oder ob ich dort Validieren muss.

                  Kommentar


                  • #10
                    Zitat von Gianna Beitrag anzeigen
                    Ich mach das dann mal so:
                    PHP-Code:
                    if (isset($_POST['username']) === true && trim($_POST['username']) !== '') {
                      
                    $fehler[] = 'Bitte trage einen Namen ein.';

                    Tut mit Sicherheit nicht, was du erwartest. Die Logik ist zwar richtig, allerdings falschrum.

                    Zitat von Gianna Beitrag anzeigen
                    Hast du noch ne Idee dbzl. ?
                    Schau dir die Dokumentation an:
                    http://fi2.php.net/manual/en/functio...ecialchars.php

                    Da kannst du auch Flags setzen. Wichtig ist, dass Single- bzw. Doublequotes auch ersetzt werden, jenachdem ob du im HTML eben Single- oder Doublequotes nutzt um den Value-String zu umschließen.
                    ENT_COMPAT Will convert double-quotes and leave single-quotes alone.
                    ist z.b. Standard (mit ENT_HTML401 zusammen).
                    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                    Kommentar

                    Lädt...
                    X