[PHP] Checkbox e valori multipli in una colonna

Monte95

Nuovo Utente
27 Mar 2017
12
0
1
29
Salve a tutti, sono un nuovo utente del forum.
Ho bisogno del Vs aiuto... sicuramente sarà più banale la soluzione del formularvi il quesito (vi chiedo scusa in anticipo, cercherò di essere il più chiaro possibile):

Premetto che sto utilizzando come dbms PostgreSql.

-Ho una tabella "temi" che elenca tutti i temi inseriti, dove la PRIMARY KEY e di tipo SERIAL (INTEGER) ed è l' "id":

------------------------
Codice:
CREATE TABLE temi (
id serial UNIQUE,
tema varchar (100) NOT NULL,
ecc ...
PRIMARY KEY(id)
);

------------------------

-Ho una tabella "domini" che elenca tutti i domini inseriti, dove la PRIMARY KEY e di tipo SERIAL (INTEGER) ed è l' "id", poi c'è una FOREIGN KEY di tipo INTEGER che fa riferimento alla tabella "temi" al campo "id" ("id_temi"):

------------------------

Codice:
CREATE TABLE domini (
id serial UNIQUE,
ecc ...
id_tema integer       NULL,
... ,  
PRIMARY KEY(id),
FOREIGN KEY (id_tema)  REFERENCES temi (id) ON UPDATE cascade ON DELETE RESTRICT
);

------------------------

Ho la necessità di inserire nel form di inserimento domini, una checkbox che mi elenchi ogni record della tabella "temi", dove ovviamente possa dare la spunta a più record.
Fino a quì nessun problema; ho risolto così:

------------------------

Codice:
$query= "SELECT * FROM temi;";
$result= pg_query($query) or die('Query failed: ' . pg_last_error());

echo "<label>Tema associato: <br> <br> <label class='check'>";

while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {  

$elenco_temi= array($line[id]);
foreach($elenco_temi as $p) {

echo "<input type='checkbox' name='id_tema[]' ";
if ($p == $id_tema) {
echo " selected ";
                                       }
 if ($p != 0) {
echo "value=$p>$line[tema] : (ID = $p) <br>";           } else {
echo "value=$p>Nessun tema <br>";
                                    }
}                                                              
}
echo "</label><br>";

------------------------

Il problema si verifica quando seleziono più temi dalla checkbox ed invio i dati al db.
Non so come fare ad inserire più valori (che di natura sono di tipo INTEGER) in una colonna della mia tabella "domini" che anch'essa è di tipo INTEGER in quanto è una chiave esterna che fa riferimento alla chiave primaria (di tipo INTEGER) della tabella "temi".

Al momento ho optato per questa soluzione (errata):

------------------------

Codice:
$id_tema        = $_POST[id_tema];

$string="";
for($i=0;$i<sizeof($id_tema);$i++){
$string .= $id_tema[$i]." "; }

$query = "INSERT INTO domini(id_tema) VALUES ('$string');";

$result = pg_query($query) or die('Query failed: ' . pg_last_error());

pg_free_result($result);
pg_close($dbconn);

------------------------

Così facendo, creo una stringa contenente tutti gli id dei temi selezionati in precedenza separati dal carattere -spazio-.
L'errore infatti è il seguente:

