/ / PHP MYSQL modifica modulo, cercando di implodere / esplodere riga per caselle di controllo? - php, mysql, checkbox, esplode, implode

Modulo di modifica PHP MySQL, cercando di implodere / esplodere riga per caselle di controllo? - php, mysql, checkbox, esplode, implode

Ho un modulo che ha più categorie. Sono separati da caselle di controllo, in modo da poter controllare qualsiasi numero di categorie in cui sarà inserito il loro post / storia.

I valori sono memorizzati all'interno di una riga db separandoli con delle virgole mentre INSERT

GetSQLValueString(implode($_POST["r_category"],", "), "text"),

Quindi nel database potrei avere una voce simile a questa:

2,3,6,12

Quali sono i numeri di categoria.

Ora sto creando una funzione di modifica dei moduli da utilizzare per modificare e aggiornare questi record. Non riesco a trovare un modo per "ESPLODARE" i valori in caselle di controllo sul modulo di modifica ??

Quindi, se accedi e vai all'ENTRATA che tuper esempio, ho delle caselle di controllo che separano le categorie, quindi sarà facile controllare e deselezionare aggiungere e non aggiungere ... Ho provato tutto il possibile per ottenere i valori su POST e essere controllato quando si visualizza questo modulo di modifica .

Ecco un esempio di una delle mie caselle di controllo di categoria nella mia pagina di modulo di modifica, ma non funziona quando ho più categorie, come nell'esempio sopra .. 2,3,6,12 ?? :

  <input type="checkbox" name="r_category[]"
<?php if (!(strcmp("2", $row_Recordset2["r_category"]))) {
echo "checked="checked"";} ?> value="2" />Cat 2

Grazie in anticipo NINJAS !!

risposte:

5 per risposta № 1

Non riesco a trovare un modo per "ESPLODARE" i valori in caselle di controllo sul modulo di modifica

Questa linea è così vicina alla risposta che mi sto seriamente chiedendo se questo è un post di scherzo.

Data la struttura del tuo database così com'è, puoi usare il explode() funzione per suddividere il valore in un array basato su un delimitatore. Per esempio:

$values = "1,2,3,4";
$array_of_values = explode(",", $values);

Dopodichè, $array_of_values conterrà un array di quattro elementi con i valori di 1, 2, 3, e 4 rispettivamente.

Al momento di decidere se visualizzare o meno la casella di controllo come controllata, è possibile utilizzare il comando in_array() funzione per effettuare quella chiamata:

if (in_array("2", $array_of_values)) {
echo "checked="checked"";
}

Oltre a ciò, consentitemi di cogliere l'occasione per mettere in secondo piano ciò che @MarkB ha detto nei commenti a questa domanda: è a cattivo idea di contenere più valori in un singolo campo di database. Rende più difficile la ricerca delle cose, rende più difficile l'aggiunta di valori ... rende tutto più complesso di quanto non debba essere.

Il modo migliore per gestirlo è disporre di una tabella many-to-many che memorizza righe di articoli e categorie, con una riga per ogni categoria a cui un elemento appartiene.

In altre parole, dove attualmente hai questo:

Item | Category
---------------
123  | 1,2,3,4

Avresti invece una tabella simile a questa:

Item | Category
---------------
123  | 1
123  | 2
123  | 3
123  | 4

0 per risposta № 2

Puoi usarlo come mostrato di seguito potrebbe essere utile

if (in_array("2", $row_Recordset2["r_category"])) {echo "Checked";}

0 per risposta № 3

Quel condizionale in_array non ha mai funzionato per me. Ho ideato una soluzione totalmente front-end che funziona come un fascino e si aggiorna automaticamente in base alle modifiche apportate al database. Se sei interessato, dai un'occhiata qui. https://stackoverflow.com/a/26433841/1896348