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:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hi |

Bitte mehr und genauere Infos.

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

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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:
<?php
include(&#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 »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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 »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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... :)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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  ::)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Na das freut uns doch! :D

Gern geschehen ;)

greez 8)
JoSsiF


« Farben in V`BABefehle »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

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) ...