Jump to content
Sign in to follow this  
salvo89

[Aiuto!!] Upload multiplo dei file con PHP

Recommended Posts

Cia ragazzi, ho realizzato uno script in php che mi permette di selezionare un archivio ZIP contentente immagini e foto tramite lo sfoglia, di uploadarlo e scompattarlo in una cartella FTP il cui nome viene impostato direttamente dall'utente tramite il campo "Titolo". Cliccando su "Vai allo step successivo", il sistema ti fa l'elenco di tutte le fotografie caricate con tanto di nome ed anteprima. Se il tutto è corretto, basterà cliccare sul bottone "termina il caricamento" ed i nomi delle foto verranno anche scritte sul DB mysql. Ora lo script funziona perfettamente e non mi genera nessun errore di sistema od altro. Il problema è che nel database mi salva solamente il nome dell'ultima fotografia presente in lista tralasciando tutte le altre. Sto impazzendo perchè non riesco a capire qual è l'errore. Vi prego di darmi, se potete, una mano perchè sono disperato!

Vi posto di seguito il codice PHP completo.

 

<?php
session_start();
if(isset($_SESSION['accesso']))
{
$nomepagina = "Area di amministrazione"; 
include("../includes/connessione.php");
include("includes/header.php"); 
?>
<body>
<div id="grande">
<?php include("includes/intestazione.php"); ?>
<div id="principale">
       <!--INIZIO TABELLA-->
       <br /><h2>Gestione delle gallerie fotografiche</h2><br /><br />
       <table width="800" border="0" cellspacing="3" cellpadding="5" align="center">
         <tr>
           <td style="background:#CCC; padding:15px;">
               <center> 
                 <input type="button" value="Torna nell'area riservata" name="torna" onClick="window.location.href='area_riservata.php';" />
                 <input type="button" value="Torna all'elenco delle foto"  name="torna2" onClick="window.location.href='gestione_foto.php';" />
               </center>
           </td>
         </tr>
       </table>
 <br /><br />
 <?php
  $connessione=mysql_connect($dbhost,$dbusername,$dbpassword);
  mysql_select_db($dbnome,$connessione); 
  if(isset($_POST['invia']))
  {
           // Definisco le variabili e faccio un replace per caratteri speciali
  $uploaddir = "includes/upload/fotografie/";
  $uploadfile = $uploaddir . $_FILES['nome']['name'];
  $nomez=$_FILES['nome']['name'];
  $nomez=str_replace(".zip","",$nomez);
  $categoria = $_POST['categoria'];
  $titolo = $_POST['titolo'];
  $titolo = str_replace("'", "´", $titolo);

  // Valido i campi
  if(empty($titolo) || empty($categoria)) {
  echo("<script>alert('Alcuni campi obbligatori non sono stati compilati');</script>");
  }
  else{

  // Controllo che non ci siano stati errori nell'upload (codice = 0)  
  if (move_uploaded_file($_FILES['nome']['tmp_name'], $uploadfile)) {

     // Se tutto è andato bene carico i risultati nel database
           $conn = "INSERT INTO album SET titolo = '$titolo', categoria = '$categoria'"; 
  mysql_query($conn) OR die('Query non valida: ' . mysql_error());
  $id_album=mysql_insert_id();
  echo ('<script language="JavaScript" type="text/javascript">alert("Primo passaggio completato con successo!"); window.location="inserisci_foto.php?ricalcolo=nuovo&id_album='. $id_album .'&categoria='. $categoria .'&titolo='. $titolo .'"</script>"');
  } else {
  echo ("<script language='JavaScript' type='text/javascript'>alert('Errore nel caricamento delle fotografie. Controlla che non ci siano problemi nel file ZIP.');</script>");
  }
  include('librerie/pclzip.lib.php');
  $archive = new PclZip("$uploadfile");
  if ($archive->extract(PCLZIP_OPT_PATH, "includes/upload/fotografie/$titolo",PCLZIP_OPT_REMOVE_PATH, '') == 1) {
  //die("Error : ".$archive->errorInfo(true));
  echo ("<script language='JavaScript' type='text/javascript'>alert('Errore nella decompressione. Contattare Sito Smile');</script>");
  }
  }
  }
 ?>
         <center>Inserisci una nuova galleria fotografica:</center><br /><br />
         <?php if (!$_GET['ricalcolo']=="nuovo"){ ?>
         <form action="" method="post" enctype="multipart/form-data">
         <input type="hidden" name="MAX_FILE_SIZE" value="2000000"/>
         <table width="800" border="0" cellspacing="3" cellpadding="5" align="center" style="border:1px solid #666">
             <tr>
               <td style="border:1px solid #666;"><b>Categoria delle foto:</b></td>
               <td style="border:1px solid #666;">
                <select name="categoria" style="width:286px;">
     <option value="0">[selezione una categoria]</option>
                       <?php
                       $conn = "SELECT * FROM categorie order by titolo";
     $risultato = mysql_query($conn) or die('Errore nella query SQL');
     while(list($id_categoria, $titolo) = mysql_fetch_array($risultato))
     {
     ?>
                       <option value="<?php echo $id_categoria ?>" <?php echo $selezione ?>><?php echo $titolo ?></option>
                       <?php
     }
     ?>
                   </select>
               </td>
             </tr>
             <tr>
               <td style="background:#CCC; border:1px solid #666;"><b>File ZIP contenente le foto:</b></td>
               <td style="background:#CCC; border:1px solid #666;"><input type="file" name="nome" size="30"></td>
             </tr>
             <tr>
               <td style="background:#CCC; border:1px solid #666;"><b>Titolo cartella: (scrivere tutto attaccato)</b></td>
               <td style="background:#CCC; border:1px solid #666;"><input type="text" name="titolo" size="30" value="<?php echo $titolo ?>"></td>
             </tr>
             <tr>
               <td colspan="2" align="center" style="border:1px solid #666;"><input type="submit" name="invia" value="Vai allo step successivo"> <input type="reset" name="resetta" value="Resetta i dati"></td>
             </tr>
           </table>
           </form>
       <br /><br />
       <?php
    }
  if($_GET['ricalcolo']=="nuovo"){

  $conn = "SELECT * FROM album WHERE id_album=" .$_GET['id_album'];
  $risultato = mysql_query($conn) or die('Errore nella query SQL');
  while(list($id_album, $categoria, $titolo) = mysql_fetch_array($risultato))
  {
  function dir_list($directory = FALSE)
  {
  $dirs= array();
  $files = array();
  if ($handle = opendir("./" . $directory))
  {
  while ($file = readdir($handle))
  {
  if (is_dir("./{$directory}/{$file}"))
  {
  if ($file != "." & $file != "..") $dirs[] = $file;
  }
  else
  {
  if ($file != "." & $file != "..") $files[] = $file;
  }
  }
  }
  closedir($handle);
  reset($dirs);
  sort($dirs);
  reset($dirs);
  reset($files);
  sort($files);
  reset($files);
  if($dirs == 1) {
  echo "<strong>Cartelle:</strong>\n<ul>";
  while(list($key, $value) = each($dirs))
  {
  $d++;
  echo "<li><a href=\"{$value}\">{$value}/</a>\n";
  }
  echo "</ul>\n";
  }
  echo "<form action='' method='post' enctype='multipart/form-data'>
  <strong>Immagini caricate nel server:</strong>\n<ul>";
  while(list($key, $value) = each($files))
  {
  $f++;
  echo "<td><img src='{$directory}/{$value}' height='60' width='60' style='border:1px solid #000;' align='absimiddle'></td><td>  <input type='text' size='60' value='{$value}' name='file_' id='file' readonly style='border:0; height: 40px; background:none;'><br></td>";
  }
  echo "</ul>\n";
  if (!$d) $d = "0";
  if (!$f) $f = "0";
  /*echo "Sono presenti <strong>{$f}</strong> immagini per questa serata.</strong>\n";*/
  echo"<br><table width='86%' align='center'><tr><td style='background:#CCC; border:0' align='center'><br><input type='submit' value='Concludi il caricamento foto' name='invia2'><br><br></td></tr></table>
           </form>";
  }
  dir_list("includes/upload/fotografie/$titolo");


  if(isset($_POST['invia2']))
  {
  //Definizione variabili
  $file = $_POST['file'];
  $categoria = $_GET["categoria"];
  $titolo = $_GET["titolo"];
  $album = $_GET["id_album"];

  // Se tutto è andato bene carico i risultati nel database
           $conn = "INSERT INTO fotografie SET nome = '$file', titolo = '$titolo', categoria = '$categoria', album = '$album'"; 
  mysql_query($conn)
  OR die('Query non valida: ' . mysql_error());
  $id = $_GET['id_foto'];
  echo ("<script language='JavaScript' type='text/javascript'>alert('Caricamento foto completato con successo!'); window.location='gestione_foto.php'</script>");   
  }
  }
  }
  ?>
   </div>
<?php include("includes/footer.php"); ?>
</div>
</body>
</html>
<?php
}else {
?>
<script language="JavaScript" type="text/javascript">
       alert("Accesso non consentito. Rieffettua il login")
       window.location = "index.php"
   </script>
<?php 
} 
?>

 

