Formulareingabe mit Stringbearbeitung

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

  • Formulareingabe mit Stringbearbeitung

    Hallo,

    als PHP-Neuling stehe ich vor folgendem Problem:

    Der User soll in einem Eingabefeld einen numerischen Wert eingeben. Dieser Wert soll dann durch das Programm aufbereitet werden und dann als Parameter in einen String eingebaut werden, um eine neue PHP-Seite mit mehreren Parametern aufzurufen.

    In allgemeiner Form sieht mein Code momentan so aus (um das Beispiel möglichst kurz zu halten, habe ich mal alles für das Problem unwichtige rausgeworfen):

    <?php

    function suche1($record)
    {
    $var1 = "123";
    $var2 = "abc";

    $record = trim($record);
    $record = $record - 1;
    $id = $record;
    print "test1.php?id=$id&var1=$var1&var2=$var2\";
    }

    ?>

    <form name="form1" action="<?php suche1($record)?>" method="get">
    <table>
    <tr>
    <td><input type="text" name="record"></td>
    </tr>
    </table>
    </form>


    Wenn die Formular-Eingabe z.B. " 25" (mit führendem Blank) lautet, soll eigentlich eine neue Seite mit der URL "test1.php?id=24&var1=123&var2=abc" aufgerufen werden.

    Stattdessen generiert PHP immer nur eine URL "test1.php?record=25".
    Der eingegebene Wert wird also zwar korrekt erkannt, aber alle Versuche den Wert zu manipulieren und eine eigene URL zu bilden, schlagen bei mir fehl.

    Was mache ich falsch?

    Für Eure Hilfe schon mal besten Dank.

  • #2
    mach mal aus dem print am Ende von suche1() ein return.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Die Version mit return statt print hatte ich zuvor auch schon getestet (und jetzt aufgrund Deiner Antwort nochmals in versch. Varianten).
      Mit return funktioniert bei mir leider noch weniger.

      Während mit print zumindest die gewollte Seite (test1.php) aufgerufen wird (wenn auch mit falschen bzw. nicht veränderten Variablen/Parametern), so wird bei return noch nicht mal die richtige Seite aufgerufen, sondern wieder nur die aufrufende Seite (also der gleiche Effekt wie $PHP_SELF).

      Nachvollziehen kann ich das irgendwie nicht mehr so richtig! Oder stimmt die Syntax bei mir vielleicht irgendwo nicht?

      Kommentar


      • #4
        wie kommst du überhaupt...

        wie kommste überhaupt auf die Idee, eine PHP-Funktion als HTML-Funktion zu benutzen?

        Kommentar


        • #5
          Hallo 20thcentury,

          Deine Frage versteh ich nicht so ganz. Was meinst Du mit "HTML-Funktion" ? Ich kenn höchstens JavaScript-Funktionen.
          Sollte ich da in der Syntax irgendwas durcheinander bekommen haben?

          Oder andersrum gefragt: Wo meinst Du denn, liegt konkret der Fehler bei mir?
          Vielleicht sehe ich ja auch den Wald vor lauter Bäumen nicht mehr...

          Klär mich doch bitte mal auf. ;-)

          Stef@n

          Kommentar


          • #6
            oh ich seh gerade ... da steht ja gar kein echo
            Und das Backslash vor dem abschließenden " in der Funktion muß weg.

            Die eigentliche Fehlerursache habe ich aber auch gefunden: Als Action darfst du nur den reinen Skriptnamen angeben; alle Parameter die du durchschicken, aber vom User nicht angeben lassen willst, mußt du in versteckte Formularfelder packen:

            Schau dir mal das hier an, das sollte funktionieren:
            Code:
            <?php 
            
            function suche1($record) 
            { 
              $var1 = "123"; 
              $var2 = "abc"; 
            
              $record = trim($record); 
              $record = $record - 1; 
              $id = $record;
              echo '<input type="hidden" name="id" value="'.$id.'">
                <input type="hidden" name="var1" value="'.$var1.'">
                <input type="hidden" name="var2" value="'.$var2.'">
            ';
             } 
            
            ?> 
            
            <table><form name="form1" action="test1.php"method="get">
            <?php suche1($record); ?>
               <tr>
                <td><input type="text" name="record"></td> 
              </tr>
            </form></table>
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              oh ich seh gerade ... da steht ja gar kein echo
              Und das Backslash vor dem abschließenden " in der Funktion muß weg.

              Die eigentliche Fehlerursache habe ich aber auch gefunden: Als Action darfst du nur den reinen Skriptnamen angeben; alle Parameter die du durchschicken, aber vom User nicht angeben lassen willst, mußt du in versteckte Formularfelder packen:

              Schau dir mal das hier an, so funktioniert das:
              Code:
              <?php 
              
              function suche1($record) 
              { 
                $var1 = "123"; 
                $var2 = "abc"; 
              
                $record = trim($record); 
                $record = $record - 1; 
                $id = $record;
                echo '<input type="hidden" name="id" value="'.$id.'">
                  <input type="hidden" name="var1" value="'.$var1.'">
                  <input type="hidden" name="var2" value="'.$var2.'">
              ';
               } 
              
              ?> 
              
              <table><form name="form1" action="test1.php"method="get">
              <?php suche1($record); ?>
                 <tr>
                  <td><input type="text" name="record"></td> 
                </tr>
              </form></table>
              mein Sport: mein Frühstück: meine Arbeit:

              Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

              Kommentar


              • #8
                Hallo Titus,

                ich habe Deine Lösung getestet und bin dabei leider noch auf ein Problem gestossen.
                Wenn ich Deinen Code so übernehme und in das Formularfeld dann z.B. "8" eingebe, erhalte ich folgende URL zurück:
                test1.php?id=-1&var1=123&var2=abc&record=8

                Das Problem scheint zu sein, daß PHP zusätzlich zu den hidden-Feldern auch noch das Eingabefeld als Parameter zurückliefert. Bei 3 hidden-Feldern erstellt PHP also eine URL mit 4 Parametern!
                Wenn ich jetzt z.B. das hidden-Feld "id" weglasse, stimmt zwar die Anzahl der Parameter wieder, aber der Inhalt des Eingabefeldes ($record) läßt sich trotzdem nicht manipulieren, so daß ein falscher Wert an die URL übergeben wird. Der Inhalt von $record scheint in der Funktion gar nicht anzukommen (sonst müßte $id ja "7" sein).

                Auch wenn ich das 1. hidden-Feld von "id" nach "record" umbenenne, funktioniert das Ganze nicht. In der URL steht dann als 1. Parameter lediglich "record" statt "id". Alles andere bleibt identisch, so daß der Parameter "record" 2 mal existiert (und beide mit falschen Werten!).

                Die Frage wäre also wohl, wie kann man verhindern daß das Eingabefeld zusätzlich als Parameter übergeben wird und wie bekomme ich einen manipulierten Eingabewert in die URL?

                Fällt Dir dazu eine Lösung ein?

                Gruß
                Stef@n
                Zuletzt geändert von stef@n; 20.03.2002, 02:22.

                Kommentar


                • #9
                  -&gt; stef@n

                  also, du bringt da bei "action" in dem Form-Tag eine PHP-Funktion rein, das geht nicht!

                  oder sehe ich jetzt vor lauter Wälder die Bäume nicht?

                  Kommentar


                  • #10
                    @ 20thcentury

                    Ich habe in einem PHP-Buch die Konstruktion
                    <form action="<?php print $PHP_SELF ?>" method="post">
                    gefunden. Und wenn ich im action-Tag ein print ausgeben kann, warum dann nicht auch eine Funktion, oder?
                    So ganz sicher bin ich mir da allerdings nicht...

                    Im Moment nähere ich mich ja aber ohnehin eher der Lösung von Titus an (siehe oben), und da ist es ja sowieso anders gelöst.
                    Mal sehen...

                    Kommentar


                    • #11
                      -&gt;Stef@n

                      hmm...

                      nein,

                      $PHP_SELF ist eine Variable

                      wenn du aber eine Funktion aus PHP einsetzt, wird diese Nur auf dem Server ausgeführt, und verschwindet dann m HTMLuelltext (soweit keine Vairablen Ausgegeben werden).

                      Kommentar

                      Lädt...
                      X