Update multipli di un campo booleano

Dati:

 - Ho una tabella MySql con un campo "hide" che può assumere valori 0 e 1 (INT(1))

 - Ho un form html che mostra gli item della tabella ed esprime il valore di "hide" con una checkbox che ha name = id[] e value = item_id

Invio dei dati:

Quando invio il form e prelevo i dati dal post ho un array contenente gli id delle cechkbox selezionate.

Problemi:

Primo problema: se un item era precedentemente checked ed è stato reso unchecked questo non mi risulta dal post.

Secondo problema: devo per forza fare n query per n valori passati oppure posso concatenare tutto in un'unica query?

Soluzioni:

Per il primo problema avevo pensato che la checkbox non era l'input adatto e quindi si potrebbe usare due radio true/false ma dal punto di vista dell'usabilità non mi sembra corretto, la richiesta del form è: nascondi item.

Per il secondo problema non ho trovato documentazioni che spieghino un concatenamento dell'update a meno di non poter fare:

$query = UPDATE tabella SET 'hide' = 0 WHERE 'id'=1; UPDATE tabella SET 'hide' = 1  WHERE 'id'=2; etc

inviato 8 anni fa
arjuna
X 0 X

Il primo problema puoi risolverlo mettendo un campo nascosto nel form contenente l'elenco di tutti gli id, separati ad esempio da una virgola. In questo modo quando invii il form avrai una lista di tutti gli id, scomponibile con l0istruzione explode, e l'array degli id selezionati con la checkbox. A questo punto puoi procedere per differenza e ottenere gli id dei campi non selezionati.

Per il secondo problema non c'è soluzione, devi lanciare tante update quante sono le righe da aggiornare.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Per il secondo quindi non c'è differenza tra lo scrivere:

foreach($ids as $id)
{
   $query .= "UPDATE tabella SET 'hide' = 0 WHERE 'id'=$id;"
}

$db->invia($query);

e

foreach($ids as $id)
{
    $db->invia("UPDATE tabella SET 'hide' = 0 WHERE 'id'=$id;");
}
risposto 8 anni fa
arjuna
X 0 X

Dipende. Il metodo invia() supporta l'esecuzione di query multiple?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda