PHP: Zeilen index weitergeben



  • Hi,

    ich möchte das PHP mir eine Datenbank ausließt und diese Werte dann in einer HTML tabelle ausgiebt. Danach soll in der entsprechenden Zeile ein Knopf existieren der beim betätigen den wert der Position weiter gibt.
    Bei mir geht das zwar aber es wird immer nur der allerletze wert der tabelle übergeben nicht der welcher hinter dem knopf stehen sollte. Was daran liegt, das die variable pro schleifendurchlauf überschreiben wird.

    Ich hab zwar einen Arry der die ganzen zeilen indexe speichert aber irgendwei noch keine idee wie man das am besten weitergibt...

    hier mal die betreffende schleife.

    echo "<form action=bearbeiten.php  method=post>";
    
    if(mysql_num_rows($result))
    {
        echo"<table border>";
        echo "<tr><th>Bearbeiten</th> <th>Löschen</th> <th>Position</th><th>KursNR</th> <th>Ort</th> <th>Datum</th></tr>";
    
        $Position_array = array();
        $ID = 0;
        while($row = mysql_fetch_assoc($result))
        {
            $ID++;
            $Position_array[] = $row['Position']; //hier werden alle Zeilen Indexe abgespeichert
    
            echo"
            <tr>
    
            <td>
            <input type=hidden name=Position value=".$row['Position'].">//Hier soll die aktuelle Position weitergegeben werden
            <input type=submit name=Status value=Bearbeiten>
            </td>
    
            <td>
            <input type=hidden name=Position2[] value=$ID>
            <input type=submit name=Status value=Löschen>
    
            </td>
    
            <td>".$row['Position']."-".$ID."</td>
            <td>".$row['lehrgang_id'].$row['termin_id']."</td>
            <td>".$row['ort']."</td>
            <td>".$row['datum1']." - ".$row['datum2']."</td>
    
            </tr>";
        }
        echo"</table>";
        $ergebnis = mysql_num_rows($result);
    }
    else
    {
        echo "Es ist nichts neues in der Datenbank vorhanden<br />\n";
    }
    echo"</form>";
    echo"Anzahl: ".$ergebnis;
    


  • [..]
        $rows = mysql_fetch_assoc ($result);
        foreach ($rows as $row)
    //    while($row = mysql_fetch_assoc($result))
        {
    [..]
    

    Probier's mal so!



  • ne, dann hört der nach dem ersten ergebnis auf auszugeben ...

    ich hab grad überlegt wenn ich vom absendeknopf den namen als Array definiere hab ich die aktuelle position.

    <input type=submit name=Position[".$row['Position']."] value=Bearbeiten>

    das sieht dann so aus:

    Position ( [72] => Bearbeiten)

    Das Problem ist, das ich so keinen vegleich anstellen kann, da ich nämlich nur den index brauche also die 72. Wenn ich das "Bearbeiten" aber lösche via array_pop() verschwindet ja auch der index.

    Jetzt weiß ich nicht genau wie man da sonst vorgehen könnte das man halt diesen index rauslöst oder wie eine abfrage aussehen könnte das nur dieser index verglichen wird im array und nicht der wert darunter.



  • Mach mal ein print_r von $row und $rows an den wichtigen Stellen.



  • Das Problem ist, dass du alles in ein einzelnes großes Formular steckst. Dadurch wird der hidden input "Position" immer wieder überschrieben.

    Du musst die Unterscheidung entweder in die Buttons einbauen (was schwierig ist, weil sich dafür nur "value" eignet), für jede Zeile ein eigenes Formular bauen, oder statt der Buttons Links verwenden, denen du per GET dann die id mitgeben kannst.

    Alternativ böten sich auch diverse Wege mittels JavaScript an, die ich aber als weniger empfehlenswert erachte. Je nach Anwendungsfall aber auch möglich.



  • Ich hab mal ein kleines Test-Programm gebastelt:

    <form action="index.php"  method="post">
    <?php
     for($i=0; $i<10; $i++)
     {
      echo '<div>';
      echo $i;
      echo '<input type="submit" name="edit['.$i.']" value="Bearbeiten">';
      echo '<input type="submit" name="delete['.$i.']" value="Löschen">';
      echo '</div>';
     }
    ?>
    </form>
    <?php
     if(isset($_POST['edit']))
     {
      $action = 'edit';
      $id = key($_POST['edit']);
     }
     if(isset($_POST['delete']))
     {
      $action = 'delete';
      $id = key($_POST['delete']); 
     }
     echo "$action => $id";
    ?>
    


  • hi, das ist ne interessante lösung ich bin auf etwas ähnliches gekommen 🙂

    wobei ich vielleicht while schleife auch in eine for schleife ändere.



  • ich hab doch noch ein problem... und zwar beim vergleichen des arrays:

    Array([Status]=>(Array[111]=>Löschen))

    das ist das was im $_POST mitkommt von der vorherigen seite.

    Das ist ja ein geschachtelter oder 2dimensionaler array und ich muß nachdem der index[111] ausgelesen ist, was ja nun klappt 🙂 einen vergleich auf "Löschen" machen.

    ("$_POST[Status]" == "Löschen") geht irgendwie nicht, wobei ichd achte das er direkt ans ende geht und halt schaut was da steht.

    ("$_POST[Status][111]" == "Löschen") geht auch nicht.

    nun weiß ich nicht genau wie ich dem noch sagen soll er soll das letze element vergleichen...



  • ($_POST['Status']['111'] == 'Löschen') sollte eigentlich gehen 🙄


Anmelden zum Antworten