Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Mit $_POST eine Array übergeben, wie geht das?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Mit $_POST eine Array übergeben, wie geht das?

    Liebe Leute,

    da ich erst am Anfang meiner Programmierkünste stehe, weiß ich noch nicht einmal, ob ich den Betreff richtig formuliert habe. Ich versuche es nocheinmal zu beschreiben:

    In einem Dokument "Fragebogen.php" (1) möchte ich mehrere Fragen stellen, die ich mittels method="post" an das File "Auswertung.php" (2) übergeben möchte.

    Um mir Schreibarbeit zu ersparen, habe ich in (1) eine php-Schleife geschrieben, das ganze sieht so aus:

    PHP-Code:
    $Frage[1] = "1. Zeigt sich belastbar auch in anspruchsvollen Situationen";
    $Frage[2] = "2. Kann sich auch bei Widerstand durchsetzen ";
    $Frage[3] = "3. Gibt bei Misserfolgen nicht vorschnell auf";
    $Frage[4] = "4. Bleibt stets konstruktiv und sucht nach Lösungen bzw. Ergebnissen";
    $Frage[5] = "5. Ist Umsetzungsstark";



    for ($i=1; $i<=5;$i++)
    {

    ?>
    <form >
             <?php echo $Frage[$i?>
    <br />
    <input type="radio" name="Frage[$i]" value="1">trifft stark zu
    <input type="radio" name="Frage[$i]" value="2">trifft zu
    <input type="radio" name="Frage[$i]" value="3">trifft eher nicht zu
    <input type="radio" name="Frage[$i]" value="4">trifft gar nicht zu
    <input type="radio" name="Frage[$i]" value="5">kann nicht beurteilt werden
    <br />  <br />
    </form>


    <?php

    }

    ?>

    <!-- Absendebutton -->

    <form action="Auswertung.php" method="post">
             <input type="submit" value="Anworten Absenden"/>
             <input type="reset" value="Zurücksetzen"/>
    </form>
    Was ich partout nicht schaffe, ist, in file (2) hinzubekommen, ist die Antworten in einem Array $Antwort[] einzulesen mittels $_POST.

    Hier ist, was ich im Moment probiere (bekomme aber immer eine Fehleranzeige "undefined variable" und "undefined index"):

    PHP-Code:
    <?php

    $Antwort
    [1] = $_POST["$Frage"]["1"];
    echo 
    "$Antwort[1]";

    $Antwort[2] = $_POST["$Frage"]["2"];
    echo 
    "$Antwort[2]";

    (...)
    ?>
    Weiß jemand Rat? Ich würde mich sehr freuen!


  • #2
    Du kannst nicht 6 Forms erzeugen und alle mit einem Button absenden.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Du solltest übrigens auch auf explizite numerische Indizes verzichten, wenn sie (so wie hier) nicht unbedingt benötigt werden. Wenn man bei dir $Frage[1] rausnimmt, hat man entweder eine Lücke oder muss einen Haufen Code ändern. Wenn du $Frage[] verwendet, wird zählt PHP für dich automatisch. (Bei 0 beginnend, was übrigens auch empfehlenswert ist.)

      Kommentar


      • #4
        Zitat von TRAFOLINO Beitrag anzeigen
        In einem Dokument "Fragebogen.php" (1) möchte ich mehrere Fragen stellen, die ich mittels method="post" an das File "Auswertung.php" (2) übergeben möchte.
        Moin,

        Prinzipiell erstmal OK, wobei es u.U. mal Sinn macht genauer drüber nachzudenken warum diese Aufgabe 2 unterschiedliche Scripte nötig macht. Wenn das Formular nicht ausgefüllt wurde sondern einfach nur abgeschickt, dann must Du erst wieder nen Redirect nach Fragebogen.php machen damit Du das Formular anzeigen kannst. Aber das nur am Rande.

        Zitat von TRAFOLINO Beitrag anzeigen
        Um mir Schreibarbeit zu ersparen, habe ich in (1) eine php-Schleife geschrieben, das ganze sieht so aus:
        ALs Anfänger ist es nicht wirklich sinnvoll, schon der Verminderung der Schreibarbeit irgend eine Beachtung zu schenken. Konzentrier Dich aufs wesentliche!

        Zitat von TRAFOLINO Beitrag anzeigen
        PHP-Code:
        $Frage[1] = "1. Zeigt sich belastbar auch in anspruchsvollen Situationen";
        $Frage[2] = "2. Kann sich auch bei Widerstand durchsetzen ";
        $Frage[3] = "3. Gibt bei Misserfolgen nicht vorschnell auf";
        $Frage[4] = "4. Bleibt stets konstruktiv und sucht nach Lösungen bzw. Ergebnissen";
        $Frage[5] = "5. Ist Umsetzungsstark";

        for (
        $i=1$i<=5;$i++)
        {

        ?>
        <form > 
        Hier fangen Deine wirklichen Probleme an. Wie bereits von anderen angemerkt, Du verwendest für jede Frage ein eigenes Formular. Das willst Du eigentlich garnicht! Du willst eigentlich die Fragen alle in einem Formular drin haben. Also mit dem <form> bereits vor der Schleife beginnen und dem als action "Auswertung.php" und als method ="post" geben.

        Zitat von TRAFOLINO Beitrag anzeigen
        PHP-Code:
                 <?php echo $Frage[$i?>
        <br />
        <input type="radio" name="Frage[$i]" value="1">trifft stark zu
        Du bist hier nicht im PHP-Kontext, faktisch ist ein $i hier relativ sinnlos wenn Du es nicht von PHP verarbeiten läst.

        PHP-Code:
        <input type="radio" name="Frage[<?php echo $i?>]" value="1">trifft stark zu
        wär vorteilhaft. Das gilt natürlich auch für die restlichen radio inputs

        Zitat von TRAFOLINO Beitrag anzeigen
        PHP-Code:
        <input type="radio" name="Frage[$i]" value="2">trifft zu
        <input type="radio" name="Frage[$i]" value="3">trifft eher nicht zu
        <input type="radio" name="Frage[$i]" value="4">trifft gar nicht zu
        <input type="radio" name="Frage[$i]" value="5">kann nicht beurteilt werden
        </form
        </form> sollte natürlich nach der Schleife und vor allem natürlich auch nach der "Abschicken" Schaltfläche stehen!

        Zitat von TRAFOLINO Beitrag anzeigen
        PHP-Code:
        <form action="Auswertung.php" method="post">
                 <
        input type="submit" value="Anworten Absenden"/>
                 <
        input type="reset" value="Zurücksetzen"/>
        </
        form
        Du solltest Dir vorher vielleicht mal die Grundlagen zu dem von Dir genutzten Ausgabeformat HTML anlesen. Die Daten die Du schicken willst stehen allesamt in anderen Formularen.

        Gruß, Ulf
        PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

        Kommentar


        • #5
          Hallo zusammen,

          herzlichen Dank, insbesondere an Ulfikado, das ging ja sehr schnell! Ich werde mir alle Kommentare genau anschauen und möglichst umsetzen.

          Mein Skript sieht jetzt so aus:

          PHP-Code:
          <?php

          /* 1. Persönliche Kompetenzen (Umgang mit sich selbst)  inkl. unternehmerische Komp (Geschäft/Change)  */

          $Frage[1] = "1. Zeigt sich belastbar auch in anspruchsvollen Situationen";
          $Frage[2] = "2. Kann sich auch bei Widerstand durchsetzen ";
          $Frage[3] = "3. Gibt bei Misserfolgen nicht vorschnell auf";
          $Frage[4] = "4. Bleibt stets konstruktiv und sucht nach Lösungen bzw. Ergebnissen";
          $Frage[5] = "5. Ist Umsetzungsstark";


          /* -- Diese Schleife gibt alle Fragen im Feld aus */

          ?>
          <form action="Auswertung.php" method="post">

          <?php

          for ($i=1$i<=5;$i++)
          {
          echo 
          $Frage[$i]

          ?>

          <br />
          <input type="radio" name="Frage[<?php echo $i?>]" value="1">trifft stark zu
          <input type="radio" name="Frage[<?php echo $i?>]" value="2">trifft zu
          <input type="radio" name="Frage[<?php echo $i?>]" value="3">trifft eher nicht zu
          <input type="radio" name="Frage[<?php echo $i?>]" value="4">trifft gar nicht zu
          <input type="radio" name="Frage[<?php echo $i?>]" value="5">kann nicht beurteilt werden
          <br />  <br />

          <?php

          }

          ?>

          <!-- Absendebutton -->

                   <input type="submit" value="Anworten Absenden"/>
                   <input type="reset" value="Zurücksetzen"/>
          </form>
          Allerdings habe ich immer noch das Problem, dass ich es nicht schaffe, das Array $_POST richtig auszulesen. Irgendwas muss an der Datei Auswertung.php falsch sein:

          PHP-Code:
          <?php

          $Test
          [1] = $_POST["$Frage"]["1"];
          echo 
          "$Test[1]";

          $Test[2] = $_POST["$Frage"]["2"];
          echo 
          "$Test[2]";

          (...)

          ?>
          Könnt Ihr das auch noch aufklären? Wie schaffe ich es, dass in $Test[1]m $Test[2] usw. die Antworten auf $Frage[1], $Frage[2] usw. stehen. Ich vermute den Fehler in dieser Zeile:

          PHP-Code:
          $Test[1] = $_POST["$Frage"]["1"]; 
          und habe auch schon herumprobiert, aber ich komme nicht auf die Lösung. Es gibt jedes Mal die Fehlermeldung

          Notice: Undefined variable: Frage in C:\xampp\htdocs\projekt\Auswertung.php on line 8

          Notice: Undefined index: in C:\xampp\htdocs\projekt\Auswertung.php on line 8
          zu dieser Zeile (das ist bei mir line 8 ).

          Danke im voraus!
          Trafolino

          Kommentar


          • #6
            Statt
            PHP-Code:
            $Test[1] = $_POST["$Frage"]["1"]; 
            bitte einfach
            PHP-Code:
            $Test[1] = $_POST[$Frage]["1"]; 
            (und darüber nachdenken, was der Unterschied ist.)

            Kommentar


            • #7
              und habe auch schon herumprobiert, aber ich komme nicht auf die Lösung. Es gibt jedes Mal die Fehlermeldung
              Schon mal versucht ein print_r($_POST) oder ein var_dump($_POST) zu machen und schauen was in $_POST wirklich enthalten ist statt herumprobieren ?

              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


              • #8
                Hallo Monolith,

                danke für den Tip - ich überlege!

                Allerdings kommen beim Ausprobieren von

                PHP-Code:
                $Test[1] = $_POST[$Frage]["1"]; 
                immer noch Fehlermeldungen, jetzt sogar zwei:

                Notice: Undefined variable: Frage in C:\xampp\htdocs\projekt\Auswertung.php on line 8

                Notice: Undefined index: in C:\xampp\htdocs\projekt\Auswertung.php on line 8
                Es ist zum Verzweifeln.

                Muss ich im Auswertungsskript irgendwie die Variable $Frage definieren oder so?

                Gruß
                Trafolino

                Kommentar


                • #9
                  Zitat von monolith Beitrag anzeigen
                  Statt
                  PHP-Code:
                  $Test[1] = $_POST["$Frage"]["1"]; 
                  bitte einfach
                  PHP-Code:
                  $Test[1] = $_POST[$Frage]["1"]; 
                  (und darüber nachdenken, was der Unterschied ist.)
                  Statt
                  PHP-Code:
                  $Test[1] = $_POST[$Frage]["1"]; 
                  bitte einfach
                  PHP-Code:
                  $Test[1] = $_POST["Frage"][1]; 
                  Zitat von nikosch
                  Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                  Kommentar


                  • #10
                    und habe auch schon herumprobiert, aber ich komme nicht auf die Lösung.
                    Allerdings kommen beim Ausprobieren von
                    Nicht probieren, schau "hinein": print_r($_POST) oder auch var_dump($_POST) verrät/zeigt dir genau was im $_POST-Array vorhanden ist.
                    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


                    • #11
                      Zitat von monolith Beitrag anzeigen
                      Statt
                      PHP-Code:
                      $Test[1] = $_POST["$Frage"]["1"]; 
                      bitte einfach
                      PHP-Code:
                      $Test[1] = $_POST[$Frage]["1"]; 
                      (und darüber nachdenken, was der Unterschied ist.)
                      Mal abgesehen davon, daß die double Quotes überflüssing sind,
                      sehe ich keinen relevanten Unterschied. Beide Ausdrücke greifen auf das selbe Element zu.
                      Anders wäre es, wenn der erste Ausdruck single Quotes ('$Frage') nutzen würde.
                      Single Quotes und double Quotes sind für numerische Indizes ebenfalls überflüssig.

                      Edit: Hab den Beitrag von tkausl #9 schlichtweg übersehen, sorry.
                      PHP-Klassen auf github

                      Kommentar


                      • #12
                        Auswertung.php mal so
                        PHP-Code:

                            
                        echo '<pre>';
                            
                        print_r($_POST);
                            echo 
                        '</pre>'
                        Zitat von Tropi Beitrag anzeigen
                        Du solltest übrigens auch auf explizite numerische Indizes verzichten, wenn sie (so wie hier) nicht unbedingt benötigt werden. Wenn man bei dir $Frage[1] rausnimmt, hat man entweder eine Lücke oder muss einen Haufen Code ändern. Wenn du $Frage[] verwendet, wird zählt PHP für dich automatisch. (Bei 0 beginnend, was übrigens auch empfehlenswert ist.)
                        Stimmt, entsprechend müsstest du die Schleife für dein Formular dann auch noch ändern.
                        PHP-Code:
                        for ($i 0$i count($Frage); $i++) 
                        gruss sys

                        Kommentar


                        • #13
                          Zitat von jspit Beitrag anzeigen
                          Mal abgesehen davon, daß die double Quotes überflüssing sind,
                          sehe ich keinen relevanten Unterschied
                          Um mehr ging's auch nicht. Sieht man leider häufig, dass Variablen beim Arrayzugriff in "..." verpackt werden.

                          Kommentar


                          • #14
                            Danke an alle für die Kommentare. Wir kommen der Sache näher.

                            1. tklausl (und jspit) haben folgendes vorgeschlagen:
                            PHP-Code:
                            $Test[1] = $_POST[Frage][1]; 
                            und das hat auch funktioniert, allerdings OHNE die Anführungszeichen bei $_POST[Frage][1].

                            Weiß einer, warum das so ist? Wenn ich die Anführungszeichen drin lasse gibt es den gleichen Fehler wie in meinem letzten Post zitiert.

                            2. Das die Lösung funktioniert, beweist print_r, danke an sysop und hausl für den Tip dafür:

                            PHP-Code:
                             print_r($_POST); 
                            beweist, dass das Array so gefüllt ist, wie ich das Formular ausgefüllt habe, bei mir sah das so aus:
                            Array
                            (
                            [Frage] => Array
                            (
                            [1] => 1
                            [2] => 5
                            [3] => 3
                            [4] => 4
                            [5] => 5
                            )

                            )
                            3. Trotz allem, erscheint jetzt

                            aufgrund der Zeile
                            PHP-Code:
                            $Test[1] = $_POST[Frage][1]; 
                            folgender Fehler:
                            Notice: Use of undefined constant Frage - assumed 'Frage' in C:\xampp\htdocs\projekt\Auswertung.php on line 13
                            Damit will er wohl sagen, dass Frage eine Konstante ist und nicht definiert wurde. Hat das irgendeine Bedeutung? Denn das $Test[1] scheint ja gefüllt zu sein.

                            Ich würde jetzt in einem nächsten Schritt versuchen, $Test[] in eine Datenbank zu schreiben.

                            Danke Euch allen für die Aufklärung soweit!!!!!!!

                            Kommentar


                            • #15
                              Weil die Quotes fehlen!

                              Zitat von tkausl Beitrag anzeigen
                              bitte einfach
                              PHP-Code:
                              $Test[1] = $_POST["Frage"][1]; 
                              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