• User

    Problema con form di upload

    Rieccomi qui, nella speranza di trovare ancora in Voi la soluzione ad un mio problema, ringrazio anticipatamente tutti!
    Ho creato un form in php che mi consente di uploadare un'immagine in mysql in formato blob, poi ho aggiunto una sessione (che lo script riconosce) e vorrei inserire nella stessa tabella, in aggiunta ai dati trasmessi, anche la mail dell'utente.
    E' evidente che mi sono incasinato, non ci sono riuscito.
    Qualcuno sa dirmi dove sbaglio?

    file upload.php:
    <?
    function upload()
    {
    $result = false;
    $immagine = '';
    $size = 0;
    $type = '';
    $nome = '';
    $max_size = 12000000;
    $result = @is_uploaded_file($_FILES['file']['tmp_name']);
    if (!$result)
    {
    echo "Impossibile eseguire l'upload.";
    return false;
    }else{
    $size = $_FILES['file'];
    if ($size > $max_size)
    {
    echo "Il file è troppo grande.";
    return false;
    }
    $type = $_FILES['file']['type'];
    $nome = $_FILES['file']['name'];
    $immagine = @file_get_contents($_FILES['file']['tmp_name']);
    $immagine = addslashes ($immagine);
    $email = $_FILES['email'];
    @include 'config.php';
    $sql = "INSERT INTO immagini (nome, size, type, immagine, email) VALUES ('$nome','$size','$type','$immagine', '$email')";
    $result = @mysql_query ($sql) or die (mysql_error());
    return true;
    }
    }
    ?>
    <?php
    mysql_free_result($Recordset1);
    ?>

    file form_invio.php:

    <?php
    // continua la sessione
    session_start();

    @include 'upload.php';
    if (isset($_FILES['file']))
    {
    upload();
    }
    // includiamo il file di configurazione
    @include "config.php";
    // recupera i dati della sessione
    "Username = " . $_SESSION["id_user"];
    $sql_io = "SELECT email FROM iscrizioni where id_user = ". $_SESSION["id_user"];
    $query_io = @mysql_query($sql_io) or die (mysql_error());
    $row_io = mysql_fetch_array($query_io);
    $io= $row_io['email'];
    echo "
    <h3>Upload</h3>
    <form enctype="multipart/form-data"
    action="".$_SERVER['PHP_SELF']."" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="12000000" />
    <input type="file" name="file" size="40" />
    <input type="hidden" name="email" value="<? $io; ?>" />
    <input type="submit" value="Invia" />
    </form>
    <br /><a href="link.php">Elenco</a>";
    ?>

    Grazie ancora!
    Marco


  • User Attivo

    Nello specifico non dici qual è il problema che ti dà, ma guardando il codice il problema che salta subito all'occhio è che nel campo dell'input nascosto con name='email' , il value usa gli short tag (<? anzichè <?php che non funzionano se il server non è settato per riconoscerli) e soprattutto manca l' echo per far stampare il valore estratto dalla query. In pratica nel tuo codice quel valore del form rimane sempre vuoto.

    Poi ci sono altri passaggi che non capisco, ma esulano dalla tua richiesta.

    EDIT: Guardando meglio, gli short tag sono all'interno della stringa echo! Quindi il value viene stampato preceduto da <? e seguito dal punto e virgola. Ma la stringa php si interrompe subito dopo trovando il tag di chiusura. Togli i due short tag, togli il punto e virgola e riprova.


  • User

    Giusto, mi sono spiegato molto male....sorry!
    Allora, il problema era che dal form_invio.php non riuscivo a passare nel campo nascosto

    <input type="hidden" name="email" value="<? $io; ?>" />

    l'indicazione della e-mail, la giusta sintassi è;

    <input type="hidden" name="email" value="$io" />

    mentre quella del file upload.php:

    <?
    function upload()
    {
    $result = false;
    $immagine = '';
    $size = 0;
    $type = '';
    $nome = '';
    $max_size = 12000000;
    $io = $email;
    $result = @is_uploaded_file($_FILES['file']['tmp_name']);
    if (!$result)
    {
    echo "Impossibile eseguire l'upload.";
    return false;
    }else{
    $size = $_FILES['file'];
    if ($size > $max_size)
    {
    echo "Il file è troppo grande.";
    return false;
    }
    $type = $_FILES['file']['type'];
    $nome = $_FILES['file']['name'];
    $email = $_POST['email'];
    $immagine = @file_get_contents($_FILES['file']['tmp_name']);
    $immagine = addslashes ($immagine);
    @include 'config.php';
    $sql = "INSERT INTO immagini (nome, size, type, immagine, email) VALUES ('$nome','$size','$type','$immagine','$email')";
    $result = @mysql_query ($sql) or die (mysql_error());
    return true;
    }
    }
    ?>
    <?php
    mysql_free_result();
    ?>

    Ora riesco ad inserire tutti i record in mysql ma, mi piacerebbe, che alla fine dell'upload mi caricasse un'altra pagina php....avete qualche suggerimento?
    Grazie ancora....


  • User Attivo

    Il sistema più semplice è usare la funzione header() alla fine dello script upload.php
    [PHP]header('Location: http://www.tuosito.it/pagina-finale.php');[/PHP]
    http://www.w3schools.com/php/func_http_header.asp