Forum
Tipps
News
Menu-Icon

Array Problem

hallo zusammen
hab folgendes problem:

Mein php file gibt schön alle werte als formular aus, das einer tabelle gleicht.

nummer - name - note - semester
1 - test - 6 - 1.sem
3 - modul - 5.5 - 1.sem

nun kann man die werte für note und semester per dropdown auswähl wählen.
am ende des formulars hat es dann einen speichern knopf, womit man alle änderungen von note und semester speichern kann.
ich hab versucht das ganze per array zu lösen und es dann über foreach auszugeben.
wenn ich das ganze im code vor dem submit button einbaue, wird alles richtig angezeigt, da es aber erst ausgegeben werden soll wenn gespeichert wurde, bringt mir das wenig. und sobald ich auf speichern klicke sind die arrays geleert und es zeigt mir ein foreach() fehler an.

hat irgendwer ne idee wie man das lösen könnte??
mfg tark


Antworten zu Array Problem:

Hi |

Bitte mehr und genauere Infos.

- Was steht im Array?
- Wo werden die Daten gespeichert?
- Quellcode wäre nützlich.

greez 8)
JoSsiF

Also im Array sollen die Eingaben (modulid, note, semester, datum) gespeichert werden, damit ich die dann ausserhalb des Formulars per UPDATE speichern kann.

Das Problem ist, dass ich es irgendwie nicht hinbekomme, das Array das in einer while schleife im formular geschrieben wird, nach dem klick auf speichern nichtmehr vorhanden ist...

Die Daten sollen schlussendlich in eine MySQL datenbank gespeichert werden.

