- Home
- Categorie
- Coding e Sistemistica
- PHP
- Abbinare più immagini ad un record
-
niente da fare, ho sostituito il tutto ma non ottengo nessun upload.
Questo script lo utilizzavo e lo utilizzo nel mio sito per inserire una immagine abbinata ad un record (ed il nome diventa il numero dell'id )e funziona perfettamente visto che mi serve inserire più immagini nello stesso record (articolo news o altro) ho inserito un ciclo di for sia nel form che nella pagina che inserisce il record nel db.
Anche con le modifice da Voi consigliatemi memorizza i dati nel db, ma non effettua l'upload delle immagini. Ho però notato che nella pagina di prova che ho fatto per vedere se funziona lo script non riesce a dare un nome diverso alle due immagini abbinate al recod, vi segnalo le tre pagine utilizzate in quanto ho paura che non riesca a spiegare bene il problema:Pagina form (completate voi in quanto non mi permette di inserire il link completo)
srcity.it/prova_immagini/form1.phpPagina inserimento
srcity.it/prova_immagini/insert.phpPagina lettura
srcity.it/prova_immagini/VisualizzaFoto.phpVi prego di aiutarmi, risolverei tutti i miei problemi
-
Ciao giovy58..
Prima di tutto ti faccio una domanda ?
Sei su hosting windows ?
-
Ciao MZ, si sono su hosting Windows su ARUBA
-
Mi avete abbandonato?:bho:
-
Ciao giovy58,
ho provato ad inserire un'immagine ed in effetti c'e' qualcosa che non funziona.
Prova a postare il codice di "insert.php" e "VisualizzaFoto.php".
-
Sicuro che nella variabile $percorso vada impostato "../public/img_foto/" e non "public/img_foto/".
Se lo script che deve spostare la foto nella cartella pubblic, si trova allo stesso livello della cartella, "../" non serve, in quanto obbligano lo script a tornare indietro di un livello superire per cercare la cartella dove posizionare i file.
-
Si, sono sicuro in quanto è in una cartella superiore del sito, e tralarto con una sola immagine funziona, a dir la verità anche con due ci sono riuscito, ma devo riscrivere sempre la routine, e mi volevo evolvere un pochino(visto che non capsco nulla di programmazione) utilizzando il ciclo di for, che potrebbe avere degli sviluppi interessanti, ad esempio si potrebbe decidere prima quante immagini impostare per ogni articolo etc.
-
Secondo me non funziona per il fatto che cerchi di inviare più immagini nella stessa cartella public rinominandole tutte con lo stesso nome.
mysql_db_query(Sql125150_5, $comando);
for(...)
{
$ultimo_id=mysql_insert_id();
$file_temp=($_FILES['userfile.$numFoto']['tmp_name']);
$percorso="../public/img_foto/";
$nuovo_nome=$percorso.$ultimo_id.".jpg";Impostato così, $ultimo_id è sempre uguale ad ogni ciclo del FOR dato che l'inserimento del DataBase è unico e viene eseguito prima di entrare nel FOR.
Di conseguenza $nuovo_nome=$percorso.$ultimo_id.".jpg"; sarà sempre uguale per ogni foto inviata, causando sovrascrizioni oppure errori.
Per questo se ripeti due volte la routin funziona, perchè crei un nuovo inserimento nel DB e quindi un nuovo ID da assegnare alla foto.
-
Hai perfettamente ragione per la prima parte, in quanto l'id rimane lo stesso, però quando inserisco due foto nel form inserisco due immagini con nome file diversi e nella pagina che upload le immagini ripeto due volte la routine dell'upload con i due nomefile diversi, ma l'id del record al quale sono abbinati è identico cioè unico.
Faccio l'esempio solo perchè ho paura di non sapermi spiegare:
Nel Form che in questo caso è un html
[HTML]<tr valign="baseline"> <td nowrap align="right">Foto</td>
<td> <input name="userfile" type="file" id="foto"></td></tr>
<tr valign="baseline"> <td nowrap align="right">Foto 2</td>
<td> <input name="userfile1" type="file" id="foto"></td></tr>
[/HTML]Nella pagina di inserimento
[PHP]$ultimo_id=mysql_insert_id(); //valore di foto_id dopo l'inserimento
$file_temp=($_FILES['userfile']['tmp_name']); //file temporaneo che contiene l'immagine caricata
$percorso="../public/img_foto/"; //cartella sul server dove verrà spostata la foto
$nuovo_nome=$percorso.$ultimo_id.".jpg"; //nuovo nome dell'immagine
echo "$nuovo_nome <br>";
if (is_uploaded_file($file_temp)){
move_uploaded_file($file_temp,$nuovo_nome); //verifica se il file è stato caricato sul server}
header("Location:VisualizzaFoto.php"); // sposto l'immagine nella cartella e vado alla pagina di visualizzazione
} else {
header("Location:Errore.php"); // vado alla pagina di errore
}
$s='bis';
$ultimo_id=mysql_insert_id(); //valore di foto_id dopo l'inserimento
$file_temp=($_FILES['userfile1']['tmp_name']); //file temporaneo che contiene l'immagine caricata
$percorso="../public/img_foto/"; //cartella sul server dove verrà spostata la foto
$nuovo_nome=$percorso.$s.$ultimo_id.".jpg"; //nuovo nome dell'immagine
echo "$nuovo_nome <br>";
if (is_uploaded_file($file_temp)){
move_uploaded_file($file_temp,$nuovo_nome); //verifica se il file è stato caricato sul server}
[/PHP]Fin qui ci sono, ma se riuscissi a fare lo stesso lavoro con il ciclo di for, potrei decidere a priori anche in numero di foto da inserire, e penso che la cosa possa servire anche ad altri
-
Nello script che hai postato, quello con il FOR, il nome di destinazione non cambia mai, mentre nella routin ripetuta si.
FOTO 1:
$nuovo_nome=$percorso.$ultimo_id.".jpg";FOTO 2:
$s='bis';
$nuovo_nome=$percorso.$s.$ultimo_id.".jpg";Se ci fai caso $nuovo_percorso di FOTO1 è diverso da $nuovo_percorso di FOTO2 perchè inserisci "bis".
Prova a mettere nel ciclo FOR questa stringa e fare un test
$nuovo_nome=$percorso.$numFoto.ultimo_id.".jpg";
-
Test effettuato, sempre lo stesso errore,
../public/img_foto/13.jpg si è verificato un errore durante l'upload: ../public/img_foto/23.jpg si è verificato un errore durante l'upload: ../public/img_foto/33.jpg si è verificato un errore durante l'upload:Come vedi il nome lo sistema, ma non effettua l'upload delle immagini.
E' come se avesse il nome ma non l'immagine da uplodare cioè voglio dire mi dà l'impressione che dal form alla pagina di questo script l'indicazione dell'immagina da uplodare si perdesse, mtre il nome se lo costruisce nel ciclo di for non so se ho reso l'idea di quello che penso.
-
Provare a togliere il punto in questi due pezzi di codice
<input name='userfile*.*$numFoto' ...
$file_temp=($_FILES['userfile*.*$numFoto']['tmp_name']);
Cambiando in
<input name='userfile$numFoto' ...
$file_temp=($_FILES['userfile$numFoto']['tmp_name']);
-
Niente da fare, sempre lo stesso errore.