upload foto foto rinominata

Ciao a tutti, volevo sostituire il vecchio script che utilizzavo per l'upload con questo che rinomina anche la foto con un nome casuale.

Lo script funziona alla perfezione, infatti la foto viene caricata correttamente nella cartella, il problema però è che quando faccio un'inserimento tramite form che mi stamperà il path nel database, il path che mi stampa non viene rinominato e quindi non mi visualizza nulla, come posso fare? grazie a tutti

questo è il codice

//questa è la parte interessata

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) { 

$insertSQL = sprintf("INSERT INTO prodotti (id_menu, id_sottomenu,codice, titolo, foto, scheda) VALUES (%s, %s, %s, %s, %s, %s)", 

GetSQLValueString($_POST['id_menu'], "text"),

GetSQLValueString($_POST['id_sottomenu'], "text"), 

GetSQLValueString($_POST['codice'], "text"), 

GetSQLValueString($_POST['titolo'], "text"), 

GetSQLValueString($_FILES['foto']['name'], "text"), 

GetSQLValueString($_POST['scheda'], "text")); 

mysql_select_db($database_conn, $conn); 

$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error()); 

// UPLOAD DEL FILE

// Your file name you are uploading

$file_name = $HTTP_POST_FILES['foto']['name'];

// random 4 digit to add to our file name

// some people use date and time in stead of random digit

$random_digit=rand(00000000,99999999);

//combine random digit to you file name to create new file name

//use dot (.) to combile these two variables

$new_file_name=$random_digit.$file_name;

//set where you want to store files

//in this example we keep file in folder upload

//$new_file_name = new upload file name

//for example upload file name cartoon.gif . $path will be upload/cartoon.gif

$path= "image_files/".$new_file_name;

if($ufile !=none)

{

if(copy($HTTP_POST_FILES['foto']['tmp_name'], $path))

{

echo "Successful<BR/>";

//$new_file_name = new file name

//$HTTP_POST_FILES['ufile']['size'] = file size

//$HTTP_POST_FILES['ufile']['type'] = type of file

echo "File Name :".$new_file_name."<BR/>";

echo "File Size :".$HTTP_POST_FILES['foto']['size']."<BR/>";

echo "File Type :".$HTTP_POST_FILES['foto']['type']."<BR/>";

}

else

{

echo "Error";

}

}

}
inviato 6 anni fa
cloude
X 0 X

Esegui la query prima di cambiare il nome.

Inoltre nel tuo database c'è un campo per il nome del file? Perchè dalla query non si può evincere se esiste o meno.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ciao Marios grazie mille sempre per l'aiuto.

Dunque si il campo per il nome del file è 'foto' di tipo varchar  dove andrà a stampare solo il path della foto.

Infatti se carico una foto che si chiama casa.jpg, nel campo mi stampa casa.jpg però la  foto viene caricata 432433casa.jpg  e non riesco a visualizzarla.

Ho provato a inserire prima lo script del caricamento foto e poi la query dell'inserimento dei record ma non va :(

risposto 6 anni fa
cloude
X 0 X

Ho ridato un occhio allo script. Ieri sera ero un po' cotto.

Dunque: nel database tu salvi il nome della foto che ti arriva, senza nessuna modifica per cui: casa.jpg.

A video invece stampi il nome modificato 432433casa.jpg.

Dovresti fare prima la modifica del nome del file e dopo salvare il nuovo nome del file nel database.

P.S. un consiglio che ti do importante: fa l'indentazione del tuo codice.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Si perfettamente, perchè nel database viene il stampato il path originale della foto e quindi a video non visualizza la foto perchè cerca il nuovo path della foto.

p.s. si hai ragione però non saprei come formattarlo per bene, farei solo peggio.

Comunque ho provato a fare eseguire prima lo script per l'upload e poi l'inserimento nel database, ma ho questo errore

Warning: copy() [function.copy]: Filename cannot be empty in D:\Inetpub\webs\ortopediamarrait\inserisci_prodotto.php on line 91

error

il codice

$editFormAction = $_SERVER['PHP_SELF']; 
if (isset($_SERVER['QUERY_STRING'])) { 
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); 
} 
// UPLOAD DEL FILE
$file_name = $HTTP_POST_FILES['foto']['name'];
$random_digit=rand(00000000,99999999);
$new_file_name=$random_digit.$file_name;
$path= "image_files/".$new_file_name;
if($ufile !=none)
{
if(copy($HTTP_POST_FILES['foto']['tmp_name'], $path))
{
echo "Successful<BR/>";
echo "File Name :".$new_file_name."<BR/>";
echo "File Size :".$HTTP_POST_FILES['foto']['size']."<BR/>";
echo "File Type :".$HTTP_POST_FILES['foto']['type']."<BR/>";
}
else
{
echo "Error";
}
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) { 
$insertSQL = sprintf("INSERT INTO prodotti (id_menu, id_sottomenu,codice, titolo, foto, scheda) VALUES (%s, %s, %s, %s, %s, %s)", 
GetSQLValueString($_POST['id_menu'], "text"),
GetSQLValueString($_POST['id_sottomenu'], "text"), 
GetSQLValueString($_POST['codice'], "text"), 
GetSQLValueString($_POST['titolo'], "text"), 
GetSQLValueString($_FILES['foto']['name'], "text"), 
GetSQLValueString($_POST['scheda'], "text")); 

mysql_select_db($database_conn, $conn); 
$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error()); 

}
risposto 6 anni fa
cloude
X 0 X