Das ganze file:
<?phpinclude(&#39;./include.php&#39;);db_connect();$artid = $_GET["artid"]; //Übernimmt die Art-ID  //---------------------------------------------  // Überprüft per Session ob man angemeldet ist  //---------------------------------------------  if(!session_is_registered(&#39;benutzer&#39;) || $_SESSION[&#39;benutzer&#39;] == "")  {    echo &#39;<meta http-equiv="refresh" content="0; URL=$pfad/index.php">&#39;;  }  else  {    //------------------------------------    // Wenn speicher Button geklickt wird    //------------------------------------    if(isset($HTTP_POST_VARS[&#39;speichern&#39;]))    {      foreach ($notenverwaltung as $not)      {        echo "Modul: $not[modulid]<br>";        echo "Note: $not[note]<br>";        echo "Sem: $not[semester]<br>";        echo "Dat: $not[datum]<br>";      }    }    //---------------------------------------------------------    // Überprüft ob der Benutzer in der Gruppe Lehrleister ist    //---------------------------------------------------------    if($_SESSION[&#39;gruppe&#39;] == "Lehrmeister")    {      //---------------------------------------------      // DropDown Menu für die Auswahl des Lehrlings      //---------------------------------------------      ?>

      <form action="
<?php $PHP_SELF ?>
" method="post" target="">
        <table>
          <tr>
            <td>
              <div id="">Lehrling: </div>
            </td>
            <td>
              <select name="lehrling">
             
<?php                $result1 = @mysql_query("SELECT tbenutzer.benutzerid AS anzeigeid,                                                tbenutzer.name AS anzeigename                                         FROM tbenutzer                                         WHERE tbenutzer.gruppeidfs = 2");                /*--------------------------------------------------------------------------------------/                / DropDown für die Lehrlingsauswahl                                                     /                / Als Value wird die BenutzerID gespeichert, für die Auswahl ist aber der Lehrlingsname /                / sichtbar. Anhand der ID wird dann der richtige Lehrling ausgewählt                    /                /--------------------------------------------------------------------------------------*/                while($row1 = mysql_fetch_array($result1))                {                  echo &#39;<option value="&#39;.$row1["anzeigeid"].&#39;">&#39;.$row1["anzeigename"].&#39;</option>&#39;;                }              ?>

              </select>
            </td>
          </tr>
          <tr>
            <td>
              <input type="submit" name="anzeigen" value="anzeigen">
            </td>
          </tr>
        </table>
      </form>
     
<?php      //-------------------------------------------------------------------------------------      // Wurde ein Lehrling gewählt, seine ID speichern und Formular anzeigen, sonst Meldung      //-------------------------------------------------------------------------------------      if(isset($HTTP_POST_VARS[&#39;anzeigen&#39;]))      {        $benutzerid = $HTTP_POST_VARS[&#39;lehrling&#39;];      }      else      {        echo "Bitte einen Lehrling auswählen um seine Noten zu verwalten";      }    }    //-----------------------------------------------------------------------------------------------    // Wenn nicht "Gruppe = Lehrmeister", dann wird gleich die ID aus der Session gelesen und in eine    // Variable gespeichert    //-----------------------------------------------------------------------------------------------    else    {      $benutzerid = $_SESSION[&#39;benutzer&#39;];    }    /*--------------------------------------------------------------------------------------------------/    / Hat ein Lehrmeister einen Lehrling angewählt zum editieren oder greift ein Lehrling auf seine     /    / Verwaltung zu, wird das Formular angezeigt                                                        /    /--------------------------------------------------------------------------------------------------*/    if(isset($HTTP_POST_VARS[&#39;anzeigen&#39;]) || $_SESSION[&#39;gruppe&#39;] != "Lehrmeister")    {    $result_modul = @mysql_query("SELECT tmodul.modulid AS modulid, tmodul.nummer AS nummer,                                  tmodul.bezeichnung AS bezeichnung                                  FROM tmodul                                  WHERE tmodul.artidfs = $artid                                  ORDER BY tmodul.nummer");    $lehrling = @mysql_query("SELECT tbenutzer.name AS name                              FROM tbenutzer                              WHERE tbenutzer.benutzerid = $benutzerid");    $row_lehrling = mysql_fetch_array ($lehrling);    ?>

    <div id="">Lehrling:
<?php echo $row_lehrling["name"] ?>
</div>
    <form action="
<?php $PHP_SELF ?>
" method="post" target="">
      <table>
        <tr>
          <td>Modulnummer</td>
          <td>Modulbezeichnung</td>
          <td>Note</td>
          <td>Semester</td>
          <td>Datum</td>
        </tr>
       
<?php        //---------------------------------        // Fügt jedes vorhandene Modul ein        //---------------------------------        while($row_modul = mysql_fetch_array ($result_modul))        {        $modulid = $row_modul[&#39;modulid&#39;];        $result_note = @mysql_query("SELECT tnote.note AS note, tnote.semester AS semester,                                            tnote.datum AS datum                                     FROM tnote                                     WHERE tnote.modulidfs = $modulid                                     AND tnote.benutzeridfs = $benutzerid");        $row_note = mysql_fetch_array ($result_note);        ?>

        <tr>
          <td>
            <input type="Text" readonly name="nummer" value="
<?php echo $row_modul["nummer"] ?>
">
          </td>
          <td>
            <input type="Text" readonly name="bezeichnung" value="
<?php echo $row_modul["bezeichnung"] ?>
">
          </td>
          <td>
            <select name="note" size="">
              <option selected value="
<?php echo $row_note["note"] ?>
">
<?php echo $row_note["note"] ?>
</option>
             
<?php              notenarray();              ?>

            </select>
          </td>
          <td>
            <select name="semester" size="">
              <option selected value="
<?php echo $row_note["semester"] ?>
">
<?php echo $row_note["semester"] ?>
</option>
             
<?php              semesterarray();              ?>

            </select>
          </td>
          <td>
            <input type="Text" name="datum" value="
<?php echo $row_note["datum"] ?>
">
          </td>
        </tr>
       
<?php        $notenverwaltung = array();        $notenverwaltung[] = array(&#39;modulid&#39;=>$modulid, &#39;note&#39;=>$row_note["note"],                                   &#39;semester&#39;=>$row_note["semester"], &#39;datum&#39;=>$row_note["datum"] );        }        ?>

        <tr>
          <td>
            <input type="submit" name="speichern" value="Speichern">
            <a href="index.php?section=notenverwaltung&artid=
<?php echo urlencode($artid) ?>
">Zurück</a>
          </td>
        </tr>
      </table>
    </form>
   
<?php    }                                          }?>

« Letzte Änderung: 08.03.06, 13:38:30 von Tark »

Puhh...

Du solltest im Diskussionforum am Quiz teilnehmen, denn Rätsel aufgeben scheint eine deiner Stärken zu sein ;)

