[PHP] Inserimento dati su tabelle collegate 1-m

solari77

Utente Attivo
6 Ott 2016
119
1
18
Ciao a tutti,sono nuovo del forum e spero di non fare domande troppo banali.
Non sono molto esperto e avrei bisogno del vostro aiuto per una cosa semplicissima.
Ho provato a cercare ma non credo di aver trovato qualcosa di specifico che faccia a caso mio.
Vengo al dunque
Ho un Db con 2 tabelle e tramite php devo realizzare il codice che mi aggiorni i dati di 2 tabelle collegate.
In allegato le 2 tabelle come sono fatte e la relazione che avevo pensato.

Nella prima tabella inserisco tramite il comando:
INSERT INTO anagrafica VALUES (null,'$nome','$cognome','$sesso','$luogo_nascita','$data_nascita','$codice_fiscale','$indirizzo','$tel','$note')";

ma come faccio ad inserire automaticamente anche nella seconda tabella che è collegata tramite il campo ID?
Cioè il mio dubbio è questo.Nel momento in cui stò inserendo ,l'ID della tabella anagrafica non è stato ancora creato, quindi come faccio a passarlo per la seconda tabella?Oppure qual'è il modo migliore per fare una cosa del genere?

Sperando di non aver creato più confusione di quella che già c'è,attendo i vostri consigli.
Saluti
 

Allegati

  • Cattura.PNG
    Cattura.PNG
    20,3 KB · Visite: 210

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
intanto vedo che la tabella immagini si lega alla tabella anagrafica (almeno così capisco)
se la tabella anagrafica è

id int(11) primary key autoncrement
....
note varchar(455)


la tabella immagini deve avere un campo che risulti unico che la lega a anagrafica
tu l'hai legata per il campo nome, attento puoi avere sempronio rossi e sempronio bianchi
ti convine legarle all'id che (esempio) sempronio rossi ha in anagrafica

id int(11) primary key autoncrement
id_utente int(11) //l'id di sempronio rossi
size
type
immagine


