paul: code vereinfachen_ bitte helfen!

hallo zusammen, ich habe folgenden code geschrieben:

  
$beitrag_03='';  
if(isset ($_POST['beitrag_03'])) {  
$beitrag_03 = '."&beitrag_03="'.$_POST['beitrag_03'];  

das funktioniert auch alles ganz wunderbar. nun möchte ich diese bedingung aber für ca. 10 variablen erstellen und bin mir sicher, dass das besser geht, als 10 mal den ganzen "müll" hinzuschreiben. wie macht das der smarte programmierer? mit einer schleife? oder einer funktion?

bitte um beispiel, wenn möglich!

paul

  1. Grüße,

    hallo zusammen, ich habe folgenden code geschrieben:

    $beitrag_03='';
    if(isset ($_POST['beitrag_03'])) {
    $beitrag_03 = '."&beitrag_03="'.$_POST['beitrag_03'];

      
    du wandelst hier anscheinend  "POST in GET" (salopp gesagt) um - darf man den Sinn erfahren?  
      
      
    MFG  
    bleicher
    
    -- 
    \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_-  
      
    [Die Essenz der Egomanie](http://double.iblogger.org/)  
    ![](http://img296.imageshack.us/img296/9641/minibannerso7.jpg)  
      
      
    [ie:{ fl:( br:< va:| ls:\[ fo:# rl:? n4:? ss:| de:> js:| ch:| sh:( mo:| zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3C+va%3A%7C+ls%3A%5B+fo%3A%23+rl%3A%3F+n4%3A%3F+ss%3A%7C+de%3A%3E+js%3A%7C+ch%3A%7C+sh%3A%28+mo%3A%7C+zu%3A%7C)
    
    1. du wandelst hier anscheinend  "POST in GET" (salopp gesagt) um - darf man den Sinn erfahren?

      naja, ich hab ein formular, dieses schick ich mit POST "an sich selbst" ab und überprüfe die eingegebenen werte. wenn diverse bedingungen erfüllt werden, leite ich zu einer anderen datei weiter, die die angegebenen (GET-) parameter (datenbankmäßig) weiterverarbeitet. ist das etwa verkehrt?

      1. Grüße,

        naja, ich hab ein formular, dieses schick ich mit POST "an sich selbst" ab und überprüfe die eingegebenen werte. wenn diverse bedingungen erfüllt werden, leite ich zu einer anderen datei weiter, die die angegebenen (GET-) parameter (datenbankmäßig) weiterverarbeitet. ist das etwa verkehrt?

        nein - ist auch ein weg - aber du kannst ggf. die Funktionen der Weitervearbeitung bedingt einbinden - das erspart weiterleiten?
        MFG
        bleicher

      2. Hallo Paul,

        ...überprüfe die eingegebenen werte. wenn diverse bedingungen erfüllt werden, leite ich zu einer anderen datei weiter, die ... weiterverarbeitet. ist das etwa verkehrt?

        IMHO ja. Beim Programmieren sollte auch immer effizient verfahren werden. Die Daten sollten also, wenn sie im Script validiert wurden, sofort verarbeitet werden. Jede erneute Anfrage bringt auch Datenverkehr auf Protokollebene mit sich, der nicht sein muss und zum einen die Wartezeit verlängern – aber auch zu Fehler führen kann, wenn beispielsweise die Verbindung abreißt.

        +-----------+  +-----------+
         |  Server   |  |  Server   |
         +-----------+  +-----------+
               |              |
         htmlformular   htmlformular
               ↓              ↓
         +-----------+  +-----------+
         |  Browser  |  |  Browser  |
         +-----------+  +-----------+
               |              |
           POST daten    POST daten
               ↓              ↓
         +-----------+  +-----------+
         |  Server   |  |  Server   | → Verarbeitung
         +-----------+  +-----------+
               |
           Umleitung
               ↓
         +-----------+
         |  Browser  |
         +-----------+
               |
           GET daten
               ↓
         +-----------+
         |  Server   | → Verarbeitung
         +-----------+

        Dazu sind sicher nur ein paar wenige Anpassungen notwendig, um effizient zu verfahren. Damit der Code der Validierung von der Verarbeitung getrennt bleibt, was die Übersichtlichkeit fördert, so wie es ja bis jetzt auch der Fall ist, bietet sich include() (oder auch require()) an.

        Zu Deinem Eigentlichen Ansinnen, mehrere Formulardaten zu validieren, mache Dir klar, dass $_POST ja bereits ein Array ist, was Du mit einer Kontrollstrukturen abarbeiten kannst: http://de2.php.net/manual/de/language.control-structures.php

        Gruß aus Berlin!
        eddi

        --
        Wer mit Kanonen auf Spatzen schießt, mag zwar immernoch Augen für die Tauben auf dem Dach haben, aber keine Hand mehr zum reichen.
      3. Moin!

        »» du wandelst hier anscheinend  "POST in GET" (salopp gesagt) um - darf man den Sinn erfahren?

        naja, ich hab ein formular, dieses schick ich mit POST "an sich selbst" ab und überprüfe die eingegebenen werte. wenn diverse bedingungen erfüllt werden, leite ich zu einer anderen datei weiter, die die angegebenen (GET-) parameter (datenbankmäßig) weiterverarbeitet. ist das etwa verkehrt?

        Ja, das ist verkehrt.

        Zum einen: Eine GET-URL darf nur begrenzt lang werden. Diese Begrenzung ist in der existierenden Serversoftware begründet, eine Begrenzung in irgendeinem Standard existiert nicht, deshalb kann man auch nicht exakt sagen, welche Längen noch funktionieren. Deine Feldnamen sehen aber nun gerade so aus, als ob sie längeren Text enthalten würden, deshalb also auch potentiell zu lang werden könnten.

        Zweitens: GET und POST haben auch einen technischen Sinn. GET ist dann einzusetzen, wenn die Ausführung des Requests auf dem Server nur lesende Operationen durchführt, aber nichts dauerhaft verändert. POST hingegen sollte zum Einsatz kommen, wenn datenverändernde Operationen durchgeführt werden.

        Wenn du die Aufgabe vernünftig durchführen willst, dann führst du in deinem per POST aufgerufenen Skript alle Operationen durch, die Daten schreiben, und leitest danach erst weiter auf ein Skript, welches die erfolgreiche Ausführung dieser Operation meldet. Dann kann der Benutzer diese Erfolgsseite so oft reloaden, wie er will, ohne ständig neue Datensätze anzulegen. Bei deiner jetzigen Variante würde er mit jedem Reload neue Datensätze schreiben.

        Außerdem hast du bei der Bildung der URL (die ja sowieso überflüssig wird) einen ganz wichtigen Aspekt vergessen: Escaping! In dem Textfeld können Zeichen eingegeben werden, die in der gebildeten URL Sonderbedeutung haben. Ohne Escaping würde bei ungünstiger Texteingabe dein ganzer Weiterleitungsmechanismus einfach scheitern - ärgerlich für die Anwender. Escaping ist aber auch für die Absicherung gegen Angriffe eine sehr wichtige Maßnahme.

        - Sven Rautenberg

        1. Hello,

          Außerdem hast du bei der Bildung der URL (die ja sowieso überflüssig wird) einen ganz wichtigen Aspekt vergessen: Escaping! In dem Textfeld können Zeichen eingegeben werden, die in der gebildeten URL Sonderbedeutung haben. Ohne Escaping würde bei ungünstiger Texteingabe dein ganzer Weiterleitungsmechanismus einfach scheitern - ärgerlich für die Anwender. Escaping ist aber auch für die Absicherung gegen Angriffe eine sehr wichtige Maßnahme.

          Wieso escaping?
          Müssten die Parameter nicht für den URi codiert werden?

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Moin!

            Wieso escaping?
            Müssten die Parameter nicht für den URi codiert werden?

            Genau - das nennt sich Escaping.

            - Sven Rautenberg

            1. Hello,

              Wieso escaping?
              Müssten die Parameter nicht für den URi codiert werden?

              Genau - das nennt sich Escaping.

              Da bin ich anderer Meinung.
              Unter Escaping verstehe ich die Umschaltung zwischen Sonderbedeutung und Textbedeutung eines Zeichens (Befehls, ...) durch Voranstellen eines Maskierungszeichens ("Escape-Characters")

              http://de.wikipedia.org/wiki/Maskierungszeichen

              aber _ohne_ das betroffene Zeichen selber zu ändern.

              Unter Codierung (hier URL-Codierung) verstehe ich das Ändern der Zuordnung zwischen Code und Bedeutung, was dem Austauschen von Zeichen mit Sonderbedeutung gegen andere gleich kommt.

              Das Escaping lässt ich am Ziel einfach durch das Entfernen des einen einzigen (eventuell im Text mehrfach auftretenden) Escape-Characters wieder entfernen, während ein codierter Text eine Rückkodierung erforderlich macht, also mehrere Zuodnungen zwischen "Transportbitmuster" und ursprünglicher Bedeutung vorhanden sind. Es wird eine Transformationstabelle erforderlich (oder eben ein Algorithmus, der diese ersetzt).

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
  2. Hi,

    hallo zusammen, ich habe folgenden code geschrieben:

    $beitrag_03='';
    if(isset ($_POST['beitrag_03'])) {
    $beitrag_03 = '."&beitrag_03="'.$_POST['beitrag_03'];

    
    >   
    > das funktioniert auch alles ganz wunderbar. nun möchte ich diese bedingung aber für ca. 10 variablen erstellen und bin mir sicher, dass das besser geht, als 10 mal den ganzen "müll" hinzuschreiben. wie macht das der smarte programmierer? mit einer schleife? oder einer funktion?  
      
    Der nutzt Arrays.  
      
    Um Werte bereits in $\_POST als Array zu bekommen, hängst du eckige Klammern an den Feldnamen in deinem Formular an:  
    name="feldname[]"  
      
    Und wenn du den Index gleich vorgeben willst (wenn mehrere Daten"sätze" bestimmter Struktur übergeben und die Zusammengehörigkeit sichergestellt werden soll) - dann nutzt du name="feldname[0]", name="feldname[1]" o.ä.  
      
    MfG ChrisB  
      
    
    -- 
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    
    1. »» ~~~php

      »» $beitrag_03='';
      »» if(isset ($_POST['beitrag_03'])) {
      »» $beitrag_03 = '."&beitrag_03="'.$_POST['beitrag_03'];
      »»

        
      
      > Um Werte bereits in $\_POST als Array zu bekommen, hängst du eckige Klammern an den Feldnamen in deinem Formular an:  
      > name="feldname[]"  
      > Und wenn du den Index gleich vorgeben willst (wenn mehrere Daten"sätze" bestimmter Struktur übergeben und die Zusammengehörigkeit sichergestellt werden soll) - dann nutzt du name="feldname[0]", name="feldname[1]" o.ä.  
        
      aha, also ein array im array?  
      würde der code für das obrige beispiel dann etwa so aussehen?  
      ~~~php
        
      $beitrag_03='';  
      if(isset ($_POST['beitrag[03]'])) {  
      
      > »» $beitrag_03 = '."&beitrag_03="'.$_POST['beitrag[03]'];  
        
      
      

      und das ganze dann in eine schleife für jeden beitrag[] packen? oder lieg ich jetzt ganz falsch??

      1. Hi,

        würde der code für das obrige beispiel dann etwa so aussehen?

        if(isset ($_POST['beitrag[03]'])) {

        Jein, nicht ganz.

        $_POST mittels print_r ausgeben lassen, Struktur anschauen - dann sollte es klar werden.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. Hallo,

          »» if(isset ($_POST['beitrag[03]'])) {
          Jein, nicht ganz.
          $_POST mittels print_r ausgeben lassen, Struktur anschauen - dann sollte es klar werden.

          und Vorsicht mit führenden Nullen! Sobald ein Ausdruck mit einer führenden Null als Zahl interpretiert werden soll, bedeutet das oktale Notation.
          Also:

          006 == 6
            007 == 7
            008  ungültig
            009  ungültig
            010 == 8
            011 == 9
              ...
            020 == 16
            077 == 63

          So long,
           Martin

          --
          Lieber arm dran als Arm ab.
          1. Hi Martin,

            ergaenzend:

            008  ungültig
              009  ungültig

            ist aber in PHP == 0. Eine ungueltige Ziffer und alles nachfolgende wird ignoriert, siehe Handbuch, erste "Warnung"-Box. Und zwar ohne Warning oder Notice - der Himmel weiss, warum...

            Viele Gruesse,
            der Bademeister

            1. Hallo,

              »»   008  ungültig
              »»   009  ungültig
              ist aber in PHP == 0. Eine ungueltige Ziffer und alles nachfolgende wird ignoriert, siehe Handbuch, erste "Warnung"-Box. Und zwar ohne Warning oder Notice - der Himmel weiss, warum...

              danke für diesen wertvollen Hinweis, das wusste ich selbst auch noch nicht. Ich hätte das als schwerwiegenden Fehler (wie ein Parse Error) eingestuft, der zum Abbruch des Scripts führen sollte.

              Ciao,
               Martin

              --
              Wenn alle das täten, wass sie mich können,
              käme ich gar nicht mehr zum Sitzen.
  3. Hallo Paul,

    entweder Du änderst das HTML-Formular wie von ChrisB vorgeschlagen. d.h. aus <input name="beispiel_01"
     ...> wird <input name="beispiel[]" ...> und aus <input name="beispiel_02" ...> wird ebenfalss <input name="beispiel[]" ...> usw.
    Dann kommen die Werte als array an und können mit einer Schleife durchlaufen werden:

    foreach($_POST['beispiel'] as $wert)  
    {  
       // tu was mit dem $wert  
    }
    

    oder Du läßt das Formular wie es ist und 'konstruierst' die abzufragen Variablen.
    Das geht aber nur, wenn es wirklich immer exakt die gleiche Anzahl Variablen sind (hier 10). Man könnte auch beliebig viele Variblennamen erstellen und die Schleife dann abbrechen, sobald eine Varible nicht mehr existiert.
    Vorausgesetzt, das erste Form-Feld heisst 'beispiel_01', das letzte '..._10':

    for($i=1;$<=10;$i++)  
    {  
       $z = $i > 9 ? '0' . $i : $i;  
       $varname = 'beispiel_' . $z;  
       $wert = $_POST[$$varname];  
       // tu was mit dem $wert  
    }  
    
    

    oder für unbekannt viele Formfelder beispiel_01 bis beispiel_xx

    $i=1;  
    do  
    {  
       $z = $i > 9 ? '0' . $i : $i;  
       $varname = 'beispiel_' . $z;  
       if(exist($_POST[$$varname])  
       {  
          $wert = $_POST[$$varname];  
          $wertExistiert = true;  
          $i++;  
          // tu was mit dem $wert  
       }  
    } while ($wertExistiert)
    

    Gruß vom foomaker

    --
    Ändere, was Du ändern kannst.
    Akzeptiere, was Du nicht ändern kannst.
    Lerne, das eine vom anderen zu unterscheiden.
    1. super, danke für die exakte beantwortung meiner frage:-))