Also nachdem ich das Ding jetzt ma so einigermaßen durchgeackert hab, bin ich zu dem Schluss gekommen, dass es dir um das Array $notenverwaltung geht. Richtig soweit?

Das Speichern hast du sicher mit Absicht noch nicht integriert nehm ich an?

So, nun aber zum Problem:
Dass natürlich nach einem Klick auf "Speichern" das Array nicht mehr vorhanden ist, ist ja sonnenklar. Du übergibst es ja nirgends. Das Skript wird ja nach dem Abschicken des Formulars neu gestartet. Und was nicht mit auf den Weg gegeben wird, ist dann weg.

Ach ja: du initialisierst übrigens dein Array bei jedem Durchlauf der while-Schleife neu. Selbst wenn du es übergibst, wird es hinterher exakt ein Element enthalten.

Ohne jetzt bis ins Detail vorgedrungen zu sein, kommt mir dein Formular insgesamt etwas suspekt vor. Ich glaube nicht, dass das so funktioniert, da bin ich ehrlich ;)

Ich glaube, du hast da einen grundsätzlichen Denkfehler drin: die ganzen Datensätze werden nacheinander aufgelistet, und dann soll der User seine Änderungen machen können. Alle Daten sollen dann im Array stehen und im nächsten Skriptdurchlauf gespeichert werden. Soweit die Theorie (zumindest hab ich das so verstanden).

ABER: Wenn der User die Daten ändert, ist das Skript doch schon durchgelaufen! Mit anderen Worten: dein Array wird nie die Daten enthalten, die der User eingegeben hat!

Wenn du es geschafft hast, das Array zu übergeben (z.B. per Hidden Form Field) und dann speicherst, wirst du sehen, was ich meine.

greez 8)
JoSsiF

« Letzte Änderung: 08.03.06, 15:01:30 von JoSsiF »

hehe, hast schon recht ist ein sehr langer code geworden (hab in sogar noch gekürzt, hatte viele auskommentierte versuche)

du hast ganz recht es geht mir um das Array $notenverwaltung

Speichern hab ich noch nicht integriert, aber mit
if(isset($HTTP_POST_VARS['speichern']))
kommt man schonmal an die richtige stelle und wenn es mir da nicht die daten ausgeben kann die es sollte, weiss man ja schon das was nicht geht...
das mit dem "hidden" Input hab ich auch schon versucht aber irgendwie gings nicht so ganz  :'(

Zitat
Ich glaube, du hast da einen grundsätzlichen Denkfehler drin: die ganzen Datensätze werden nacheinander aufgelistet, und dann soll der User seine Änderungen machen können. Alle Daten sollen dann im Array stehen und im nächsten Skriptdurchlauf gespeichert werden. Soweit die Theorie (zumindest hab ich das so verstanden).

angezeigt wird soweit das richtig...

das problem ist einfach, dass es für diese Art problem oder array nichts gescheites im internet fand  :(
http://www.php-dummies.de/script/Tutorials/Erste%20Schritte/Arrays/Mehrdimensionale%20Arrays.html
so wie es in diesem beispiel beschrieben ist, ist es logisch aber auf mein problem angewand hatte ich so die probleme...

wie müsste etwa ein gescheites grundgerüst aussehen, damit das ganze mit dem array funktioniert?? oder einfach das man speichern kann?

Könntest du mal bitte einen Screenshot online stellen, damit man mal sieht, wie das Ganze aussieht? Kann's mir zwar vorstellen, aber nur zur Sicherheit... :)

Hier ein Link wie das ganze Aussieht  ;)

http://www.danzu.ch/files/speicherproblem.jpg

