Ankündigung

Einklappen
Keine Ankündigung bisher.

foreach und $_SESSION

Einklappen

Neue Werbung 2019

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

  • foreach und $_SESSION

    hallo leute,

    ich sitze gerade dabei ein formular zu schreiben.
    nun habe ich viele Felder zb.:
    Spieler1: Vorname1, Nachname1, Geb1, Vermerk1
    Spieler2: Vorname2, Nachname2, Geb2, Vermerk2
    Spieler3: Vorname3, Nachname3, Geb3, Vermerk3
    etc.

    nun möchte ich $_SESSION mit variablen(arrays) füllen,
    da ich aber sehr viele felder habe, möchte ich mir nun was ersparen
    in dem ich mit einer foreach-schleife die arrays auslese...

    Ich hoffe ihr könnt mir schnell helfen...

    Soweit bin ich bekommen:

    PHP-Code:
    [...]

    $
    1_20 = array("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20");
    $form_vars = array("vname","nname","vermerk");

    //foreach schleife?

    $_SESSION["$form_vars"] . ["$1_20"] = $_REQUEST["$form_vars"] . ["$1_20"];

    [...] 
    Was muss ich nun in die foreach-schleife hineinschreiben damit alle variablen abgearbeitet werden, also vname1 - 20, nname1 - 20 etc.

    mfg
    Christian

  • #2
    Meinst Du so etwas?:
    PHP-Code:
    [...]
    $
    1_20 = array("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20");
    $form_vars = array("vname","nname","vermerk");
    [...]
    foreach(
    $form_vars as $form_var){
        foreach($
    1_20 as $entry){
            
    $_SESSION[$form_var][$entry] = $_REQUEST[$form_var][$entry];
        }
    }
    [...] 
    Allerdings weiss ich jetzt nicht, welchen Ansatz Du verfolgst.
    Möglicherweise kann man das ganze auch viel eleganter und einfacher lösen.

    Viel Glück und Erfolg mit Deinem Projekt!
    Mit freundlichen Grüßen
    Innocentus

    Kommentar


    • #3
      hallo,

      vielen dank für die hilfe,
      leider funktioniert es auch nicht.

      Es dreht sich um folgendes Formular:


      wenn ich mit var_dump($_SESSION); die Session nach abschicken
      des Formulares prüfe, kommen leider diese daten nicht an.

      Wenn ich aber mit
      $_SESSION["mannschaftsname"] = $_REQUEST["mannschaftsname"];
      nur ein feld nehme, klappt es.

      ich möchte aber nicht für jedes feld so einen befehl benutzen.
      Es muss doch irgendwie möglich sein, eine kurzform zubekommen...

      Kommentar


      • #4
        Das erste Problem scheint dein Formular zu sein. Mach mal einfach nach dem Abschicken ein
        PHP-Code:
        var_dump($_POST); 

        Kommentar


        • #5
          Es kommt nur diese ausgabe:
          array(0) { }

          da ich eigentlich alles mit den Sessions machen wollte,
          aber wahrscheinlich ist dies nicht nötig.

          Kommentar


          • #6
            Zitat von sentenced Beitrag anzeigen
            Es kommt nur diese ausgabe:
            array(0) { }

            da ich eigentlich alles mit den Sessions machen wollte,
            aber wahrscheinlich ist dies nicht nötig.
            Das heisst, du übergibst überhaupt nichts. Damit können natürlich auch keine Session-Variablen gefüllt werden.

            Kommentar


            • #7
              ich es mal nun vor dem abschicken, die 1. felder ausgefüllt und nun kommt folgendes:

              PHP-Code:
              array(83) { ["mannschaftsname"]=>  string(9"fghfgh000" ["orgnr"]=>  string(6"000120" ["nname1"]=>  string(6"fghfgh" ["vname1"]=>  string(6"fghfgh" ["geb1"]=>  string(6)
              "sdfsdf" ["vermerk1"]=>  string(6"sdfsdf" ["nname2"]=>  string(0"" ["vname2"]=>  string(0"" ["geb3"]=>  string(0"" ["vermerk2"]=>  string(0"" ["nname3"]=>  string(0"" ["vname3"]=>  string(0"" ["vermerk3"]=>  string(0"" ["nname4"]=>  string(0""
              ["vname4"]=>  string(0"" ["geb4"]=>  string(0"" ["vermerk4"]=>  string(0"" ["nname5"]=>  string(0"" ["vname5"]=>  string(0"" ["geb5"]=>  string(0"" ["vermerk5"]=>  string(0"" ["nname6"]=>  string(0"" ["vname6"]=>  string(0"" ["geb6"]=>  string(0"" ["vermerk6"]=>  string(0"" ["nname7"]=>  string(0"" ["vname7"]=>  string(0"" ["geb7"]=>  string(0""
              ["vermerk7"]=>  string(0"" ["nname8"]=>  string(0"" ["vname8"]=>  string(0"" ["geb8"]=>  string(0"" ["vermerk8"]=>  string(0"" ["nname9"]=>  string(0"" ["vname9"]=>  string(0"" ["geb9"]=>  string(0"" ["vermerk9"]=>  string(0"" ["nname10"]=>  string(0""
              ["vname10"]=>  string(0"" ["geb10"]=>  string(0"" ["vermerk10"]=>  string(0"" ["nname11"]=>  string(0"" ["vname11"]=>  string(0"" ["geb11"]=>  string(0"" ["vermerk11"]=>  string(0"" ["nname12"]=>  string(0"" ["vname12"]=>  string(0""
              ["geb12"]=>  string(0"" ["vermerk12"]=>  string(0"" ["nname13"]=>  string(0"" ["vname13"]=>  string(0"" ["geb13"]=>  string(0"" ["vermerk13"]=>  string(0""
              ["nname14"]=>  string(0"" ["vname14"]=>  string(0"" ["geb14"]=>  string(0"" ["vermerk14"]=>  string(0"" ["nname15"]=>  string(0"" ["vname15"]=>  string(0""
              ["geb15"]=>  string(0"" ["vermerk15"]=>  string(0"" ["nname16"]=>  string(0"" ["vname16"]=>  string(0"" ["geb16"]=>  string(0"" ["vermerk16"]=>  string(0"" ["nname17"]=>  string(0"" ["vname17"]=>  string(0"" ["geb17"]=>  string(0"" ["vermerk17"]=>  string(0"" ["nname18"]=>  string(0"" ["vname18"]=>  string(0"" ["geb18"]=>  string(0"" ["vermerk18"]=>  string(0"" ["nname19"]=>  string(0"" ["vname19"]=>  string(0"" ["geb19"]=>  string(0"" ["vermerk19"]=>  string(0""
              ["nname20"]=>  string(0"" ["vname20"]=>  string(0"" ["geb20"]=>  string(0""
              ["vermerk20"]=>  string(0"" ["do"]=>  string(5"check" ["senden"]=>  string(6"Senden" 

              Kommentar


              • #8
                Dann höre als erstes mal auf, die Felder im Formular durchzunummerieren und benutze Arrays. Also nicht vermerk15, sondern vermerk[], oder falls nötig (was ich nicht vermute) vermerk[15]. Da kannst du dann auch gleich dein Formular dynamisch erstellen:
                PHP-Code:
                ...
                for (
                $i 1;$i <= 20;$i ++){
                    echo 
                "<tr>

                            <td><input name='nachname[
                $i]' /></td>
                            <td><input name='vorname[
                $i]' /></td>
                            <td><input name='gebdatum[
                $i]' /></td>
                            <td><input name='vermerk[
                $i]' /></td>
                        </tr>"
                ;
                }
                ... 
                und schon ist der grosse Teil des Formulars erstellt und es wird auch wirklich ein Array (bzw. mehrere) übergeben.

                Kommentar


                • #9
                  Es ist einfacher, wenn Du die Felder so benennst, dass PHP gleich entsprechende Felder daraus zusammenbaut.
                  name="Spieler[1][Vorname]"
                  name="Spieler[1][Nachname]"
                  name="Spieler[1][Geb]"
                  name="Spieler[2][Vorname]"
                  name="Spieler[2][Nachname]"
                  name="Spieler[2][Geb]"
                  usw usw...
                  Dann kannst Du zum Beispiel [man]is_array[/man], [man]array_intersect_key[/man] und/oder [man]array_keys[/man] dazu verwenden, dass man Deinem Skript keinen (allzu großen) Schrott unterjubelt und alle Werte in einem Rutsch in _SESSION speichern.
                  PHP-Code:
                  <?php
                  $fields 
                  = array(
                    
                  'Vorname'=>'string(2,128)',
                    
                  'Nachname'=>'string(2,128)',
                    
                  'Geb'=>'Date',
                    
                  'Vermerk'=>'string(0,255)'
                  );
                  session_start();
                  ?>
                  <html>
                    <head><title>...</title></head>
                    <body>
                      
                      <p class="verarbeitung">
                        <?php
                        
                  if ( isset($_POST['Spieler']) && is_array($_POST['Spieler']) ) {
                          foreach( 
                  $_POST['Spieler'] as $index=>$values ) {
                            if ( !
                  is_array($values) ) {
                              echo 
                  'Fehlerhaftes Format.'; exit;
                            }
                            else if ( 
                  count($values array_intersect_key($values$fields)) !== count($fields) ) {
                              echo 
                  'Fehlerhaftes Format.'; exit;
                            }
                            
                  // <-- hier noch weitere Tests. Felder ausgefüllt. Index gültig usw usw
                            
                  else {
                              
                  $_SESSION['spieler'][$index] = $values;
                            }
                          }
                        }
                        
                        echo 
                  '<pre>Debug: 'var_dump($_SESSION); echo '</pre>';
                        
                  ?>
                      </p>
                      
                      <form class="eingabe" method="post" action="?">
                        <div>
                          <?php
                          
                  for ($i=0$i<20$i++) {
                            foreach(
                  $fields as $name=>$foo) {
                              echo 
                  '        <input type="text" name="Spieler[',$i,'][',$name,']" />';
                            }
                            echo 
                  "<br />\n";
                          }
                          
                  ?>
                          <input type="submit" />
                        </div>
                      </form>
                    </body>
                  </html>

                  Kommentar


                  • #10
                    vielen Dank für eure Hilfe,

                    nun bin ich schon so weit, dass
                    ich via POST einzelne variablen auslesen kann und per
                    mail an eine adresse schicken kann.

                    nun habe ich das problem, dass ich nun alle Felder
                    von:

                    PHP-Code:
                    for ($i 1$i <21;$i ++)
                        {
                        echo 
                    "<tr>
                                <td>
                    $i</td>
                                <td><input name='nachname[
                    $i]' /></td>
                                <td><input name='vorname[
                    $i]' /></td>
                                <td><input name='gebdatum[
                    $i]' /></td>
                                <td><input name='vermerk[
                    $i]' /></td>
                            </tr>"
                    ;
                        } 
                    so einfach wie möglich auslesen möchte und sie
                    formatiert auch per mail verschicken möchte.

                    Dies klappt aber leider z.b. nur bei einzelnen variablen
                    PHP-Code:
                    $_POST["absvorname"
                    Muss ich bei so vielen Felder dies einzeln machen?
                    Das dies z.b. nicht funktioniert...
                    PHP-Code:
                    $_POST["nachname[$i]"
                    ich hoffe ihr versteht mich (ist schon nen bissl spät )

                    Kommentar


                    • #11
                      $_POST['nachname'] wird dadaurch automatisch zu einem Array, also kannst du das per foreach durchlaufen. Es heisst nicht $_POST["nachname[$i]"], sondern $_POST['nachname'][$i]

                      Kommentar


                      • #12
                        Zitat von sentenced Beitrag anzeigen
                        Das dies z.b. nicht funktioniert...
                        PHP-Code:
                        $_POST["nachname[$i]"
                        Was ist $_POST['nachname']
                        Richtig, ein Array!
                        Wie werden Array-Elemente angesprochen
                        Mit $arrayname['index'], im konkreten Fall also $_POST["nachname"][$i]

                        Kommentar


                        • #13
                          schonmal vielen dank für die hilfe,
                          aber ich bekomm das leider nicht mit der dem $_POST
                          und der foreach schleife hin.

                          Hier mein codeauszug, dieser soll via mail versendet werden:
                          PHP-Code:
                          $send '
                                  <html>
                                  <head>
                                  <title>Test</title>
                                  </head>
                                  <body>
                                  Vorname des Absenders: '
                          .$_POST['absvorname'].'
                                  <br />Nachname des Absenders: '
                          .$_POST['absnachname'].'
                                  <br />Telefonnummer: '
                          .$_POST['abstel'].'
                                  <br />E-Mail Adresse: '
                          .$_POST['absemail'].'
                                  <br />
                                  <br />
                                  Mannschaftsnamen '
                          .$_POST['mannschaftsname'].'
                                  <br />
                                  DHB Org.-Nr: '
                          .$_POST['orgnr'].'
                                  <br />
                                  <table>
                                      <tr>
                                          <td><b>Nr.:</b></td>
                                          <td><b>Nachname:</b></td>
                                          <td><b>Vorname:</b></td>
                                          <td><b>Geburtsdatum</b></td>
                                          <td><b>Vermerk</b></td>
                                      </tr>
                                      <tr>
                          // AB HIER HABE ICH DAS PROBLEM
                                          <td>$i</td>
                                          <td>'
                          foreach($_POST['nachname'] as $key => $value
                                              {
                                              echo 
                          $key " => " $value;
                                              }
                          [...] 

                          Kommentar


                          • #14
                            Och das ja nen Ding

                            Kommentar


                            • #15
                              Was hat das jetzt für einen Zusammenhang mit dem Rest?

                              Kommentar

                              Lädt...
                              X