PDA

View Full Version : [PHP] anteprima di un immagine caricata su un server


matteo11102009
21-07-2012, 19:18
ciao a tutti... io verrei creare uno script PHP per caricare delle immagini su un server, per poi ritornare alla pagina di upload (dove sarà presente anche il form per effettuare l' upload) e mostrare l' anteprima dell' immagine appena caricata... io ci ho provato ma non funziona.. vi allego il codice della pagina di upload e dello script:

Pagina di upload:

<table>
<form action="carica.php" method="post" enctype="multipart/form-data">
<tr>
<td id="campi"> <input name="file" type="file" id="file" size="20"></td>
<td width="72"><button id="buttocarica" type="submit"></button></td>
</tr>
<table width="682" id="hidden4" style="display: block;" >
<tr>
<td id="campi"><div id="labelaccedi">Anteprima delle immagini</div></td>
<td width="200" colspan="1">
<div id="anteprimains">
<?php
echo "<img src='upload/".$_FILES["file"]["name"]."'>";
?>
</div>
</td>
</tr>
</form>
</table>


Script per il caricamento:

<?php
if ($_FILES["file"]["size"] < 10000000){
if ($_FILES["file"]["error"] > 0){
echo "Codice Errore: " . $_FILES["file"]["error"]."
";
}
else{
echo "Nome File: " . $_FILES["file"]["name"]."
";
echo "Tipo File: " . $_FILES["file"]["type"] . "
";
echo "Dimensione [byte]: " . $_FILES["file"]["size"] . "
";
echo "Nome Temporaneo: " . $_FILES["file"]["tmp_name"] . "
";
if (file_exists("upload/" . $_FILES["file"]["name"])){
echo "Il file " . $_FILES["file"]["name"] . " è già presente sul server";
}
else{
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "File caricato in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else{
echo "File troppo grande!!";
}
header("location: inserisci.php");
?>


Riepilogando, vorrei creare uno script PHP che permetta di caricare delle immagini su un server, e, dopo il caricamento ritornare alla pagina per effettuare l' upload di altre immagini e mostrare l' anteprima dell' immagine caricata in precedenza!!!
Grazie in anticipo

daxdaxdax
21-07-2012, 23:48
Una strada potrebbe essere questa:

<?

$anteprima = null;

if(!empty($_FILES)){
if ($_FILES["file"]["size"] < 10000000){

if ($_FILES["file"]["error"] > 0){
echo "Codice Errore: " . $_FILES["file"]["error"]." ";
}else{
echo "<pre>Nome File: " . $_FILES["file"]["name"]."\n";
echo "Tipo File: " . $_FILES["file"]["type"] . "\n";
echo "Dimensione [byte]: " . $_FILES["file"]["size"] . "\n";
echo "Nome Temporaneo: " . $_FILES["file"]["tmp_name"] . "\n</pre>";

if (file_exists("upload/" . $_FILES["file"]["name"])){
echo "Il file " . $_FILES["file"]["name"] . " è già presente sul server";
}else{
$filename = $_FILES["file"]["name"];
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/$filename");
echo "File caricato in: " . "upload/$filename";
$anteprima = $filename;
}
}
}else{
echo "File troppo grande!!";
}
}
//header("location: inserisci.php");


?>
<table>
<form action="index.php" method="post" enctype="multipart/form-data">
<tr>
<td id="campi"> <input name="file" type="file" id="file" size="20"></td>
<td width="72"><button id="buttocarica" type="submit"></button></td>
</tr>
<table width="682" id="hidden4" style="display: block;" >
<tr>
<td id="campi"><div id="labelaccedi">Anteprima delle immagini</div></td>
<td width="200" colspan="1">
<div id="anteprimains">
<?php
if(!empty($anteprima)) echo "<img src='upload/$anteprima' alt='anteprima' />";
?>
</div>
</td>
</tr>
</form>
</table>


Ho usato il tuo codice ma ho gestito l'upload con un unico file per praticità/velocità..

Quando si verifica un upload valorizzi la variabile $anteprima che successivamente viene controllata e, se non vuota, viene fatto un echo con il relativo tag html...

bb

matteo11102009
22-07-2012, 19:11
grazie mille ho risolto... ma non è che sai dirmi come posso caricare piu immagini e contemporaneamente mostrarne un anteprima di tutte quelle caricate??
ancora grazie mille

daxdaxdax
22-07-2012, 22:11
Eh figurati ;)

Allora per caricamento multiplo dovresti inglobare nel form html tanti input file quanti te ne servono o dinamicamente tramite javascript aggiungerne lato client tramite un button o altro (ma questa è una 'sciccheria...')..
Tutto questo a patto che ogni inputfile abbia come attributo name lo stesso nome con le parentesi quadre:
(questo specifica l'uso di array)

<form...>
<input name="filearray[]" type="file" />
<br />
<input name="filearray[]" type="file" />
<br />
<input name="filearray[]" type="file" />
<br />
</form>


Lato server, nell'array globale $_FILES ti troverai tanti vettori quanti sono i file uploadati.
Per chierirti le idee testa l'upload effettuato con:

echo "<pre>\n";
print_r($_FILES);
echo "</pre>\n";


Lo specificare un array nel form html, facilita l'implementazione futura di altri inputfiles in quanto lato server avrai già gestito l'upload mediante un ciclo che durerà fin quando ci sono file uploadati.
Nessuno vieta l'utilizzo di inputfiles con name differenti, solo è più 'dura' la gestione lato server in quanto ti tocca gestirli uno per uno tramite il nome attribuito nel form html.
Lì sta a te scegliere, dipende anche dal numero di files da uploadare :)

mostrarne un anteprima di tutte quelle caricate??

Volendo puoi adottare il sistema citato prima.

Su php.net (http://www.php.net/manual/en/features.file-upload.multiple.php#55614) ci sono numerosi esempi interessanti..

ciaociao :)