visualizzare immagine con 2 tabelle differenti

  • Creatore Discussione Creatore Discussione Ricc
  • Data di inizio Data di inizio

Ricc

Nuovo Utente
4 Nov 2014
5
0
0
Salve allo staff di questo interessantissimo forum,
da neofita del PHP stavo iniziando a costruire un Guestbook ma mi sono impantanato su 2 problemi che per le mie capacità credo siano irrisolvibili senza un aiuto; in sintesi il primo:

nella pagina per inserire i dati ho tutti i campi del form funzionanti (nome, email, indirizzo web, nazionalità ... , messaggio). Ho 2 tabelle nel DB, la prima è ordinata secondo il campo "data-ora" (now), per ricevere tutti i dati e postarli formattati nella pagina dei messaggi, la seconda la uso invece nella pagina dei dati, ha solo 2 campi (ID e nazione) ed è per selezionare il nome del paese di provenienza (appunto dal campo "nazionalità").
Sto pensando a vari modi per realizzare un risultato: in pratica ho una cartella con le immagini delle bandiere dei vari paesi, e vorrei che in ogni messaggio, a fianco al nome della nazione si visualizzasse anche la bandiera corrispondente.
Ho provato aggiungendo campi blob, campi url per selezionarle direttamente dalla cartella sul server, scambiandole tra le 2 tabelle, usando l'ID di entrambe, usando funzioni, insomma è possibile che magari mi ci sia avvicinato o sia in alto mare (essendo in php è difficile scoprirlo), ma per ora nessuna strada ha funzionato. Prima di arrendermi vorrei chiedere un consiglio per sapere A-se si può fare (ma son sicuro di sì) e B-qual è la procedura corretta.

Riguardo il secondo problema: prima del form per i dati ho un form per l'inserimento di un'immagine, che funziona perfettamente; l'immagine viene scaricata nella sua cartella web; anche qui, l'obiettivo sarebbe quello di far apparire l'immagine nel messaggio di chi la carica; ma non ho idea di come fare; ho provato anche qui ad inserire dei campi "nome file" , "tipo file" per caricarne i dati sulla stessa tabella dei messaggi; peraltro non so perché se inserisco il campo blob per caricare l'immagine direttamente nel DB (altra strada che stavo provando) mi azzera il campo "data-ora" per cui mi sballa l'ordine di arrivo dei messaggi.
Quindi ho provato vari modi per far comparire l'immagine dalla cartella al messaggio corrispondente, ma anche qui mi rendo conto di non poter risolvere da solo.

Mi scuso per l'eventuale lungaggine, ed appunto non avendo le competenze necessarie, può darsi che anche uno solo dei 2 problemi (o entrambi) sia magari anche molto semplice da risolvere.
Ringrazio anticipatamente per qualunque aiuto.
 
ciao
intanto la prima domanda
come è la prima tabella?
se nella tabella hai id, nome,....,nazionalita,.... ti convine fare le bandierine col nome della nazionalità es.
italia.gif
inghilterra.gif
francia.gig
ecc.....
poi quando visualizzi i dati del db
PHP:
<?php
//.........
$query=mysql_query("SELECT * FROM tabella");//+se serve WHERE e/o ORDER BY
while ($riga=mysql_fetch_array($query)){
	echo $riga['nome']."<br />";
	//e gli altri dati
	//e costruisci il nome dell'immagine
    $nazione=$riga['nazionalità']."gif";//se in una cartella $nazione="cartella/".$riga['nazionalità']."gif";
	echo "<img src=\"$nazione\">";//visualizzi la bandierina
	//.....
}
//.....
?>
non ti serve il campo tipo blob
 
Salve,
ti ringrazio molto per l'indicazione; alla fine come altre volte succede, quanto più ci si intestardisce a provare varie strade, tanto più non ci si rende conto che la soluzione era davanti agli occhi; ho cercato un modo per inserire automaticamente il campo "iso" (la sigla di ogni stato) poiché avevo le immagini salvate così, ma poi ho preferito perdere un'ora a rinominarle tutte, ed adottare il tuo suggerimento.

Se per qualunque motivo qualche anima pia mi voglia aiutare con il secondo problema gliene sarei molto grato; lo riporto qui per evitare di rileggere il primo messaggio:

in sintesi, prima del form per i dati ho un form per l'inserimento di un'immagine, che funziona perfettamente; l'immagine viene scaricata nella sua cartella web; anche qui, l'obiettivo sarebbe quello di recuperarla e farla apparire nel rispettivo messaggio di chi la carica; ma non ho trovato la soluzione.
 
ciao
se l'immagine è unica per ogni messaggio ti conviene aggiungere alla tabella un campo che contiene il nome del file caricato e quando estrai il messaggio estrai anche il nome e lo mostri come detto prima
se invece per ogni messaggio l'utente può caricare più immagini (uno a molti) ti conviene fare un'altra tabella del tipo
id
id_messaggio (questo lega il nome delle immagini al suo messaggio)
nome_file

piccolo appunto: ricorda che quando fai caricare dei file è essenziale il controllo di cosa viene caricato, es pinco.jpg ammesso, pinco.exe proibito
 
Salve, si alla fine stavo utilizzando la stessa strada per le bandiere e funzionava, ma il problema è appunto il collegare il nome alla stringa contenente tutti i dati. Essendo 2 form separati (non so se si possano "unire" o se ne possa fare solo uno, ma da quello che tutto quello che ho letto, per caricare le immagini serve un form a parte ed i form non si possono nidificare);

il risultato è che l'immagine viene correttamente caricata (con i debiti controlli) ma nella tabella dei messaggi mi inserisce una riga con tutti i campi vuoti tranne il campo con il nome dell'immagine; e se poi continuo compilando gli altri campi, mi genera un'altra riga, con tutti i campi meno quello. Quindi per quel motivo non riesco a visualizzarla nel messaggio corrispondente. Il percorso che mi suggerivi, di creare un'altra tabella e collegarla a quella dei messaggi tramite il loro ID è corretto ma appunto non so come mettere in pratica la teoria.
Non ho ancora trovato ben spiegato il meccanismo di "Join" tra più tabelle, e non saprei come inserire l'ID corrispondente al messaggio (che si troverebbe nella tabella "messaggi"), nel campo id_messaggio della tabella "immagini" relativo al caricamento del nome dell'immagine.
 
ciao
perche dici che ti servono due form?
HTML:
<form name="form1" method="post" action="dove_vuoi.php" enctype="multipart/form-data">
scrivi il tuo nome
    <input name="nome" type="text" id="nome"><br />
<!-- e tutti gli altri campi di input che ti servono-->
inserisci ummagine
    <input type="file"  name="immagine"><br />
    <input name="invia" type="submit" id="invia" value="invia">
</form>
l'importante è che, quando devi caricare i file, che ci sia l'attributo enctype="multipart/form-data"
 
Salve, grazie per l'aiuto, avevo letto che fosse necessario un form a parte (per questioni di session_start) ma evidentemente era un'informazione sbagliata; ho seguito la procedura come hai suggerito, unendo i 2 codici per tutti i controlli, e con le debite modifiche ha funzionato perfettamente. Spero di poter contare ancora sul vostro validissimo appoggio.
Un saluto.
 

Discussioni simili