• User Attivo

    script upload foto e scrittura su db

    Buongiorno a tutti,

    ho uno script che carica più foto su una cartella,

    e scrive sul db il nome di ogni fotoe l'id dell'articolo a cui sono associate:

    crea_gallery.php
    [PHP]
    <form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file[]" multiple>
    <input name='id' type='text' value="<?php print $_GET['id']?>" style="display:none;">
    <input name="invia" type="submit" value="Carica i file" />
    </form>
    [/PHP]

    upload.php
    [PHP]
    <?php include("../config.php"); ?>
    <?php
    $folder='foto/';
    if(isset($FILES['file']['name'])){
    $count=0;
    foreach ($FILES['file']['name'] as $filename) {
    $destination=$folder;
    $origin=$FILES['file']['tmp_name'][$count];
    $count++;
    $destination=$destination.basename($filename);
    $id_articolo = $POST['id'];
    $dir_art = mkdir("file:///Applications/MAMP/htdocs/studio/admin/gallery/foto/".$id_articolo,0777);
    $dir_art_ok = "file:///Applications/MAMP/htdocs/studio/admin/gallery/foto/".$id_articolo."/";
    move_uploaded_file($origin, $dir_art_ok.$filename);
    rename($dir_art_ok.$filename,$dir_art_ok.$id_articolo."
    ".$count."
    ".$filename);
    $nome_foto = $id_articolo.$id_articolo."
    ".$count."
    ".$filename;
    $sql = "INSERT INTO gallery (foto,id_articolo) VALUES ('$nome_foto','$id_articolo')";
    $ret = mysqli_query( $db, $sql );
    }
    }
    header("location: crea_gallery.php?id=".$id_articolo);

    ?>
    

    [/PHP]

    funziona tutto, l'unica cosa però è che se non faccio l'upload di nessuna immagine e clicco il bottone "Carica i file",

    lo script non carica nessun i file, ma esegue la query, vorrei che se non si carica nessun file non si eseguisse la query.

    ringrazio in anticipo
    buona serata e buon week end


  • User Attivo

    Isset controlla se c'è la variabile. La variabile ci può essere ed essere vuota, come nel tuo caso. Prova a sostituire isset con empty. In questo caso la funzione guarda se la varibile è vuota. Se non è vuota prosegue con l'inserimento.
    [PHP]
    ...
    if(!empty($_FILES['file']['name'])){
    ...
    [/PHP]

    inoltre per nascondere un campo nel form usa l'attributo type con valore hidden

    
    ...
    <input name='id' type='hidden' value="<?php print $_GET['id']?>" />
    ...
    
    

    Ciao.


  • User Attivo

    Grande Oslino, tempestivo come sempre!

    immaginavo si usasse empty o isset;

    posto il codice:

    upload.php
    [PHP]
    <?php include("../config.php"); ?>
    <?php
    $folder='foto/';
    if(isset($FILES['file']['name'])){
    $count=0;
    foreach ($FILES['file']['name'] as $filename) {
    $destination=$folder;
    $origin=$FILES['file']['tmp_name'][$count];
    $count++;
    $destination=$destination.basename($filename);
    $id_articolo = $POST['id'];
    $dir_art = mkdir("file:///Applications/MAMP/htdocs/studio/admin/gallery/foto/".$id_articolo,0777);
    $dir_art_ok = "file:///Applications/MAMP/htdocs/studio/admin/gallery/foto/".$id_articolo."/";
    move_uploaded_file($origin, $dir_art_ok.$filename);
    rename($dir_art_ok.$filename,$dir_art_ok.$id_articolo."
    ".$count."
    ".$filename);
    $nome_foto = $id_articolo.$id_articolo."
    ".$count."
    ".$filename;
    if(!isset($_FILES['file']['name'])){
    $sql = "INSERT INTO gallery (foto,id_articolo) VALUES ('$nome_foto','$id_articolo')";
    $ret = mysqli_query( $db, $sql );
    }
    }
    }
    header("location: crea_gallery.php?id=".$id_articolo);

    ?>
    

    [/PHP]

    grazie ancora
    buon week end


  • User Attivo

    Rettifico Oslino,

    non va; nell'if ho provato a mettere sia empty che isset ma nulla.

    strano, come mai secondo te?

    grazie mille
    scusa l'inghippo


  • User Attivo

    Rettifico di nuovo Oslino!

    sembra funzionare:

    [PHP]
    <?php include("../config.php"); ?>
    <?php
    $folder='foto/';
    if(isset($FILES['file']['name'])){
    $count=0;
    foreach ($FILES['file']['name'] as $filename) {
    $destination=$folder;
    $origin=$FILES['file']['tmp_name'][$count];
    $count++;
    $destination=$destination.basename($filename);
    $id_articolo = $POST['id'];
    $dir_art = mkdir("file:///Applications/MAMP/htdocs/studio/admin/gallery/foto/".$id_articolo,0777);
    $dir_art_ok = "file:///Applications/MAMP/htdocs/studio/admin/gallery/foto/".$id_articolo."/";
    move_uploaded_file($origin, $dir_art_ok.$filename);
    rename($dir_art_ok.$filename,$dir_art_ok.$id_articolo."
    ".$count."
    ".$filename);
    $nome_foto = $id_articolo.$id_articolo."
    ".$count."
    ".$filename;
    if(!empty($filename)){
    $sql = "INSERT INTO gallery (foto,id_articolo) VALUES ('$nome_foto','$id_articolo')";
    $ret = mysqli_query( $db, $sql );
    }
    }
    }
    header("location: crea_gallery.php?id=".$id_articolo);

    ?>
    

    [/PHP]

    grazie
    1000
    ciao!


  • User Attivo

    Se funziona mi fa piacere, ma non capisco perchè lo hai messo lì... nel tuo modo PHP valuta ugualmente tutto il codice, creandoti le cartelle e fermandosi solo al "if(!empty...)". Se le cartelle sono inutili in caso di mancanza delle foto, perchè crearle?
    Io lo avrei messo all'inizio, poi vedi tu...
    [PHP]
    <?php include("../config.php"); ?>
    <?php
    $folder='foto/';
    if(!empty($FILES['file']['name'])){ // <---- ****** IO LO METTEREI QUI! ****
    $count=0;
    foreach ($FILES['file']['name'] as $filename) {
    $destination=$folder;
    $origin=$FILES['file']['tmp_name'][$count];
    $count++;
    $destination=$destination.basename($filename);
    $id_articolo = $POST['id'];
    $dir_art = mkdir("file:///Applications/MAMP/htdocs/studio/admin/gallery/foto/".$id_articolo,0777);
    $dir_art_ok = "file:///Applications/MAMP/htdocs/studio/admin/gallery/foto/".$id_articolo."/";
    move_uploaded_file($origin, $dir_art_ok.$filename);
    rename($dir_art_ok.$filename,$dir_art_ok.$id_articolo."
    ".$count."
    ".$filename);
    $nome_foto = $id_articolo.$id_articolo."
    ".$count."
    ".$filename;
    $sql = "INSERT INTO gallery (foto,id_articolo) VALUES ('$nome_foto','$id_articolo')";
    $ret = mysqli_query( $db, $sql );
    }
    }
    header("location: crea_gallery.php?id=".$id_articolo);
    ?>
    [/PHP]
    Ciao.