per prelevare poi appena fatto l'insert in anagrafica
PHP:
<?php
//.....
$ris=mysqli_query($connessione,"INSERT INTO anagrafica VALUES (null,'$nome','$cognome','$sesso','$luogo_nascita','$data_nascita','$codice_fiscale','$indirizzo','$tel','$note')");
$id_utente=mysqli_insert_id($connessione);//prelevi l'ultimo id inserito
//....
$ris=mysqli_query($connessione, "INSERT INTO anagrafica(id_utente, size, type,immagine) values($id_utente, $size, '$type','$immagine')";
//...
?>
una curiosità: inserisci le immagini come file nel db (campo blob)? guara che poi è una rogna (a parte lo spazio), considera ti conviene mettere il nome del file immagini e fare una cartella con le immagini
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
Ciao stasera provo e ti faccio sapere.
Riguardo ai collegamenti io ho collegato le 2 tabelle tramite il campo ID,non tramite il campo nome.
Riguardo al fatto delle immagini,supponi bene.Io devo caricare delle immagini.Posso fare in altro modo più semplice e meno dispendioso in termini di memoria? Ogni consiglio è ben accetto.
Grazie
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
secondo me è piu facile e meno dispendioso mettere nel campo immagine il nome ( es pinco.jpg) del file e le immagini in una cartella
poi quando devi tirarle fuori estrai il vome dal db e usi il classico <img src='percoso/".riga['immagine']."'...>
questo perche col metodo blob poi devi operare con gli header con la difficile convivenza immagine/testo
l'unica cosa poi importante (soprattutto se non sei tu a caricarele immagini) al caricamento opportuni controlli
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
Allora abbandono la strada con il campo blob. Pero non mi è chiaro come procedere. Io utilizzo una form dove inserisco tutti i dati della tabella anagrafica.
Seguendo la nuova strada come posso caricare le immagini?Prima io cercavo di utilizzare enctype="multipart/form-data e poi $nome = $_FILES['file']['name']; .Dovrei utilizzare lo stesso per prelevare il nome?
Eventualmente posso caricare più di un'immagine alla volta nella stessa form?
Poi io utilizzavo un riassunto che tramite il comando sql SELECT mi restituiva tutti i dati.Ora otterrò una stringa con il nome dell'immagine cliccabile sull'immagine stessa?
Spero di non chiedere troppo.
Grazie e saluti
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
si devi usare ancora enctype="multipart/form-data e il campo di input file e $_FILES['file'] dove
PHP:
$nome_file=$_FILES['file']['name'];//per omogeneità ti converrebbe metterlo tutto minuscolo
$nome_file_temporaneo=$_FILES['file']['tmp_name'];
$grandezza_file=$_FILES['file']['tmp_name'];
quindi
PHP:
<?php
//...
$nome_file=$_FILES['file']['name'];//per omogeneità ti converrebbe metterlo tutto minuscolo
$nome_file_temporaneo=$_FILES['file']['tmp_name'];
$grandezza_file=$_FILES['file']['tmp_name'];
//...
/*a questo punto hai i dati che ti servono, prima verifichi che il file sia un file ammesso cioè che non ti inviino un file es .exe
ipotizzioamo che tu ammetta i .jpg .png. .gif grandezza e carichi(io faccio così) ti schematizzo*/
//controlli il il tipo di file
$ammessi= array('jpg','png','gif');//o altri es .doc (attento meglio non i .zip e i .rar
$estensione=strtolower(pathinfo($file, PATHINFO_EXTENSION));// ricavo l'estenzione del file, strtolower perche può essere .JPG
if(!in_array($estensione,$ammessi)){
    //il file NON è consentito e rimandi al form o dove vuoi
}
//controlli la grendezza
$max_grand=1000;//metto a caso
if($grandezza_file > $max_grand){
    //troppo grande e rimandi al form o dove vuoi
}
//sesei arrivato qui il file è giusto
//determini la cartella dove caricare
$path="immagini/";
$da_caricare=$path.$nome_file;
if(move_uploaded_file($nome_file_temporaneo, $da_caricare)){
    echo "file caricato con successo";
}else{
    //c'è stao un errore e rimandi al form o dove vuoi
}
//........
//salvi il nome del file nella tua tabella (con o senza il percorso, come preferisci), ricorda che devi aver preso l'id dell'utente
$query= "INSERT INTO immagini(id_utente, size, type, immagine) values($id_utente, $size, '$type','$nome_file')";
//qui scusa nello script precedente errore di copy/paste avevo lascato il nome anagrafica
//p.s. a questo punto non ti servono i campi size e type
//.....
?>
poi quando vorrai visualizzare l'immagine
PHP:
<?php
//......
//avrai sotto forma probabilmete tipo $_GET l'id dell'utente quindi es.
$utente_id=$_GET['id_utente'];
$query= mysqli_query($connessione"SELECT immagine FROM immagini WHERE id_utente=$utente_id");
$riga=mysqli_fetch_assoc($query);
$immagine=$riga['immagine'];
//queste due righe non servono se hai messo il nome col percorso
$path="immagini/";
$da_visualizzare=$path.$immagine;
echo "<img src=\"$da_visualizzare\">";
//.......
?>
si puoi caricare più immagini, ripetendo per ciascuna immagine la stessa cosa

dimenticavo
volendo puoi mettere tu in move_upload il nome $nome_file che preferisci es. id_utente_xyz.jpg dove xyz è il numero +1 delle foto che l'utente ha caricato
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
id int(11) primary key autoncrement
....
note varchar(455)



id int(11) primary key autoncrement
id_utente int(11) //l'id di sempronio rossi
size
type
immagine
Ciao come mi dicevi i campi size e type li ho eliminati.

Ora la insert che cerca di caricare gli allegati è questa:

INSERT INTO immagini (id_utente, nome_file ,immagine) VALUES ('$id_utente','$nome_file','$immagine')

Però non và.Ho provato ad eseguire il comando manualmente su PhpMyAdmin e ottengo il seguente messaggio:

Cannot add or update a child row: a foreign key constraint fails (`clienti`.`immagini`, CONSTRAINT `immagini_ibfk_1` FOREIGN KEY (`id`) REFERENCES `anagrafica` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE)

Giustamente dice che non è possibile modificare una FK, però come devo fare per popolare la tabella?

Io ho legato le 2 tabelle cosi :anagrafica.id con immagini.id (anche se a me sembrava più logico con id_utente)

Dov'è che sbaglio ?

Ciao e grazie
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
Ciao innanzitutto grazie sempre per le risposte.Non sono molto pratico.
Va bene cosi?


anagrafica:
Anagrafica.PNG



immagini
immagini.PNG


relazione
relazione.PNG
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
No,i primary key sono soltanto su anagrafica.id e immagini.id come mi avevi detto anche tu nei post precedenti

tabella anagrafica

id int(11) primary key autoncrement

la tabella immagini

id int(11) primary key autoncrement
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
Facendo delle prove ho visto che rendendo il campo immagini.id_utente UNIQUE e facendo la relazione tra tabelle tra anagrafica.id e immagini id_utente, tutto funziona correttamente però in questo modo mi fà caricare solo un file per ogni cliente essendo il campo UNIQUE
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
non devi mettere id_utente in immagini unique,
gurda come dovrebbero essere

tabella anagrafica
id int(11) autoincrement primary key
nome varchar(25) not null
cognome varchar(25) not null
sesso set('M', 'F') not null default 'M' // o 'F'
luogo_nascita varchar(100) not null
data_nascita date not null
codice_fiscale varchar(16) //questo potresti metterlo unique
indirizzo varchar(50)
email varchar(50) not nul //questo potresti metterlo unique
telefono varchar(25)
note text

tabella immagini
id int(11) autonicrement primary key
id_utente int(11) not nul
nome_file varchar(50) not null
immagine vercha(50) not null //cosa è?

poi ti conviene via script:
in tabella angrafica prima di fare l'inserimento verificare i due campi unique e se essitono avvisare che esistono di gia
in tabelle immagini prima di inserire verificare se il nome file esiste di gia (gia caricato)
 
  • Like
Reactions: solari77

solari77

Utente Attivo
6 Ott 2016
119
1
18
Perfetto sembra essere tutto ok.
Grazie mille. Posso dare il mio feedback in qualche modo ?
Ciao
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
Ah poi scusa,un'ultima domanda.
Io ho necessità di caricare file di 4-5 mega.
$max_grand=1000;
E' questo il valore da cambiare? A quanto lo dovrei mettere?

Invece sulla form:
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="5000">
<input name="userfile" type="file" id="userfile">
<input name="upload" type="submit" class="box" id="upload" value=" Upload ">
</form>

MAX_FILE_SIZE cosa rappresenta?

Ringrazio nuovamente e saluto
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
4-5 mega? mi sembra una esagerazione mega un milione
se parli dell'input hidden è il nome dell'input che in quel caso tresmette il valore 5000 probabilmente usato lato php per verificare la grandezza del file in byte usandola con $_FILES['userfile']['size'] che riporta la grandezza del file in byte
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
parlo di foto quindi 4-5 mega non mi sembra un'esagerazione. Come mi hai consigliato ho eliminato il campo Blob ed adottato la strada del move_uploaded_file quindi sul db è presente solo il nome del file.
Ora vorrei caricare immagini,pdf,eventualmente anche altri file le cui estensioni aggiungerò nella parte di codice che mi hai indicato precedentemente.
Però il problema è che funziona solo con file di piccole dimensioni(50-60 kb ad esempio). Invece con questo sistema che mi hai consigliato,che è di gran lunga migliore,però file di grandi dimensioni non li prende.
Consigli?
Grazie sempre per la tua disponibilità
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
prova a nodificare la capacità
PHP:
ini_set('memory_limit', '5M');//ma questo dipende anche dal server quindi non serve a niente
//....
$grandezza_massima = 5 * 1024 * 1024;//5 MB
if($_FILES['file']['size']>$grandezza_massima){
    echo "file troppo grande";
    //....
}
poi per caricare altri tipi di file basta che tu modifichi la
PHP:
//esempio
$ammessi= array('jpg','png','gif','doc','pdf');

non so che uso fai delle immagini caricate, ma se le usi per visualizzarle su un sito valuta bene i tempi di caricamento, se poi devono essere visibile anche su dispositivi mobili è un suicidio
 
Discussioni simili
Autore Titolo Forum Risposte Data
S [PHP] email con inserimento dati nel database PHP 23
B [PHP] Creare PDF dopo inserimento dati form PHP 4
C [PHP] Form con Inserimento dati dalla maschera e un menù a discesa che prende i dati dal db PHP 1
E Inserimento dati da PHP in tabella MySQL PHP 5
K [PHP] Inserimento dati database con postgres PHP 2
K [PHP + MYSQL ] Inserimento dati in database da form dinamico PHP 13
M Inserimento dati checkbox multipli in db da ajax a php PHP 1
M [PHP] errore in semplie form inserimento dati PHP 7
M [PHP] controllo inserimento dati un un form PHP 4
cris8380 [PHP] Generare file pdf con inserimento dati PHP 34
lab php e html - inserimento di dati in database e aggiornamento della pagina html PHP 2
EffeElle Php problema su inserimento dati mysql PHP 47
L PHP/MYSQL + Inserimento automatico dati PHP 10
R inserimento dati in form da php PHP 1
abulafia [postgres+php]interfaccia grafica per inserimento e ricerca dati PHP 0
L form multipla php sql,errore in inserimento MySQL 0
C [RISOLTO]Inserimento variabile php in input html PHP 20
C [PHP] Form inserimento più menù a discesa PHP 9
M [PHP] Problemi su inserimento array nel db PHP 7
gandalf1959 [PHP] Inserimento di più righe non funziona come mi aspetto... PHP 2
A [PHP] Inserimento url dinamici in pagina html PHP 3
spider81man [PHP] Alert Box per confermare Inserimento o Cancellazione dato. PHP 4
S [PHP] inserimento su DB da tabella PHP 29
P [PHP] Problema inserimento nuove chiavi in array PHP 2
webimage [PHP] Non inserimento in tabella PHP 19
M Inserimento Array prelevato da Database in Php in un altra tabella mysql PHP 0
M [PHP] Controllo inserimento in tempo reale PHP 0
T [PHP] modulo inserimento in DB e apostrofi... PHP 1
M Inserimento automantico di un testo in una pagina PHP PHP 4
M [PHP] Difficoltà inserimento valori nella tabella scontrini PHP 16
B [PHP] Creare un'interfaccia di inserimento testo in varie posizioni PHP 1
giancadeejay [PHP] Controllo inserimento tot caratteri PHP 5
M [PHP] Checkbox: inserimento nel db e lettura dal db PHP 20
S Php e mysql, estrazione da una tabella e inserimento in un'altra tabella PHP 14
J Inserimento di un header, nav, footer php PHP 0
G Inserimento array proveniente da un modulo di registrazione con PHP e MySQL PHP 6
G Inserimento loop in una INSERT query in PHP e MySQL PHP 2
N Inserimento valori da Joomla a database MySql tramite PHP Joomla 0
M [Offro Lavoro] Realizzazione di un database per inserimento eventi in aspx o php [Retribuito] Offerte e Richieste di Lavoro e/o Collaborazione 1
N [PHP/MySQL] Problema inserimento stringhe ' or ', ' and ' PHP 2
T inserimento di codice php in html PHP 10
I dominio aruba versione php server linux Domini 1
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0

Discussioni simili