• PHP Form Image Upload

    Ciao a tutti... mi sono appena registrato per chiedervi una mano...

    Allora: io vorrei creare una specie di servizio di upload immagini. mi sono messo alla ricerca e ho trovato questo codice:

    [php]<?php
    //define a maxim size for the uploaded images in Kb
    define ("MAX_SIZE","6500");

    //This function reads the extension of the file. It is used to determine if the file is an image by checking the extension.
    function getExtension($str) {
    $i = strrpos($str,".");
    if (!$i) { return ""; }
    $l = strlen($str) - $i;
    $ext = substr($str,$i+1,$l);
    return $ext;
    }

    //This variable is used as a flag. The value is initialized with 0 (meaning no error found) and it will be changed to 1 if an errro occures. If the error occures the file will not be uploaded.
    $errors=0;
    //checks if the form has been submitted
    if(isset($_POST['Submit']))
    {
    $username = $_POST['username'];
    $email = $_POST['email'];
    //reads the name of the file the user submitted for uploading
    $image=$_FILES['image']['name'];
    //if it is not empty
    if ($image)
    {
    //get the original name of the file from the clients machine
    $filename = stripslashes($_FILES['image']['name']);
    //get the extension of the file in a lower case format
    $extension = getExtension($filename);
    $extension = strtolower($extension);
    //if it is not a known extension, we will suppose it is an error and will not upload the file, otherwize we will do more tests
    if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "eps") && ($extension != "gif"))
    {
    //print error message
    echo '<h1>Unknown extension!</h1>';
    $errors=1;
    }
    else
    {
    //get the size of the image in bytes
    //$_FILES['image']['tmp_name'] is the temporary filename of the file in which the uploaded file was stored on the server
    $size=filesize($_FILES['image']['tmp_name']);

    //compare the size with the maxim size we defined and print error if bigger
    if ($size > MAX_SIZE*1024)
    {
    echo '<h1>You have exceeded the size limit!</h1>';
    $errors=1;
    }

    //we will give an unique name, for example the time in unix time format
    $image_name=$filename;
    //the new name will be containing the full path where will be stored (images folder)
    $newname="images/".$image_name;
    //we verify if the image has been uploaded, and print error instead
    $copied = copy($_FILES['image']['tmp_name'], $newname);
    if (!$copied)
    {
    echo '<h1>Copy unsuccessfull!</h1>';
    $errors=1;
    }}}}

    //If no errors registred, print the success message
    if(isset($_POST['Submit']) && !$errors)
    {
    echo "<h1>File Uploaded Successfully! Thanks.</h1>";
    }

    ?>

    <!--next comes the form, you must set the enctype to "multipart/frm-data" and use an input type "file" -->
    <form name="newad" method="post" enctype="multipart/form-data" action="">
    <table>
    <tr><td><input type="file" name="image"></td></tr>
    </td></tr>
    <tr><td><input name="Submit" type="submit" value="Upload image"></td></tr>
    </table>
    </form> [/php]
    . Lo script funziona alla perfezione. Io l'ho inserito in una pagina con un pò più di grafica, ma la parte in php non la "interpretava". Allora ho inserito il codice php in un'altra pagina ed ho aggiunto al form html action="prova.php"

    [php]<form name="newad" method="post" enctype="multipart/form-data" action="prova.php">
    <table>
    <tr><td><input type="file" name="image"></td></tr>
    </td></tr>
    <tr><td><input name="Submit" type="submit" value="Upload image"></td></tr>
    </table>
    </form>

    [/php]In questo modo riesco a fare l'upload immagini perfettamente.

    Ma io mi chiedo: se qualcuno va li per caricare un'immagine, la carica :D. Ma dopo come fa a prendere il link? o.O

    Come devo modificare il codice perchè l'utente che uppa l'immagine vede il link dopo che è stata caricata? Oppure che viene mandato direttamente all'immagine?

    Non so se mi sono spiegato...

    Grazie.


  • User Attivo

    Innanzitutto spero per te che l'utente sia loggato.

    Sicuramente è così ed allora per ogni utente crei, con php, una cartella univoca per ogni utente. Magari usi l'ID della tabella del DB associato ad un nome che indica le immagini uploadate.
    Esempio cartella:
    img_ - nome statico
    id - ID autoincrement (univoco) della tabella del DB.

    Infine il nome delle immagini uploadate dovrai scriverle in una tabella affinchè possa poi prenderle per visualizzarle e/o lincarle


  • L'utente non è loggato. E non si registra neanche. Questa è la versione senza database. Ne ho trovata un'altra versione molto più semplice. Ho risolto


  • User Newbie

    ciao, scusami potresti postare la versione esatta che funziona....a me dice che non ha effettuato il caricamento seguento le indicazioni del primo post....
    Grazie