help immagini e php

Ciao a tutti sto avendo alcuni problemi con inserimento di immagini in db utilizzando php.

Premesso che ho provato lo script che era presente su questo sito in realtà non mi funziona. O meglio vengono inseriti campi vuoti.

Vi spiego meglio il problema.

Devo inserire delle radiografie in un database e una volta inserite recuparle in una anagrafica già fatta e funzionante.

Grazie ancora del vostro aiuto :bye:

inviato 11 anni fa
bluesman
X 0 X

Devi riportare l'errore che ricevi, oppure riporta il contenuto che viene memorizzato nel DB. Così è difficile aiutarti.

Hai letto le avvertenze alla fine dell'articolo sui possibili problemi che si potrebbero avere?

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ciao scusa se non ho postato prima. Allora ho riscritto praticamente  tutto il codice  e ottengo un errore di warning che è il seguente:

Warning: fopen("\\php2","r") - Invalid argument in \upload.php on line 79

Warning: Supplied argument is not a valid File-Handle resource inc\upload.php on line 79

 <? 

# Imposto il valore delle variabili 
# per la connessione e gestione del DB 
$hostname = "localhost"; // host 
$username = ""; // login 
$password = ""; // password 
$userTABLE = "file"; // nome tabella 
$dbName = "testDB1"; // nome DataBase 

# Imposto le dimensioni max in byte 
# dei file da salvare in MySql 
$size="30000"; 

# Preparo la form per l'iserimento 
# del file 

echo "<b>Prova lo script inserendo qui il tuo file!</b><br> 
<font color=\"red\"> 
Non puoi archiviare file più grandi di $size bytes.</font><br> 
<br> 
<FORM ENCTYPE=\"multipart/form-data\" ACTION=\"$PHP_SELF\" METHOD=\"POST\"> 
Inserisci il file da archiviare <br> 
<INPUT NAME=\"userfile\" TYPE=\"file\"> 
<br><INPUT TYPE=\"submit\" name=\"upload\" VALUE=\"Salva File\"> 
</FORM>"; 

