Entra

View Full Version : [PHP] problema con form per upload file


axxel84
03-02-2010, 18:07
Premetto che sono praticamente alle prime armi con php. Sto cercando di realizzare un semplice pannello di inserimento news in un db mysql. Questo pannello prevede un form contenente un tag html <input type = "file"> per selezionare da disco un'immagine da allegare alla news:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pannello amministrazione news</title>
</head>
<body>
<div class = 'form'>
<h1>Inserisci nuova news:</h1> <br />
<br />
<form action = "./news_preview.php" method = "POST">
<label>Titolo:</label> <input type = "text" name = "titolo" size = "40" maxlength = 255 /> <br />
<br />
<label>Testo:</label> <textarea name = "testo" rows = "6" cols = "30" ></textarea> <br />
<br />
<label>Immagine:</label> <input type="file" name="image_path"> <br />
<br />
<input type = "submit" name = "insert" value = "Inserisci news">
</form>
</div>
</body>


la pagina news_preview.php contiene uno script che si occuperà di gestire le informazioni inviate da questo form in modo da poterne fare lo store su db:


<?php
require("const.php");

// controllo se si è giunti a questa pagina facendo l'upload di un file da index.php
if (!empty($_POST["insert"]))
{
// recupero parametri POST
$titolo = $_POST["titolo"];
$testo = $_POST["testo"];
var_dump($_FILES);
$image_path = $_FILES["image_path"]["name"];
$image_type = $_FILES["image_path"]["type"];
echo $image_type;
//apertura immagine originale
echo('percorso immagine originale:'.$image_path);
$image_resource = imagecreatefromjpeg($image_path) or die ("Impossibile aprire l'immagine originale");
// creazione nome file miniatura (<nome file originale>_t.<estensione>)
$image_extension = substr($image_path, strpos($image_path, "."), strlen($image_path));
$thumb_path = substr($image_path, 0, strpos($image_path, ".") - 1).'_t'.$image_extension;
// recupero dimensioni x-y immagine originale
$image_size = getimagesize($image_path);
// calcolo dimensioni x-y miniatura
$thumb_size[0] = $thumb_x;
$thumb_size[1] = round(($image_size[1] / ($image_size[0] / $thumb_size[0])), 0);
// creazione immagine miniatura
$thumb_resource = imagecreate($thumb_size[0], $thumb_size[1]) or die("Impossibile creare la miniatura");
imagecopyresized($thumb_resource, $image_resource, 0, 0, 0, 0, $thumb_size[0], $thumb_size[1], $image_size[0], $image_size[1]) or die("Impossibile ridimensionare l'immagine");
imagejpeg($thumb_resource, $thumb_path, $thumb_compression) or die("Impossibile salvare la miniatura");
}
else
{
echo("non è stata inserita nessuna news.");
}
?>


il problema sta proprio nel recupero da $_FILES del percorso dell'immagine caricata. Se infatti provo il caricamento ottengo il seguente output:


array(0) { }
Notice: Undefined index: image_path in D:\Lavoro\www\kroton\adminpanel\news_preview.php on line 11

Notice: Undefined index: image_path in D:\Lavoro\www\kroton\adminpanel\news_preview.php on line 12
percorso immagine originale:
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: Filename cannot be empty in D:\Lavoro\www\kroton\adminpanel\news_preview.php on line 16
Impossibile aprire l'immagine originale


come si può notare anche dall'output del var_dump, l'array $_FILES[image_path] risulta vuoto. Dove sbaglio? Non ho mai gestito l'upload di file con php prima d'ora, per cui magari è un errore stupido, ma non riesco proprio ad individuarlo... grazie a chi vorrà aiutarmi :)