L'indentazione falla aggiungendo 4 spazi ogni volta che c'è un annidamento (ad esempio dopo l'if e via dicendo).

L'errore che riporta è in questa riga:

if(copy($HTTP_POST_FILES['foto']['tmp_name'], $path))

Prova a sostituirla così:

if(copy($HTTP_POST_FILES['foto']['name'], $path))

Inoltre quando fai la query per inserire i dati nel database usa direttamente il nome del nuovo file per cui questo:

GetSQLValueString($_FILES['foto']['name'], "text"),

Lo fai diventare così:

GetSQLValueString($new_file_name, "text"),
risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ok grazie seguirò il tuo consiglio, per la formattazione, spero solo di non fare peggio :D

Comunque ho provato a sostituire quelle due righe:

l'errore è lo stesso

Warning: copy() [function.copy]: Filename cannot be empty in D:\Inetpub\webs\ortopediamarrait\inserisci_prodotto.php on line 87

però provando a fare l'upload della foto qualcosa è cambiato, adesso nel database mi stampa la foto con il nome rinominato, però il problema ora è che non effettua l'upload della foto.

risposto 6 anni fa
cloude
X 0 X

Invece di HTTP_POST_FILE prova ad usare $file_name.

Il path è corretto?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ho cambiato quella riga l'errore è sempre lo stesso e inserendo il record adesso non stampa più correttamente il path, ma stampa solo i numeri così 2432423.jpg

Si prima il path che stampava nel database era corretto, però il problema è l'upload della foto che non viene effettuato, riposto il codice spero che vada bene così:

$editFormAction = $_SERVER['PHP_SELF']; 
    if (isset($_SERVER['QUERY_STRING'])) { 
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); 
  } 
// UPLOAD DEL FILE
$file_name = $HTTP_POST_FILES['foto']['name'];
$random_digit=rand(00000000,99999999);
$new_file_name=$random_digit.$file_name;
$path= "image_files/".$new_file_name;
    if($ufile !=none)
  {
if(copy($HTTP_POST_FILES['foto']['name'], $path))
{
   echo "Successful<BR/>";
   echo "File Name :".$new_file_name."<BR/>";
   echo "File Size :".$HTTP_POST_FILES['foto']['size']."<BR/>";
   echo "File Type :".$HTTP_POST_FILES['foto']['type']."<BR/>";
  }
else
  {
echo "Error";
 }
}
// FINE UPLOAD DEL FILE
   if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) { 
$insertSQL = sprintf("INSERT INTO prodotti (id_menu, id_sottomenu,codice, titolo, foto, scheda) VALUES (%s, %s, %s, %s, %s, %s)", 
                     GetSQLValueString($_POST['id_menu'], "text"),
                     GetSQLValueString($_POST['id_sottomenu'], "text"), 
                     GetSQLValueString($_POST['codice'], "text"), 
                     GetSQLValueString($_POST['titolo'], "text"), 
                     GetSQLValueString($new_file_name, "text"), 
                     GetSQLValueString($_POST['scheda'], "text")); 

mysql_select_db($database_conn, $conn); 
$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error()); 
}
risposto 6 anni fa
cloude
modificato 6 anni fa
X 0 X

Per curiosità, ma tu stai caricando dal tuo form una foto si o no?

Perchè l'errore si genera per il fatto che non esiste nessun file e il nome del file che ottieni è solamente dato da numeri.

Tu non stai caricando nessuna foto dal tuo form, per questo ottieni l'errore. Fa un controllo sui dati che stai ricevendo.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

L'errore che ho cioè questo:

Warning: copy() [function.copy]: Filename cannot be empty in

D:\Inetpub\webs\....\inserisci_prodotto.php on line 92

Error

Lo ricevo quando apro la pagina per l'inserimento in alto a sinistra e non in un pagina bianca, quindi posso effettuare lo stesso l'inserimento, però la foto così come gli altri dati ancora devono essere caricati, ma quando compilo tutti i campi del form, compreso la foto, e poi quando clicco su ok per l'invio ottengo questo errore qui:

Warning: copy(busto.JPG) [function.copy]: failed to open stream: No such file or directory in D:\Inetpub\webs\.....\inserisci_prodotto.php on line 92

Error

risposto 6 anni fa
cloude
X 0 X

Inserisci un controllo all'inizio per vedere se si stanno ricevendo dei dati, se non si ricevono presenti solo il form. Il primo problema si risolve.

Per il secondo problema, rimetti tmp_name.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ho rimesso di nuovo tmp_name e ora funziona! grazie mille Marios!

risposto 6 anni fa
cloude
X 0 X

Di niente.

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda