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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top