// controlo se il bottone sumbit è stato premuto, 
// se la condizione è vera proseguo con lo script 
if ($upload) { 

// Stampo alcune informazioni riguardanti 
// il file da salvare 
echo "<b>Nome file: <font color=\"#0000FF\">".$userfile_name."</font><br>"; 
echo "Mime types: <font color=\"#0000FF\">".$userfile_type."</font><br>"; 
echo "Size file: <font color=\"#0000FF\">".$userfile_size."</font> bytes</b><br>"; 

// Salvo in $max la dimensine del file 
// da archiviare in mysql 
$max = filesize($userfile); 
// controllo quindi se $max sia più grande delle 
// dimensioni massime  settate in $size  
if ($max > "$size"){ 
// se $max è più grande bloccho lo script 
// e invio un messaggio 
die ("<b><br><font color=\"red\"> 
Ops... ATTENZIONE!!!<br> 
Il tuo file $userfile_name corrisponde a $userfile_size bytes,<br> 
prova con un altro file di dimensioni max = $size bytes</font></b>"); 
} 

// Imposto i tipi di mime e quindi l'estensioni 
// dei file da abilitare all'archiviazione in MySql 
 if ( 
     ($userfile_type == "image/pjpeg") // file immagini jepg jpeg 
     or ($userfile_type == "image/gif") // file immaggini gif 
     or ($userfile_type == "image/x-png") // file immagini png 
    #or ($userfile_type == "image/bmp") // file immagini bmp 
     or ($userfile_type == "video/avi") // video avi 
     or ($userfile_type == "application/x-zip-compressed") // file zip 
     or ($userfile_type == "application/pdf") // file pdf 
     or ($userfile_type == "audio/wav") // file audio wav 
    #or ($userfile_type == "text/html") // file html 
  ) 

{ 

// Apro il file $userfile in modalità di lettura 
// e salvo il contenuto nella variabile $imageDATA 
//  qui mi viene restituio il messaggio di errore    
   $imageDATA = addslashes(fread(fopen($userfile, "r"), filesize($userfile))); 

  //Connessione a MySql e al database 
   MYSQL_CONNECT($hostname, $username, $password) 
    OR DIE("Non riesco a connettermi a MySql"); 
    @mysql_select_db("$dbName") or die 
      ("Non riesco a selezionare il DB $dbName"); 

// preparo la richiesta SQL da inviare 
// a mysql per inserire i dati nella tabella 


$INSERT = "INSERT INTO $userTABLE values 
('$idnum','$imagedata','$userfile_name','$userfile_type','$userfile_size')"; 
$result = MYSQL_QUERY($insert); 
$query = "SELECT * FROM $userTABLE WHERE(idnum=$idnum)"; 
$INSERT = MYSQL_QUERY($query); 
$idnum = mysql_insert_id(); 
$i++; 
// controllo che il tipo di file inviato sia 
// un immaggine, in modo da stamparne un anteprima 
// in caso contrario restituisco solo l'url per 
// permetterne il downLOAD 
if (($userfile_type == "image/pjpeg") 
or ($userfile_type == "image/gif") 
or ($userfile_type =="image/x-png")){ 
echo "<b><br>Eccoti l'anteprima della tua immaggine</b><br>"; 
echo "<img src=\"tampil.php3?id=$idnum\"><br>"; 
}else{ 
echo "<b><br>Clicca quì per scaricare il tuo file 
<a href=\"tampil.php3?id=$idnum\">$userfile_name</a>\n<br>"; 
} 
echo "Puoi anche scegliere di cliccare qui 
<a href=\"tampil.php3\">tampil.php3</a> per visionare 
l'intero elenco dei file archiviati."; 
MYSQL_CLOSE(); 
/ 
die; 
} 
// Stampo un msg nel caso in cui il 
// tipo di file che l'utente intende archiviare 
// son sia in elenco tra i mime da voi impostati sopra 
echo "<b><br><br><font color=\"red\"> 
$userfile_name Non è un tipo di file abilitato all'archiviazione! 
</font></b>"; 
} 
?> 
 
 

Grazie per l'interessamento e per l'aiuto. :bye:

risposto 10 anni fa
bluesman
modificato 10 anni fa
X 0 X

Il problema è nella variabile $userfile che evidentemente non contiene il percorso ed il nome del file (sembra che il suo valore sia "\\php2")

Non so dirti come mai $userfile ha questo valore, nello script non è indicato esplicitamente. Forse viene da un form ed hai il register_global attivo?

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ciao e grazie per l'aiuto che mi stai dando. In effetti avevo il  register_global attivo ma....

disattivandolo lo script non restiusce nessun errore ma non salva nemmeno una riga. (per la  serie non si impianta ma non funziona  >:(

Scherzi   a parte  ho controllato la lunghezza massima che è di due mega ma anche abbassando il valore nello script non ho risultato .

Spero di venirne a capo :-)

risposto 10 anni fa
bluesman
X 0 X

non puoi disattivare il register_global senza cambiare il modo in cui accedi alle variabili provenienti dal form. Ma questo non è il tuo problema principale.

L'errore che ricevi si riferisce alla riga che tenta di accedere al file uploadato. Quella riga usa la variabile $userfile per indicare il file da leggere ma il contenuto di tale variabile probabilmente non indica il percorso del file in questione.

Prova a vedere il contenuto di $userfile (echo $userfile) per cercare di capire dov'è il problema.

Se il register_global fosse disabilitato avresti dovuto lavorare con le variabili

$_FILES['userfile']['tmp_name']

$_FILES['userfile']['name']

$_FILES['userfile']['type']

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni e grazie per il tuo prezioso aiuto. Allora ho fatto un po di prove stampando il valore di user_file e il percorso che ottengo non è quello corretto ma sempre preceduto da \\php2\nome_file che non capisco da dove gli venga passato.

Se invece metto come campo imput la variabile "userfile_name" il messaggio di waring cambia restituendo il mancato percorso o directory del file.

Spero di essere stato chiaro.

Grazie ancora :'(

risposto 10 anni fa
bluesman
X 0 X

quando viene effettuato l'upload di un file, PHP mette tale file in una cartella temporanea. Questa cartella è impostata nel php.ini pertanto controlla se la direttiva upload_tmp_dir punta ad una cartella reale del tuo PC (attento al ; iniziale che va tolto!)

Così verifichiamo se la variabile $userfile contiene uno "strano" percorso al file solo perché il PHP non sa dove metterlo.

 :bye:

P.S.: ricordati di riavviare Apache!

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni, allora come prima cosa avevo la directori commentata e gli ho dato come percorso c:\windows\temp. modificato il php.ini e riavvato Apache ma come se nulla fosse rimane il percorso\\php2. Ma davo gli venga passato non riesco a capire . :tichedoff:

risposto 10 anni fa
bluesman
X 0 X

dimenticavo Gianni questo è il valore della echo dopo le modifiche

echo c:\\windows\\temp\\php2; Ops... ATTENZIONE.......

Grazie

risposto 10 anni fa
bluesman
X 0 X

ma l'errore rimane giusto? Riesci a verificare che effettivamente viene creato un file in quella directory quando fai l'upload?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

No Gianni l'errore non compare più, ma nella directory temporanea non c'è il file.

risposto 10 anni fa
bluesman
X 0 X

Ma se l'errore non compare, lo script funziona?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

No non da piu errori ma  la tabella file rimane assolutamente vuota :idiot:

risposto 10 anni fa
bluesman
X 0 X

allora forse il problema adesso è un altro  :dunno:

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

non credo perchè nel percorso del file mantiene sempre questo percorso...

pb.gifapache_pb.gifc:\\windows\\temp\\php2

esempio di file caricato .

Perchè ci incolla quel php2???????? 

risposto 10 anni fa
bluesman
X 0 X

sarà il nome temporaneo che da al file uploadato. Se la funzione fopen non ti dà più errore significa che quel percorso è valido e che corrisponde ad un vero file, quello creato temporaneamente da PHP.

Io inizierei a controllare l'esito della INSERT... ma questo è un altro argomento...

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

infatti è quello che sto controllando per ora ti ringrazio dell'aiuto prezioso e buon lavoro :bye:

risposto 10 anni fa
bluesman
X 0 X

Ciao Gianni, ho ancora qualche piccolo problema che non capisco a riguardo del file sopracitato.

Non viene eseguita l'insert nella tabella e non riesco a trovare l'errore, mentre per quello che riguarda il download del file nel caso in cui non sia tra quelli in elenco funziona tranquillamente.

Spero di non stressarti troppo  :-[

grazie

risposto 10 anni fa
bluesman
X 0 X

per capire se c'è qualcosa che non va con la query sostituisci:

$result = MYSQL_QUERY($insert);

con

$result = MYSQL_QUERY($insert); 

if (!$result) {

   die("<pre><b>Errore nella query:</b>\n\n$query\n\n<b>" . mysql_error() . '</b></pre>');

}

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Allora ho provato a inserire la if   e come risposta ottengo semplicemte che

Query was empty

ma non ho la piu pallida idea del perche -------- :tichedoff:

risposto 10 anni fa
bluesman
X 0 X

si vede che la stringa che passi alla funzione mysql_query è vuota  :dunno:

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda