Array aus Formular

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

  • Array aus Formular

    hallo,

    habe ein kleines problem und hoffe, dass ich hier bei den profis hilfe bekomme.

    ich habe folgende datei update.php
    Code:
    <form method="post" action="update.php">
    <table align="left">
    	<tr>
         <td>Admins:</td>
         <td><input type="text" size="1" name="admin1" value="1" />
    	     <input type="text" size="1" name="admin2" value="4" /></td>
    	 <td>(default=1,4)</td>
        </tr>
        <tr>
         <td>Mods:</td>
         <td><input type="text" size="1" name="mod1" value="1" />
    	     <input type="text" size="1" name="mod2" value="4" /></td>
    	 <td>(default=1,4)</td>
        </tr>
        <tr>
         <td>User:</td>
         <td><input type="text" size="1" name="user" value="4" /></td>
    	 <td>(default=4)</td>
        </tr>
    	</table>
    	<input type="hidden" name="action" value="proceed" />
        <input type="hidden" name="step" value="users" />
        <p align="center"><input type="submit" value="Weiter" /> <input type="reset" value="Reset" /></p>
    </form>
    
    if($_REQUEST['action']=="proceed"){
    	$arrayadmin=array($_REQUEST['admin1'], $_REQUEST['admin2']);
    	$arraymod=array($_REQUEST['mod1'], $_REQUEST['mod2']);
    	$arrayuser=array($_REQUEST['user']);
    	
    	if($_REQUEST['step']=="users"){
    aus den eingabefeldern will ich folgende arrays bilden
    $arrayadmin=array(1,4)
    $arraymod=array(1,4)
    $arrayuser=array(4)

    die arrays werden weiter unten mehrfach benötigt und das scipt wird einige male mit "update.php?action=proceed" aufgerufen. Also muss das array auch dann wieder z.b. so aussehen $arrayadmin=array(1,4).
    ich bekomme aber immer folgende Fehlermeldung:
    Passed variable is not an array or object

    bin jetzt schon viele stunden(tage) am probieren und lesen, hab aber weder was hilfreiches gefunden noch eine lösung gefunden. hoffe hier im forum kann mir jemand eine lösung anbieten.
    Byte BR Ripper

  • #2
    Re: Array aus Formular

    Wenn du deine Inputs so benennst
    Code:
    <input type="text" size="1" name="admin[]" value="1" />
    <input type="text" size="1" name="admin[]" value="4" />
    dann steht dir im Script $_REQUEST['admin'] = array(1, 4) zur Verfügung.

    Kommentar


    • #3
      bekomme aber immer noch diese fehlermeldungen

      Code:
      Warning: reset() [function.reset]: Passed variable is not an array or object in F:\WWW\update.php on line 248
      
      Warning: Variable passed to each() is not an array or object in F:\WWW\update.php on line 249
      
      Warning: sort() expects parameter 1 to be array, string given in F:\WWW\update.php on line 250
      
      Warning: implode() [function.implode]: Bad arguments. in F:\WWW\update.php on line 251
      das dritte array, bei dem nur ein wert übergeben wird verursacht diesen fehler. ob die anderen arrays so funktionieren, kann ich nicht sagen, da das script gar nicht soweit läuft.

      irgend eine idee, wie ich das hinbekomme?
      Zuletzt geändert von ByteRipper; 12.02.2006, 12:13.
      Byte BR Ripper

      Kommentar


      • #4
        Ich habe keine Ahnung, wie du die Formulardaten verarbeitest. Ich habe keine Ahnung, wie dein Formular zur Zeit aussieht. Ich kenne gar nichts, außer den Fehlermeldungen.

        Die sagen "passed variable is not an array", es ist kein Array. Wie man Arrays macht, hab ich dir oben bereits gesagt - was willst du jetzt noch wissen?

        Kommentar


        • #5
          wie ich meine formulardaten verarbeite und wie das formular aussieht steht in meinem ersten post.

          die namen der inputs habe ich wie in deinem post geändert. allein diese änderung hat jedoch nicht zum erfolg geführt. daher ist meine frage, warum es immer noch zur fehlermeldung kommt.

          vieleicht währe auch interessant, wie ich überprüfen kann, was wirklich in dem array steht, das von dem formular erzeugt wird.
          Byte BR Ripper

          Kommentar


          • #6
            Bau mal ganz zu Beginn deines Scripts folgende Zeile ein:
            PHP-Code:
            echo '<pre>'print_r($_POST); echo '</pre>'

            Kommentar


            • #7
              dann wird

              Array ( )

              ausgegeben. heist das, dass nichts im array steht?
              Byte BR Ripper

              Kommentar


              • #8
                Korrekt. Dein Formular hat nichts übertragen.

                Kommentar


                • #9
                  die arrays werden alle vom formular übergeben.
                  Code:
                  Array
                  (
                      [admin] => Array
                          (
                              [0] => 1
                              [1] => 4
                          )
                  
                      [mod] => Array
                          (
                              [0] => 1
                              [1] => 4
                          )
                  
                      [user] => Array
                          (
                              [0] => 4
                          )
                  )
                  da die arrays aber erst im zweiten durchgang benötigt werden, das heist, nach erneutem aufruf von update.php?action=proceed&step=users&admin=$admin.....usw, werden sie im link übergeben. alle anderen variablen aus dem link sind vorhanden. die arrays stehen aber leider beim zweiten durchgang nicht mehr zur verfügung bzw. sind wieder leer.
                  selbst wenn ich die zeilen:
                  $arrayadmin=$_REQUEST['admin'];
                  $arraymod=$_REQUEST['mod'];
                  $arrayuser=$_REQUEST['user'];
                  nochmals unter if($_REQUEST['step']=="users"){
                  einfügen bleibt das array dann leer und es kommen natürlich wieder die fehlermeldungen
                  Byte BR Ripper

                  Kommentar


                  • #10
                    Du kannst Arrays doch nicht einfach wie skalare Werte in den Querystring einbauen.

                    Üblicherweise schleift man Daten über mehrseitige Formulare, indem man sie auf jeder Seite wieder als hidden-Input ausgibt.

                    Eine Alternative dazu wäre, die Arrays serialisiert per GET zu übergeben.

                    Kommentar


                    • #11
                      ok,

                      und wie kann ich dann die arrays zusammen mit dem string wieder an update.php übergeben.

                      sorry für die viele fragerei, aber bin noch ziemlich neu in php und sehe die zusammenhänge nicht immer wirklich.
                      Byte BR Ripper

                      Kommentar


                      • #12
                        Original geschrieben von onemorenerd
                        Üblicherweise schleift man Daten über mehrseitige Formulare, indem man sie auf jeder Seite wieder als hidden-Input ausgibt.

                        Kommentar


                        • #13
                          ich habe aber im unteren teil kein formular mehr. es werden alle daten einer datenbank mit einem limit von 200 bearbeitet. wenn die ersten 200 abgearbeitet sind, wird update mit allen variablen im link nochmals aufgerufen und es werden die nächsten 200 bearbeitet.
                          mit input feldern kann ich das irgendwie nicht lösen, es sei denn man kann ein formular automatisch absenden.

                          wie das mit dem serialisiert funktioniert verstehe ich nicht so richtig, kann ich damit das array mit dem link übergeben?
                          Byte BR Ripper

                          Kommentar


                          • #14
                            PHP-Code:
                            $request '?foo';
                            if (isset(
                            $_POST['admin'])) {
                                
                            $request .= '&admin='.serialize($_POST['admin']);
                            } elseif (isset(
                            $_GET['admin'])) {
                                
                            $request .= '&admin='.$_GET['admin'];  // weiterreichen
                                
                            $admin unserialize($_GET['admin']); // zum Verarbeiten

                            Den serialisierten Array solltest du aber noch urlencoden bzw. -decoden.

                            Allerdings ist das insgesamt ein ziemliches Gehampel. Warum nicht einfach eine Session starten, alle Werte darin speichern und nur die SessionID übergeben? Genau zu diesem Zweck wurden Sessions doch erfunden.
                            Zuletzt geändert von onemorenerd; 12.02.2006, 16:29.

                            Kommentar


                            • #15
                              ich hab das mal mit session versucht. am anfang der datei natürlich
                              session_start();
                              PHP-Code:
                              if($_REQUEST['action']=="proceed"){
                                  
                              $_SESSION['admin']=$_REQUEST['admin'];
                                  
                              $_SESSION['mod']=$_REQUEST['mod'];
                                  
                              $_SESSION['user']=$_REQUEST['user'];
                                  
                                  if(
                              $_REQUEST['step']=="users"){ 
                              wenn jetzt update.php erneut aufgerufen wird, wird dann $_SESSION wieder umgeschrieben, da auch hier das array leer ist und ich die fehlermeldungen bekomme.

                              habe weiter unten im script folgende zeile
                              PHP-Code:
                              reset ($_SESSION['user']);
                              while (list (
                              $key$groupid) = each ($_SESSION['user'])) { $db->query("INSERT INTO test_usergroup (userid,groupid) VALUES ('".$userid."','".$groupid."')"); }
                              sort ($_SESSION['user']);
                              updateMemberships($userid$pbb_userdata['user_posts'], $pbb_userdata['user_gender'], implode(","$_SESSION['user'])); 
                              im link muss ich ja die $_SESSION nicht übergeben, oder?
                              bin langsam am verzweifeln, das ganze script hängt nur noch an den drei werten aus dem formular. alles andere funzt.
                              di
                              Byte BR Ripper

                              Kommentar

                              Lädt...
                              X