Grazie dell'eventuale aiuto

Share this post


Link to post
Share on other sites

Ora non ho molto tempo per risolverti il problema, ma ti do' qualche indicazione:

 

if(isset($_POST['invia2']))
  {
  //Definizione variabili
  $file = $_POST['file'];
  $categoria = $_GET["categoria"];
  $titolo = $_GET["titolo"];
  $album = $_GET["id_album"];

  // Se tutto è andato bene carico i risultati nel database
           $conn = "INSERT INTO fotografie SET nome = '$file', titolo = '$titolo', categoria = '$categoria', album = '$album'"; 
  mysql_query($conn)
  OR die('Query non valida: ' . mysql_error());
  $id = $_GET['id_foto'];
  echo ("<script language='JavaScript' type='text/javascript'>alert('Caricamento foto completato con successo!'); window.location='gestione_foto.php'</script>");   
  }

 

Qui tu, da quel che ho capito leggendo velocemente lo script, non hai più le informazioni che ti interessano (nonché la lista di file caricati) poiché passando al POST successivo (in maniera al quanto sporca) non li imposti da nessuna parte (si, negli input, ma non funziona esattamente così).

La soluzione più veloce che mi viene in mente (non la più pulita!) é di saltare il 'Concludi caricamento foto' ed effettuare l'inserimento delle informazioni nel database, nello stesso ciclo che utilizzi per generare la tabella.

 

while(list($key, $value) = each($files))
  {
  $f++;
  echo "<td><img src='{$directory}/{$value}' height='60' width='60' style='border:1px solid #000;' align='absimiddle'></td><td>  <input type='text' size='60' value='{$value}' name='file_' id='file' readonly style='border:0; height: 40px; background:none;'><br></td>";
  $conn = "INSERT INTO fotografie SET nome = '$file', titolo = '$titolo', categoria = '$categoria', album = '$album'"; 
  mysql_query($conn)
  OR die('Query non valida: ' . mysql_error());
  }

 

Ripeto, non é la soluzione più pulita, anzi, direi quasi il contrario, ma mi pare che tu qui stia sbagliando il principio-ragionamento, quindi per salvarti in corner potrebbe andare.

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×