Query failed: ERROR: invalid input syntax for integer: "9 11 " LINE 1: id_tema) VALUES ('''9 11 '... ^

Come posso risolvere??

spero di essere stato chiaro. Grazie mille a tutti in anticipo.

Manuel
 
Ultima modifica:

Monte95

Nuovo Utente
27 Mar 2017
12
0
1
29
Ciao F107 grazie per la tua risposta.
Ho provato a fare come dici tu ma mi restituisce il seguente errore:

Codice:
ERROR:  foreign key constraint "domini_id_tema_fkey" cannot be implemented
DETAIL:  Key columns "id_tema" and "id" are of incompatible types: integer[] and integer.
In statement:

CREATE TABLE domini (
    id                        serial UNIQUE,
        dominio                varchar (100) NOT NULL,       
        prezzo                      numeric (7,2),
        data_registrazione     varchar (10),
        periodo_registrazione  varchar (50),
        scadenza               varchar (10),
        id_cliente           integer       NOT NULL,
        id_tema                integer       ARRAY,
        id_plugin              integer       NULL,
        note                   varchar (500),           

        PRIMARY KEY(id,dominio),
        FOREIGN KEY (id_cliente)  REFERENCES clienti (id) ON UPDATE cascade ON DELETE RESTRICT,
        FOREIGN KEY (id_tema)  REFERENCES temi (id) ON UPDATE cascade ON DELETE RESTRICT,
        FOREIGN KEY (id_plugin)  REFERENCES plugin (id) ON UPDATE cascade ON DELETE RESTRICT

);

Hai una soluzione? Grazie
 

Monte95

Nuovo Utente
27 Mar 2017
12
0
1
29
Sono fermo alla versione 8.4.20
Ho fatto richiesta al nostro sistemista per l'aggiornamento alla versione 9.3
Dopodiché come procedo più nello specifico? Grazie mille
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
con la 8.4 non so cosa sia possibile fare, forse puoi togliere la foreign key per l'id_tema e gestirlo con la logica
 

Monte95

Nuovo Utente
27 Mar 2017
12
0
1
29
Intendevo se puoi gentilmente dirmi cosa dovrò fare dopo l'aggiornamento alla versione 9.3
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
Teoricamente basta togliere questo:
Codice:
FOREIGN KEY (id_tema)  REFERENCES temi (id) ON UPDATE cascade ON DELETE RESTRICT,

e cambiare questo:
Codice:
id_tema integer       NULL,

in:
Codice:
id_tema integer[] ELEMENT REFERENCES temi(id),

Prova e fammi sapere quando puoi
 
  • Like
Reactions: Monte95

Monte95

Nuovo Utente
27 Mar 2017
12
0
1
29
Purtroppo mi è stato detto dal mio sistemista che non posso procedere all'aggiornamento di PSQL in quanto possiedo un server MANAGED con CloudLinux e cPanel/WHM .
Al momento utilizzo, quindi, la versione stabile di PostgreSQL:
Codice:
# psql --version
psql (PostgreSQL) 8.4.20
contains support for command-line editing

F107 come posso procedere secondo te per risolvere il mio problema?
 

f107

Utente Attivo
7 Ago 2012
206
6
18
Roma
togliere la foreign key per l'id_tema e gestirlo con la logica.
altrimenti devi fare una tab di connessione, ma non mi piacciono molto con postgresql
 

Monte95

Nuovo Utente
27 Mar 2017
12
0
1
29
E se provassi a lavorare non più sul "id" ma su "tema" ?? che è pur sempre una PK di "temi", però è di tipo varchar e non integer.... ovvero:
Codice:
CREATE TABLE temi (

        id                           serial UNIQUE,
        tema                      varchar (100) ARRAY NOT NULL UNIQUE,       
        nome_file            varchar (100)  NOT NULL,             
        prezzo                   numeric (7,2),
        data_acquisto     varchar (10),
        licenza_tema       varchar (500),
        note                       varchar (500),
        multisito              varchar (50),
          
        PRIMARY KEY(id,tema)

);

Codice:
CREATE TABLE domini (
        id                                        serial                     UNIQUE,
        dominio                            varchar (100)       NOT NULL,       
        prezzo                                numeric (7,2),
        data_registrazione         varchar (10),
        periodo_registrazione   varchar (50),
        scadenza                           varchar (10),
        id_cliente                         integer                     NOT NULL,
        id_tema                            varchar                    ARRAY NULL UNIQUE,
        note                                    varchar (500),           

        PRIMARY KEY(id,dominio),
        FOREIGN KEY (id_cliente)  REFERENCES clienti (id) ON UPDATE cascade ON DELETE RESTRICT,
        FOREIGN KEY (id_tema)  REFERENCES temi (tema) ON UPDATE cascade ON DELETE RESTRICT

);

E' fattibile procedere in questo modo secondo te?
Le tabelle sono riuscito a crearle in questo modo, però non so esattamente come procedere in quanto non so come fare per lavorare con colonne array. Puoi aiutarmi perfavore?

Grazie mille :)
 
Discussioni simili
Autore Titolo Forum Risposte Data
T [PHP] Checkbox E Valori Multipli In Una Colonna PHP 1
M PHP/SQL Inserire più valori in una colonna di tipo integer - Checkbox - PHP 3
unkus_nob valori checkbox di form html in file php senza submit PHP 1
M Leggere valori da checkbox e richiamarli in php Javascript 1
S [PHP] Come mantenere selezionato checkbox dopo aver cliccato submit PHP 7
P [PHP] Controllo al checkbox privacy PHP 6
C [PHP] Checkbox in tabella PHP 7
L [PHP] CHECKBOX DA SELEZIONARE IN UNA TABELLA PHP 4
M Inserimento dati checkbox multipli in db da ajax a php PHP 1
M PHP - Checkbox - Mysql PHP 2
M [PHP] Far rimanere biffata checkbox dopo aggiornamento pagina PHP 24
ientii [PHP] Gestione CheckBox PHP 1
bubino8 [PHP] Variabile da multipla Checkbox PHP 2
E [PHP] valore checkbox PHP 1
U [PHP - RISOLTO] Tabella dinamica: colonne selezionate da checkbox PHP 40
giancadeejay [PHP] INSERT into tabella tramite scelta checkbox PHP 0
giancadeejay [PHP] checkbox ad ogni riga estratta dal db PHP 13
Fede72 Controllare le checkbox con PHP PHP 6
L [PHP] selezionare righe di una tabella con le checkbox e cancellarle PHP 2
M [PHP] Checkbox: inserimento nel db e lettura dal db PHP 20
P [PHP] checkbox e sua memorizzazione nel db PHP 31
M form php con checkbox PHP 4
A Aiutino su PHP e MySQL [Checkbox] PHP 2
L dati da checkbox passati a script php via json jQuery 5
M visualizzazione checkbox con PHP PHP 3
N [RISOLTO] Mostrare a video le checkbox selezionate con PHP e MySQL PHP 4
P Controllo php su checkbox PHP 2
Sargon php _ checkbox mysql _ PHP 3
A Problema PHP e checkbox! PHP 10
Athene Come nascondere i dati della checkbox in php PHP 2
D query con mysql, checkbox e php PHP 8
M selezione con checkbox php mysql PHP 14
T checkbox e PHP PHP 12
P [PHP] problema script con checkbox! PHP 0
W php e checkbox PHP 3
S ComboBox, radioButton, CheckBox...passagio dati FLASH-PHP!!! Flash 0
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9

Discussioni simili