Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Recuperare un'immagine

  1. #1

    Recuperare un'immagine

    Salve, non riesco a recuperare un'immagine; in pratica caricando l'immagine dal sito si crea solo la cartella, ma l'immagine non viene caricata al suo interno, e l'indirizzo ipotetico della collocazione dell'imagine all'interno del server non viene mai creato. Avevo trovato un form su internet un anno fà per poter caricare l'immagine, e dopo averlo modificato sono riuscito a farlo funzionare, ma adesso non resco a modificare un'immagine precedentemente inserita, o a inserirla se non è stato fatto in principio. Vi posto il codice, ma se avete un esempio vostro o una guida che spieghi come fare vi prego di postarmeli.
    I dati li prelevo da un form così:
    codice:
    <label for="foto">Foto</label><input type="file" name="foto" id="foto" />
    Poi dopo l'invio dei dati lo catturo in questo modo:
    Codice PHP:
    $foto mysql_real_escape_string($_FILES["image"]["name"]); 
    E infine li cerco di elaborare l'immagine:
    Codice PHP:
    if($foto ""){ echo 'Vuoto'; }{ $intDir $_SERVER['DOCUMENT_ROOT'].'/upload/prova2/'; if (is_dir($intDir)) { echo "La directory esiste"; do { if (is_uploaded_file($_FILES['image']['tmp_name'])) { // Controllo che il file non superi i 3145278 KB if ($_FILES['image']['size'] > 3145728) { $msg = "

    Il file non deve superare i 3145278 KB!!</p>"; break; } // Ottengo le informazioni sull'immagine list($width$height$type$attr) = getimagesize($_FILES['image']['tmp_name']); // Controllo che le dimensioni (in pixel) non superino 1500x1500 if (($width > 1500) || ($height > 1500)) { $msg = "

    Dimensioni non corrette!!</p>"; break; } // Controllo che il file sia in uno dei formati GIF, JPG o PNG if (($type!=1) && ($type!=2) && ($type!=3)) { $msg = "

    Formato non corretto!!</p>"; break; } // Verifico che sul sul server non esista già un file con lo stesso nome // In alternativa potrei dare io un nome che sia funzione della data e dell'ora if (file_exists('/upload/prova2/'.$_FILES['image']['name'])) { $msg = "

    File già esistente sul serverRinominarlo e riprovare.</p>"; break; } // Sposto il file nella cartella da me desiderata if (!move_uploaded_file($_FILES['image']['tmp_name'], '/upload/prova2/'.$_FILES['image']['name'])) { $msg = "

    Errore nel caricamento dell'immagine!!</p>"; break; }else{ $foto = "/upload/prova2/".$_FILES['image']['name']; } } } while (false); echo $msg; } else { mkdir($intDir, 0777); echo "Directory creata";{ do { if (is_uploaded_file($_FILES['image']['tmp_name'])) { // Controllo che il file non superi i 18 KB if ($_FILES['image']['size'] > 3145728) { $msg = "

    Il file non deve superare i 18 KB!!</p>"; break; } // Ottengo le informazioni sull'
    immagine list($width$height$type$attr) = getimagesize($_FILES['image']['tmp_name']); // Controllo che le dimensioni (in pixel) non superino 160x180 if (($width > 1500) || ($height > 1500)) { $msg = "

    Dimensioni non corrette!!</p>"; break; } // Controllo che il file sia in uno dei formati GIF, JPG o PNG if (($type!=1) && ($type!=2) && ($type!=3)) { $msg = "

    Formato non corretto!!</p>"; break; } // Sposto il file nella cartella da me desiderata if (!move_uploaded_file($_FILES['image']['tmp_name'], '/upload/prova2/'.$_FILES['image']['name'])) { $msg = "

    Errore nel caricamento dell'immagine!!</p>"; break; }else{ $foto = "/upload/prova2/".$_FILES['image']['name']; } } } while (false); echo $msg; }} $aggiornafoto = mysql_query("UPDATE utenti SET foto='$foto' WHERE id = '$id' AND username='$username'"); 
    Cosa sbaglio?

  2. #2
    Ciao,


    L'indice dell'array $_FILES 'image' non esiste, è da usare il nome del campo file nella form.
    Dovresti usare questo per riferirti alla foto caricata dal form.

    Codice PHP:
    $_FILES['foto'

  3. #3
    Ciao, ho effettuato la correzione, ma non funziona lo stesso. Ho provato a stampare il valore $foto e il risultato è che $foto = 0 ; quindi penso che non riesca a prendere il valore o sbaglio?

  4. #4
    Puoi postare il codice completo che utilizzi per questo script ?

  5. #5
    Certamente, ti posto il codice; ovviamente ho lasciato solo ciò che crea problemi, per come è messo questo form mi appaiono sempre i messaggi: "directory creata correttamente" e "immagine non caricata". I messaggi li ho messi io, ma il form l'ho trovato in più di un sito ed è sempre lo stesso, quindi credo si faccia per forza così, non ho trovato guide alternative e non sò quale sia il problema. Comunque il form modifica le informazioni del profilo e funziona per tutto tranne che per l'immagine (l'ho pulito dai campi funzionanti per vederci meglio).
    Prova anche tu e dammi la tua opinione.
    Codice PHP:
          <?php               echo '<input type="hidden" name="id" value="'.$_SESSION["id"].'" />';                       echo '<input type="hidden" name="username" value="'.$_SESSION["username"].'" />';                       echo '<table width=100% height=100%>';               echo '<tr><td colspan="2"><label for="foto">Foto</label><input type="file" name="image" id="image" size="40"/></span></td></tr>';               echo '<tr><td colspan="4" align="center"><input type="submit" id="submit" name="Invio" value="Invia"></td></tr></table>';  //recupero dati dal form $id = mysql_real_escape_string($_POST['id']); $username = mysql_real_escape_string($_POST['username']); $image = mysql_real_escape_string($_FILES['image']['name']);  if(isset($_POST['Invio'])){ $mio_path = "/upload/"; // indica il percorso dove vuoi creare la nuova directory $nome_dir = "prova"; // indica il nome che vuoi dare alla directory if(!mkdir("upload/".$username, 0777)) {//$mio_path.$nome_dir     0755 echo "impossibile creare la nuova directory." ; }else{ echo "directory creata correttamente."; } do { if (is_uploaded_file($_FILES['image']['tmp_name'])) {     // Controllo che il file non superi i 18 KB     if ($_FILES['image']['size'] > 18) {       $msg = "

    Il file non deve superare i 18 KB!!</p>";       break;     }     // Ottengo le informazioni sull'immagine     list($width$height$type$attr) = getimagesize($_FILES['image']['tmp_name']);     // Controllo che le dimensioni (in pixel) non superino 160x180     if (($width > 1500) || ($height > 1500)) {       $msg = "

    Dimensioni non corrette!!</p>";       break;     }     // Controllo che il file sia in uno dei formati GIF, JPG o PNG     if (($type!=1) && ($type!=2) && ($type!=3)) {       $msg = "

    Formato non corretto!!</p>";       break;     }     // Verifico che sul sul server non esista già un file con lo stesso nome     // In alternativa potrei dare io un nome che sia funzione della data e dell'ora     if (file_exists('upload/prova/'.$_FILES['image']['name'])) {       $msg = "

    File già esistente sul serverRinominarlo e riprovare.</p>";       break;     }     // Sposto il file nella cartella da me desiderata     if (!move_uploaded_file($_FILES['image']['tmp_name'], 'upload/prova/'.$_FILES['image']['name'])) {       $msg = "

    Errore nel caricamento dell'immagine!!</p>";       break;     }else{            $foto="upload/prova/".$_FILES['image']['name'];          }   }else{echo 'immagine non caricata'; } } while (false); echo $msg;                        }
    P.S. se ci sono errori di {} o simili è perchè l'ho copiato e incollato senza badare molto al resto della pagina, per il resto ho controllto la sintassi e non ci sono errori, il problem aè hce non vede l'immagine.

  6. #6
    Dallo script che stai usando, si vede che viene creata una directory con l'username dell'utente con mkdir("upload/".$username, e poi in fondo si tenta di caricare l'immagine nel percorso upload/prova/" , è corretto questa cosa di caricare le foto nella cartella prova ? la foto non dovrebbe essere caricata nella cartella personale dell'utente creata in precedenza ?

  7. #7
    Si, è corretta perchè le modifiche le ho fatte per facilitare il passaggio, in realtà lo script per creare la cartella l'avevo anche tolto, di conseguenza avevo messo la cartella prova come fissa per metterci dentro l'immagine, La prima carte fino al "do {" la puoi anche levare, l'ho messa per farti vedere quelo che dovrebbe avvenire, visto che la cartella la crea sempre è esatto. Inoltre se alla fine del ciclo provi a fare "echo $foto;" mi esce il valore 0, che esce quando il campo viene considerato nullo; quindi ne deduco che il problema dovrebbe essere questo:
    Codice PHP:
    do { if (is_uploaded_file($_FILES['image']['tmp_name'])) { 
    questa condizione non si verifica mai, infatti se alla fine provi a mettere:
    Codice PHP:
    } else{echo 'errore';

    ti uscirà sempre la scritta errore.
    Fammi sapere se capisci il perchè.

  8. #8
    Ho fatto questo test semplicissimo:
    Codice PHP:
    if (is_uploaded_file($_FILES['image']['tmp_name'])) { echo 'caricata'; }else{ echo 'non caricata'; } 
    Visualizza sempre "non caricata". Quindi non prende l'immagine dal form, oppure è sbagliato come lo scrivo e la condizione non può realizzarsi?

  9. #9
    Strano, io con il codice che ti posto carico la foto tranquillamente in locale, e alla fine del ciclo stampo il suo percorso con FOTO: ....

    Codice PHP:
            <form method="POST" enctype="multipart/form-data">
     <?php               echo '<input type="hidden" name="id" value="'.$_SESSION["id"].'" />';                       
                          echo 
    '<input type="hidden" name="username" value="'.$_SESSION["username"].'" />';                       
                          echo 
    '<table width=100% height=100%>';              
                          echo 
    '<tr><td colspan="2"><label for="foto">Foto</label><input type="file" name="image" id="image" size="40"/></span></td></tr>';               
                          echo 
    '<tr><td colspan="4" align="center"><input type="submit" id="submit" name="Invio" value="Invia"></td></tr></table></form>';  
                          
    //recupero dati dal form 
                          
    $id mysql_real_escape_string($_POST['id']); $username mysql_real_escape_string($_POST['username']); $image mysql_real_escape_string($_FILES['image']['name']);  
                                             if(isset(
    $_POST['Invio'])){ 
                                                 
    $mio_path "/upload/"
                          
    // indica il percorso dove vuoi creare la nuova directory 
                          
    $nome_dir "prova"
                          
    // indica il nome che vuoi dare alla directory 
                          
    do { if (is_uploaded_file($_FILES['image']['tmp_name'])) {    
                           
    // Controllo che il file non superi i 18 KB     
                           
    if ($_FILES['image']['size'] > 100000) {       $msg "

    Il file non deve superare i 18 KB!!</p>"
    ;       break;     }     
                           
    // Ottengo le informazioni sull'immagine    
                            
    list($width$height$type$attr) = getimagesize($_FILES['image']['tmp_name']);     
                            
    // Controllo che le dimensioni (in pixel) non superino 160x180     
                            
    if (($width 1500) || ($height 1500)) {       $msg "

    Dimensioni non corrette!!</p>"
    ;       break;     }     
                            
    // Controllo che il file sia in uno dei formati GIF, JPG o PNG     
                            
    if (($type!=1) && ($type!=2) && ($type!=3)) {       $msg "

    Formato non corretto!!</p>"
    ;       break;     }     
                            
    // Verifico che sul sul server non esista già un file con lo stesso nome     
                            // In alternativa potrei dare io un nome che sia funzione della data e dell'ora     
                            
    if (file_exists('upload/prova/'.$_FILES['image']['name'])) {       $msg "

    File già esistente sul server. Rinominarlo e riprovare.</p>"
    ;       break;     }   
                              
    // Sposto il file nella cartella da me desiderata     
                            
    if (!move_uploaded_file($_FILES['image']['tmp_name'], 'upload/prova/'.$_FILES['image']['name'])) {       $msg "

    Errore nel caricamento dell'immagine!!</p>"
    ;       break;     }else{            $foto="upload/prova/".$_FILES['image']['name'];          }   }else{echo 'immagine non caricata'; } } while (false); echo $msg;                        } ?> 
                <?php echo "FOTO:"$foto?>

  10. #10
    Ok, adesso funge, ma non nella stessa pagina: ho dovuto creare una nuova pagina completamente bianca per farlo andare; adesso dovrò analizzare la pagina vecchia per capire qual'è il conflitto (apparentemente a me le due form sembrano uguali, deve esserci un errore mloto piccolo di mezzo). Grazie mille per l'aiuto.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.