Die Noten/Semester/Datum Einträge die vorhanden sind wurden aus der Datenbank ausgelesen, da ich diese Testhalber manuell über phpmyadmin eingegeben hab.

OK, so hab ich mir das gedacht.

Ist eigentlich nicht schwer: du kannst für die Namen der input-Felder auch Arrays nehmen, und das bietet sich hier an. Und exakt diese liest du dann wieder aus.

Einfaches Beispiel:

<input type="text" name="test[0]"><br>
<input type="text" name="test[1]"><br>
<input type="text" name="test[2]"><br>
<input type="text" name="test[3]"><br>

Hier würde dann das Array "test" übergeben werden, was dann als $_POST['test'] zum Auslesen zur Verfügung steht.

Beides - also Formularerzeugung und Auslesen - kannst du bequem mit Schleifen regeln, so wie du das bisher auch getan hast.

Tipp noch: das Array $HTTP_POST_VARS[] solltest du nicht mehr verwenden, das ist veraltet. Der Ersatz heißt $_POST[] und ist in jedem Fall vorzuziehen ;)

greez 8)
JoSsiF

vielen dank für diesen tipp  ;)

werd ich später gleich mal austesten..

Zitat
Tipp noch: das Array $HTTP_POST_VARS[] solltest du nicht mehr verwenden, das ist veraltet. Der Ersatz heißt $_POST[] und ist in jedem Fall vorzuziehen

ah  8)
als ich anfing das $HTTP_POST_VARS[] zu benutzen hab ich gelesen, das sei gegenüber dem $_POST[] sicherer^^

werd ich wohl wieder rumswitchen
ist ja dank suchen/ersetzen ne kleine sache

meld mich wieder wenn ichs testen konnte  8)

habs so gemacht wie du mir gesagt hast und nun läufts halb richtig^^

es speichert was in das array und wenn ichs ausgebe gibts auch was aus, das problem ist nur, dass es nur den letzten datensatz ausgibt.

also wenn 3 module angezeigt werden gibts beim drücken auf speichern die daten vom 3. modul aus...

die input felder sehen bei mir nun so aus:

<input type="text" name="test[note]"><br>
<input type="text" name="test[semester]"><br>
<input type="text" name="test[datum]"><br>
<input type="text" name="test[modulid]"><br>

auslesen und gleich den array inhalt mach ich mit
$array = $_POST[test];
print_r ($array);

wie gesagt es ist auf gutem weg^^, aber langsam gehen mir die ideen aus  ::)

Hi Tark |

Du solltest das mit dem Bezeichner "test" nicht ganz so ernst nehmen, das war eben auch nur zum Test ;D

Was hälst du davon, wenn du das hier

<input type="text" name="test[note]"><br>
<input type="text" name="test[semester]"><br>
<input type="text" name="test[datum]"><br>
<input type="text" name="test[modulid]"><br>

umschreibst in

<input type="text" name="note[0]"><br>
<input type="text" name="semester[0]"><br>
<input type="text" name="datum[0]"><br>
<input type="text" name="modulid[0]"><br>

... und den Index (also hier grad mal 0) dynamisch erzeugen lässt, also bei jedem Schleifendurchlauf inkrementierst?

greez 8)
JoSsiF

habs nun endlich hingekriegt  ;D ;D ;D

hatte zwar nachdem ich das ganze mit dem array hatte noch einige probleme mit dem speichern, aber jetzt gehts ;)

vielen dank nochmals an JoSsiF  8)

Na das freut uns doch! :D

Gern geschehen ;)

greez 8)
JoSsiF


« Farben in V`BABefehle »
 

Fremdwörter? Erklärungen im Lexikon!
Datenbank
Eine Datenbank (DBS), im englischen database, ist eine strukturierte Datensammlung und fungiert wie ein "digitales Archiv". Datenbanken dienen der effizienten Aufbewahrun...

Datenkompression
Siehe komprimieren. ...

Datenrate
Die Datenrate, oft auch als Datenübertragungsrate oder Datentransferrate bezeichnet, gibt an, wie viele Daten in einer bestimmten Zeiteinheit (meistens pro Sekunde) ...