PHP ciclo che crea i pulsanti X
Domanda
Sto creando uno strumento di gestione striscione che utilizza un database SQL per archiviare i propri dati una volta aggiunto. v'è una scheda che mostra per ogni striscione in questo database di un aggiornamento e pulsante Elimina. Questi pulsanti vengono creati in un ciclo a base di PHP in modo avrò una quantità X di aggiornamento e pulsanti di cancellazione.
Ora a seconda del pulsante premo andrò a un vieuw aggiornamento della voce wherunder stato cliccato il pulsante di aggiornamento.
Il problema che incontro in quanto questi pulsanti hanno tutti lo stesso nome è che non riesco a distinguere quale tasto è stato spinto. Ogni articolo nel DB è en ROWID, però non riesco a capire come ottenere il ID una volta u premere il pulsante ...
Ecco il codice di come questi pulsanti vengono generati.
do {
$entry = $dbase->querySingle("SELECT name FROM banners where ROWID='$currentRowNumber'");
echo "<tr>";
echo "<td width=\"50\">". $entry ."</td>";
echo "</tr>";
echo "<tr>";
echo "<td><input type=\"submit\" name=\"operation\" value=\"Update\"></td>";
echo "<td><input type=\"submit\" name=\"operation\" value=\"Delete\"></td>";
echo "</tr>";
$currentRowNumber++;
} while ($dbase->querySingle("SELECT name FROM banners where ROWID='$currentRowNumber'") != NULL);
mi chiedevo se qualcuno ha qualche idea su come distinguere questi pulsanti. Forse un fattore nascosto che posso leggere qui di seguito? (Non so se esiste una cosa del genere)
Saluti
Soluzione
Si potrebbe avvolgere tutte le operazioni per riga in una forma che ha un input type="hidden" value="$id"
contenente l'ID della voce, o utilizzare un action="/update?id=$id"
al modulo, o, se si vuole attenersi a una forma di grandi dimensioni, è possibile utilizzare name="update[$id]"
per presentare pulsante.
Altri suggerimenti
Per prima cosa, invece di chiamare i pulsanti di un termine generico come "operazione", vi consiglio li chiami per quello che fanno, vale a dire "update" e "delete". Ciò consente di disaccoppiare la funzione del pulsante dal quale etichetta viene visualizzato il pulsante.
<input type="submit" name="update" value="Update banner" />
<input type="submit" name="delete" value="Remove banner" />
Si potrebbe controllare quale pulsante è stato colpito utilizzando array_key_exists o isset per determinare quale pulsante è stato premuto.
if (isset ($_POST ['update']))
{
}
else if (isset ($_POST ['delete']))
{
}
else
{
// No button was pressed
}
Per quanto riguarda l'individuazione quale elemento il pulsante si riferisce, sto assumendo tutti i tuoi banner hanno qualche modo di essi identificare in modo univoco (una chiave primaria, di norma un valore numerico). Se si utilizza la sintassi [square staffa] nel nome del pulsante, è possibile identificare la riga per il pulsante premuto.
<input type="submit" name="update[1]" value="Update banner" />
<input type="submit" name="delete[1]" value="Remove banner" />
<input type="submit" name="update[23]" value="Update banner" />
<input type="submit" name="delete[23]" value="Remove banner" />
<input type="submit" name="update[153]" value="Update banner" />
<input type="submit" name="delete[153]" value="Remove banner" />
if (isset ($_POST ['update']))
{
$rowToUpdate = key ($_POST ['update']);
}
else if (isset ($_POST ['delete']))
{
$rowToDelete = key ($_POST ['delete']);
}
else
{
// No button was pressed
}
Ho usato i numeri come identificatori qui, ma si può usare qualsiasi cosa che si sta utilizzando per distinguere uno striscione da un altro. Dubito che si potrebbe usare la punteggiatura o gli spazi nei vostri identificatori però, diversi da quelli di sottolineatura, quindi è necessario tenere a mente. update[abc]
e update[abc_def]
dovrebbe andare bene, ma non ho potuto garantire per update[abc def]
o update[abc-def]
. Tutto sommato, utilizzando identificatori numerici vi farà risparmiare un sacco di inutili mal di testa.