• User

    Problema con upload files e riferimenti in database

    Saluti a tutti!

    Ho questo problema:

    Ho un sito in locale basato su LAMP. In pratica, in una pagina è permesso l'invio di file (indipendentemente dal tipo, dimensione, nome, etc., non mi interessano controlli di questo genere.) I file vengono passati ad un'altra pagina (insieme ad un id con metodo GET) che li sposta in una directory con permessi 777. Questo è il codice per la creazione della directory:
    [html]
    $id=$_GET['idAzienda']; $sel = mysql_query("SELECT nome FROM azienda WHERE azienda.idAzienda = $id") or die (mysql_error());
    while ($row = mysql_fetch_assoc($sel)) { $nome = htmlspecialchars(stripslashes(utf8_decode(trim($row[nome]))),ENT_QUOTES);
    mkdir ("./Aziende/$nome", 0777); }
    [/html]
    Ok. Funziona.

    Proseguo con lo spostamento dei file nella cartella appena creata, mediante:

    [html]
    if (!move_uploaded_file($_FILES['visuracamerale']['tmp_name'], "Aziende/$nome/".$_FILES['visuracamerale']['name'])) {
    $flag=0;
    unlink($_FILES['visuracamerale']['tmp_name']); } else {
    $nomefilevisura = $_FILES['visuracamerale']['name'];

     $flag=1;
    }
    
    if (!move_uploaded_file($_FILES['variazvisura']['tmp_name'], "Aziende/$nome/".$_FILES['variazvisura']['name'])) {
    $flag=0;
        unlink($_FILES['variazvisura']['tmp_name']); } else {
        $nomefilevarvis = $_FILES['variazvisura']['name'];  
    
    $flag=1;        
      
    }
    

    .....

    [/html]

    e ho altri campi presi così. Alla fine, ho creato questo:

    [html]
    if ($flag == "1") {

     $insvis="INSERT INTO  visuracamerale(nomefilevisura) VALUES ('$nomefilevisura')";
      mysql_query("$insvis") or die (mysql_error());
      $idvis=mysql_insert_id();
      $insidvis = "INSERT INTO visuraaziende(idVisura, idAzienda) VALUES ('$idvis', '$idAzienda')";  
      mysql_query("$insidvis") or die (mysql_error());  
    
        $insvarvis="INSERT INTO  variazvisura(nomefilevarvis) VALUES ('$nomefilevarvis')";
        mysql_query("$insvarvis") or die (mysql_error());
        $idvarvis=mysql_insert_id();  
        $insidvarvis = "INSERT INTO variazvisaziende(idVariazcam, idAzienda) VALUES ('$idvarvis', '$idAzienda')";
        mysql_query("$insidvarvis") or die (mysql_error());  
    

    .......

    [/html]

    Per memorizzare all'interno del db l'url di ogni file (sono 14 files presi da altrettanti campi nel form nella pagina sorgente).
    Ora, finalmente e purtroppo, il problema:
    Se invio tutti i file, problema non sorge. Se invece ne invio solo alcuni, crea comunque dei riferimenti (id) ad un file che non esiste... in pratica, restituisce un valore in bianco all'interno del db. La richiesta è: esiste un modo per evitare che vengano creati dei riferimenti nulli ma comunque permettendo la creazione all'interno del db dei file inseriti?
    Un esempio per chiarirsi...
    Vorrei che:

    • inserendo solo alcuni files nella pagina con il form di invio, verrebbe riempito il database SOLO con i dati inseriti, trascurando i campi lasciati in bianco.
      Ora come ora, il db viene riempito sì con i nomi dei file, ma anche con riferimenti in bianco per i campi lasciati vuoti (crea l'id di un qualcosa che non esiste!).

    E' possibile risolvere il busillis? Vi sono grato, è un po' di tempo che sto letteralmente sclerando!!!
    Grazie a tutti!


  • User

    scusa la domanda

    ma non fai prima a leggere il file e salvarlo in un campo blob del database??

    invece che spostarlo da tutte le parti?

    ciauz


  • User

    Sai, mi serve che i dati siano divisi per directory, ognuna con il nome diverso! Per questo ho associato il nome della directory a quello dell'azienda... e poi comunque già salvo il nome del file nel db con un campo text... il problema si presenta quando alcuni file li invio e altri no, mentre se li invio tutti problemi non ce ne sono! 😢


  • User

    si ma salvandoli in un campo blob tu salvi tutto il file nel database bit per bit senza salvare nessun dato su spazio web

    poi metti ovviamente un campo con cui riconoscere quelli visibili per un utente e quali no
    e cosi
    ti faciliterebbe molto il lavoro a mio avviso
    poi boh sta a te


  • User

    Si, ma il mio problema è un altro! Il discorso è che lui mi crea riferimenti ai file sia che esso sia stato effettivamente caricato che esso non sia stato inviato!
    Si tratta solo di capire quali campi sono vuoti e quali no, in modo da poter creare una query che crei i riferimenti solo e soltanto per i file caricati, e non per tutti i campi (pure quelli vuoti)!


  • User

    Problema risolto! :yuppi:

    E' bastato congiungere la funzione isset() ponendo move_uploaded_file() come condizione falsa (in modo da gestire le eccezioni). :arrabbiato:

    Grazie a tutti!