Edit-button per rij uit database

Status
Niet open voor verdere reacties.

evertVB

Gebruiker
Lid geworden
6 apr 2009
Berichten
570
Ik haal items op uit een database, en die zet ik in een tabel.
In elke rij staat dan ook een button waarmee dat betreffende item gewijzigd kan worden.

Dat gaat met deze code:

Code:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table>

...

  $i = 0;
  while($row=mysql_fetch_row($res)){
    $i = $i + 1;

    ...

    $seteditbutton = "<input type='submit' name='edit$i' value='edit$i'/>";
    ...
    echo "<td width=\"70\" height=\"40\">".$seteditbutton."</td>";
    ...
  };

...

</table>
</form>

Bij het afhandelen weet ik zo op de hoeveelste edit-button er werd gedrukt, want in de name en value van de buttons
stop ik dat tellertje.

Wat is nu de meest gangbare methode om te weten welk database item de gebruiker wilde wijzigen?

In theorie kan ik name en value van de buttons uitbreiden met de sleutel van mijn record, maar dat komt niet elegant of vanzelfsprekend op me over.
 
Als ik jou was zou ik geen tellertje in de name of value stoppen maar een ID-nummer die gekoppelt is aan het betreffende item. Uiteraard zal er een andere manier zijn maar zal dit veel meer werk kosten en zal het resultaat niet zo een groot verschil zijn.
 
Dat heb ik nu even gedaan. De naam van mijn button is geworden "edt" + de (integer-)id van het database record.

Maar nu zit ik met de afhandeling:
Code:
        if (isset($_POST["edt1"])) {

            ...
        }
Dit stukje code werkt als ik zou weten dat het record met id=1 was geselecteerd door de gebruiker.
Wat is de makkelijkste manier om uit te vragen welke button werd aangeklikt
als de naam kan varieren (edt1, edt2, edt3, ..., edt321, ... )?
 
Nou je hebt dus je naam van je knop edit + het (integer-)id van het database record gemaakt en de waarde is gelijk hiervan. Dus moet je de waarde pakken van de geselecteerde button en dan laatste karakter van deze waarde is je ID van je database item.

wat ik heb begrepen van jou verhaal dan he
 
Ik was ondertussen gaan sleutelen, en heb een loopje gemaakt.
Dus per database record check ik of er een knop
'edt'< + die id>
aangeklikt is:
Code:
        $sqlmaxid="SELECT MAX(BLST_id) AS max_blst_id FROM BLST_Item;";
        $resmaxid=mysql_query($sqlmaxid)
                     or die("Fout bij uitvoeren insert query.");
        $aRow = mysql_fetch_assoc($resmaxid);
        $max_blst_id = $aRow['max_blst_id'];

        $i = 0;
        while ($i < $max_blst_id) {
          $i = $i + 1;
          if (isset($_POST["edt".$i])) {
              $prevedtnr = $i;
          }
        }
Dat is waarop ik uit ben gekomen. Op zich werkt het.
Heb ik makkelijkere opties over het hoofd gezien?
 
Je moet de connectie met een database zo laag mogelijk houden aangezien je niet wilt dat er veel poorten open zijn naar je database.
Dus lijkt het mij beter als je eerst de waarde ophaalt en dan pas connectie maakt met de database om je gewenste actie uit te voeren.
 
Hoe kan ik uit $_POST[...] de waarde of naam van een eventuele button halen
als ik op voorhand niet weet hoeveel buttons er zijn en welke namen zij hebben?

(Want dat is mijn situatie; toen ik het eerste scherm met buttons opbouwde had ik voor elke rij in mijn database een button.

En bij de afhandeling heb ik op voorhand geen idee wat er in mijn database staat.)
 
Waar in de code je je database verbinding aanmaakt, maakt niet zoveel uit hoor. Hij moet toch geopend worden.

De snelste manier om te achterhalen welke ids er gezet zijn is om de keys op te halen en daar overheen te lopen, en de eerste drie tekens weg te strippen.

Ervan uitgaande dat je geen andere dingen in je $_POST hebt:

PHP:
$keys = array_keys( $_POST );
// strip de eerste drie tekens van elke key af.
foreach ( $keys as $name => $value ) {
  $ids_set[] = (int) substr( $name, 3 );
}

Dat maakt een lijst aan met ids. Je kunt ook $ids_set als een integer aanmaken, als je er maar een wilt.
Als er nog meer keys mogelijk zijn in $_POST (van andere velden ofzo) moet je eerst even controleren of het veld dat je wilt pakken wel van het juiste type is:

PHP:
if ( substr( $naam, 0, 3 ) == 'edt' ) {
}

Succes.
 
Bedankt ik heb het aan de praat gekregen!:cool:
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan