PHP/HTML - Lägga till en "ta bort" knapp i table för databas resultat

Permalänk
Medlem

PHP/HTML - Lägga till en "ta bort" knapp i table för databas resultat

Hej!

Jag har en databas som jag hämtar data från, bland annat namn på personer.

Efter att ha hämtat data från databasen så skrivs resultaten ut i en while loop, jag har tänkt mig nånting i denna stilen:

<?php while($rad = mysqli_fetch_array($resultat)) { $id=$rad["id"]; ?> <table> <tr> <td><?php echo $rad["namn"]; ?> </td> <td> <form method="post" action="index.php"> <input type="submit" name="<?php echo 'del_' . $id; ?>"value="Ta bort"> <input type="submit" name="<?php echo 'ok_' . $id; ?>"value="OK"> </form> </td> </tr> </table> <?php } if(isset($_POST["del_" . $id])) { echo "del_test"; //utför databas-anrop } if(isset($_POST["ok_" . $id])) { echo "ok_test"; //utför databas-anrop } ?>

Problemet är att det fungerar endast att klicka på den senast producerade knappen, eftersom $id skrivs över varje gång loopen utförs.

Så hur ska jag göra som?

Jag vill undvika att använda mig utav $_GET['id'] och jag vill endast använda mig utav isset($_POST[] )
jag har försökt att titta på denna länk och försökt att tänka nya banor men jag kommer inte längre:
https://stackoverflow.com/questions/41653330/add-delete-butto...

Några tips?

Permalänk
Medlem

$id sätts ju inte från knappen du trycker på i nuläget utan skriptet när sidan laddas om. du måste skicka värdet som ett post värde och ta värdet som kommer in i $_post["del"].

det du behöver göra är alltså så varje knapp blir
<input type="submit" name="delete" value="<?php echo $id; ?>">

sedan så får du ut värdet på vilken knapp som blev tryckt med

if(isset($_POST["delete"]))
{
echo $_POST["delete"];
//utför databas-anrop
}

Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Medlem

Jag tror du blandar ihop value och name attributet,

$_POST["_____"])) tar ju värdet från name="____" och inte value="______"

value är ju helt enkelt texten som står på knappen man trycker på:

value="hej jag är en knapp, klicka på mig"

såhär långt har jag kommit iallfall:

<input type="submit" name="<?php echo 'del_' . $id; ?>"value="Ta bort">
<input type="submit" name="<?php echo 'ok_' . $id; ?>"value="OK">

så om id på en rad är 5 så kommer name för ta bort-knappen att bli "del_5"
och name för OK-knappen kommer då bli "ok_5"

dvs:
"del_" plus "$id" bilr "del_5"
"ok_" plus "$id" bilr "ok_5"

if(isset($_POST["del_" . $id])
{
//utför databas anrop och ta bort raden som motsvarar $_POST["del_" . $id]
}

Hänger du med?

Permalänk
Medlem

Blandar inte ihop det, men missade en grej att du vill ha texten "delete" på knappen.

Jag tror inte du har förstått riktigt hur post informationen skickas.

knappen ska se ut som följande:

<button name="delete" value="<?php echo $id; ?>" type="submit">Delete</button>

och plockas ut med samma snutt som jag gav tidigare:

if(isset($_POST["delete"]))
{
echo $_POST["delete"];
//utför databas-anrop
}

detta då $_POST är en array och det du anger inom brackets[] säger vilket plats i arrayen du vill ha. i detta fall platsen med namnet "delete" och den kommer få värdet value från knappen.

Varje gång du laddar om sidan så kommer skriptet köras från början och har ingen aning om att det har körts förut (förrutom session variabeln) så du måste skicka med alla data du vill att den ska behandla, och alla variabler du har satt förut kommer vara helt återställda.

tror du mig inte så prova kör detta:

<form method="post"> <?php for ($i=0; $i <10 ; $i++) { echo '<button name="delete" value="' . $i . '" type="submit">Delete</button>'; } if(isset($_POST["delete"])) { echo $_POST["delete"]; //utför databas-anrop } ?> </form>

Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Medlem

Toppen!

Det fungerade kanon. Du hade rätt angående att jag inte riktigt förstått hur post information hanteras