- Home
- Categorie
- Coding e Sistemistica
- PHP
- Caricamento immagini multiupload
-
Caricamento immagini multiupload
Ciao,
sì lo so che ci sono decine di tutorial su scriptini per il caricamento multiupload solo che, per motivi vari, devo modificarne uno già esistente e che, purtroppo, è single upload.Da qui seleziono il file
[PHP]
<form action='addphoto.php' method=post enctype='multipart/form-data' onSubmit='return checkrequired(this)'>
<td colspan=2 valign='top' class='hint'>
<?
// only display image upload form if GD version meets requirements
if(checkgd()) {
echo "
<input class='text' type=file name='image' alt='required' style='width:150'> <img src='common/arrow_left.jpg' align='absmiddle'><br><input type=hidden name='ccode' value='$ccode'>
<input class='text' type=submit value='Carica'><br>
";
} else {
echo "
GD Graphics Library version 2 required
";
}
?>
</td>
</form>
[/PHP]Qui la pagina addphoto.php
[PHP]
<?
require 'config/config.php';
require 'functions.php';
require 'global.php';
require 'secure.php';// aggiungi foto alla tabella foto
if($image) {
// genera icode
$icode = substr(time().rand(10000,99999),-15);// copia la foto nella cartella temp $tempname = './temp/'.$icode.'TEMP.JPG'; copy($image, $tempname); unlink($image); // acquisci dettagli foto $properties = getimagesize($tempname); if($properties[2] == 2) { // if the image is a .jpg $source = imagecreatefromjpeg($tempname); // create image identifier $imagex = imagesx($source); $imagey = imagesy($source); // copia foto nella cartella foto $imagename = $icode.'IMG.JPG'; // this will be stored in db $image_loc = "./images/$imagename"; copy($tempname, $image_loc); unlink($tempname); // ridimensiona foto se necessario if($imagex > 800) { $newy = round((800 * $imagey) / $imagex); //echo "imagex = $imagex<br>imagey = $imagey<br>newy = $newy<br>"; exit(); // TEST resize($image_loc, 800, $newy, $image_loc); } // crea il thumbnail $thumbname = $icode.'TMB.JPG'; // this will be stored in db $thumb_loc = "./thumbs/$thumbname"; $thumbx = $maxx; $thumby = round(($imagey * $thumbx) / $imagex); if($thumby > $maxy) { $thumbx = round(($thumbx * $maxy) / $thumby); $thumby = $maxy; } if(resize($image_loc, $thumbx, $thumby, $thumb_loc)) { // salva i dati $link = mysql_connect($dbhost, $dbuser, $dbpass); $query = "INSERT INTO $dbimg VALUES('0','$ccode','$thumbname','$imagename')"; mysql_db_query($dbname, $query, $link); // aggiorna il numimages $query = "UPDATE $dbvin SET numimages=numimages+1 WHERE ccode='$ccode'"; mysql_db_query($dbname, $query, $link); mysql_close($link); // torna alla pagina sommario echo "<script language='JavaScript'> window.location='sommario.php?ccode=$ccode'; </script>"; exit(); } } @unlink($tempname); // cancella il file temp in caso di errore
}
?>
[/PHP]Alla brutta posso, aggiungere tanti
[HTML]<input class='text' type=file name='image' alt='required' style='width:150'> <img src='common/arrow_left.jpg' align='absmiddle'><br>[/HTML]nominandoli 'image2', 'image3', 'image4' ecc ecc....
e nella pagina addphoto ripetere la parte di codice ... per appunto 'image2', 'image3', 'image4' ecc ecc....
Ma ammesso che uno abbia voglia di fare una simile barbarie sorge il problema che così facendo tutti gli input 'image' devo essere "pieni", in caso contrario si impalla l'upload.Ora alla pagina addphoto.php posso semplicemente aggiungere del codice del tipo "fai l'upload fin tanto che l'input 'image' passato col POST è pieno, quando arrivi al 'image' vuoto termina l'upload".
So che ovviamente è fattibile ma la mia scarsa capacità mi impedisce di farloQualcuno ha qualche dritta o imbeccata?
Grazie!Sara
-
PS:
con il metodo barbaro descritto sopra (la ripetizione del codice tante volte quanti gli input 'image') .. per evitare il blocco dell'upload a input vuoto.. l'ho risolta ora così[PHP]if($image2 == '') {
echo "<script language='JavaScript'> window.location='home.php?ccode=$ccode'; </script>";
exit();
} else {ecc ecc ecc
[/PHP]Ma mi rendo conto che è un codice da mettersi le mani nei capelli