PHP/SQL Inserire più valori in una colonna di tipo integer - Checkbox -

Monte95

Nuovo Utente
27 Mar 2017
12
0
1
26
Salve a tutti, 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 possiedo un server MANAGED con CloudLinux e cPanel/WHM e sto utilizzando come dbms PostgreSql (fermo alla versione 8.4.20).

-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 UNIQUE,
ecc ...
PRIMARY KEY(id,tema)
);

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

-Ho una tabella "domini" che elenca tutti i domini inseriti, dove la PRIMARY KEY è 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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
forse dico una bestialità non potresti settare id_tema a varchar e poi trasformare dove ti serve quei valori in intero?
scusa dimenticavo:
da quello che capisco si tratta di una relazione "molti a molti" quindi forse ti converrebbe fare una terza tabella che leghi alcune riche della prima con alcune righe della seconda
 
Ultima modifica:
  • Like
Reactions: Monte95

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
Lombardia
Ho una tabella "temi" che elenca tutti i temi inseriti, dove la PRIMARY KEY e di tipo SERIAL (INTEGER) ed è l' "id":
PRIMARY KEY(id,tema)
scusa ma io leggo che la primary key è una chiave composta dalla colonna id e tema
ed è già "fuori luogo", per fare una ricerca che usi quella chiave devi conoscere entrambi i valori associati, cosa che di solito non è

FOREIGN KEY (id_tema) REFERENCES temi (id)
qui fai riferimento ad una colonna non ad un indice

non guardo altro,

seguendo il tuo ragionamento, puoi risolvere il problema con un' array che contiene l'id dei temi scelti e che serializzi per la scrittura nel db
ma è una soluzione "debole", se cancelli un tema ed il relativo id, ti rimangono nel db informzioni errate
vedi post di Borgo
 
  • Like
Reactions: Monte95

Monte95

Nuovo Utente
27 Mar 2017
12
0
1
26
ciao
forse dico una bestialità non potresti settare id_tema a varchar e poi trasformare dove ti serve quei valori in intero?
scusa dimenticavo:
da quello che capisco si tratta di una relazione "molti a molti" quindi forse ti converrebbe fare una terza tabella che leghi alcune riche della prima con alcune righe della seconda


Ti ringrazio per la tua risposta. Al momento ho dovuto, per questioni di tempo, mettere da parte tutto e andare avanti in altre cose. Non appena ci rimetto la testa, ti farò sapere come ho proceduto.
Mi sembra comunque un ottima idea quella di creare una terza tabella.
Grazie mille per il momento.
 
Discussioni simili
Autore Titolo Forum Risposte Data
D passare valori da database sql a php PHP 1
Emix Select concatenate php sql ajax PHP 2
L form multipla php sql,errore in inserimento MySQL 0
L Insert php sql da una form multipla PHP 6
moustache [RISOLTO] SQL PHP IIS PHP 8
WebmasterFioriniAndrea SQL, PHP Come passo i dati da una tabella? PHP 1
D [MySQL] [PHP] SQL andare da capo MySQL 0
A [PHP] registrazione utente in un database sql con confronto PHP 1
G sql select con array in php PHP 1
trattorino [PHP] sql estrarre in base all'ultima visita PHP 4
A [PHP] Modifica caratteri di una query Oracle SQL PHP 0
trattorino [PHP] sql aggiungere dato in una tabella senza cancellare contenuto PHP 6
Merlina3377 php insert dati su tabella sql PHP 9
V [PHP] Estrazione con SQL PHP 1
K stampa e modifica tabella in php e ms sql PHP 2
G [PHP] Selezionare OGGI anno precedente per query sql PHP 2
S Select Concatenate Ajax, php, sql Presentati al Forum 16
giancadeejay [PHP] istruzione UPDATE SQL PHP 2
S [PHP] Eseguire differenza su dati SQL presenti sulla stessa colonna PHP 1
giuseppe_123 [PHP] ricerca in una tabella con my sql PHP 0
G [Offro] [Retribuito] cerco assistenza per sito internet - programmazione PHP SQL Offerte e Richieste di Lavoro e/o Collaborazione 2
D php sql PHP 0
J PHP Ajax tabella SQL non viene mostrata PHP 0
J Php ajax sql controllare se l'id esiste in una tabella db PHP 2
F Form Multipli con PHP e SQL PHP 0
F PHP problema doppi apici all'interno di una query SQL PHP 1
C [PHP][MY SQL] - Estrazione dati database tramite form PHP 8
C PHP - SQL server PHP 4
M php vs sql PHP 13
R modifica dati in tabella php+sql PHP 12
I Riga tabella HTML creata con cicli PHP e Query Sql che restituisca un campo se si clicca la Riga PHP 4
Sargon Php e My Sql Area ristretta con password PHP 5
F Programma PHP che esegue backup e ripristino di database SQL SERVER PHP 12
Sargon ordine delle parole PHP, My sql PHP 5
Komix Errore sintassi SQL "UPDATE" in file PHP PHP 10
Sargon Php / My sql motore di ricerca PHP 21
W [OFFRO] script php+sql semplice retribuito Offerte e Richieste di Lavoro e/o Collaborazione 0
I Php + sql PHP 1
E calendario in php + sql PHP 4
I Problema con PHP + SQL ! PHP 13
D [PHP/SQL] Estrarre risultati da 2 database Database 0
B php e sql-server PHP 13
S Query PHP My sql PHP 31
S query sql in php PHP 4
Z query sql e script php per ordinamento dati tabella PHP 2
N [collaborazione] programmatore php/mysql asp/sql server Rovigo, Mantova, Ferrara Offerte e Richieste di Lavoro e/o Collaborazione 2
H Php,Sql.. prendere i dati prima di oggi PHP 7
A PHP e MS SQL PHP 2
F PHP con SQL SERVER PHP 0
S [PHP] Riempire una casella select con query SQL PHP 11

Discussioni simili