Problema upload immagini

  • Creatore Discussione Creatore Discussione Rikk73
  • Data di inizio Data di inizio

Rikk73

Utente Attivo
7 Apr 2015
141
6
18
Arezzo
Salve a tutti, ho un problema "strano" per il quale non riesco a far funzionare l'upload delle immagini in un progetto che sto sviluppando su Mac con l'ausilio di MAMP per i test.

Ho il seguente form html
HTML:
 <div id="upform">
  <form id="form" action="form.inc.php" method="post" enctype="multipart/form-data">
    <fieldset>
	 <legend>Caricamento foto:</legend>
     <label id="lbl">Seleziona il file <em>(jpg, jpeg o png)*</em><span style="font-size:0.4em"> CAMPO SEMPRE NECESSARIO!!!</span> :</label><br />
	   <input type="file" id="inpt" name="foto" value="" /><br /><br />
   </fieldset>
   <fieldset>
     <legend>Le seguenti informazioni sono necessarie SOLO se si carica l'articolo nello shop:</legend>
      <label id="lbl">Breve descrizione indicativa dell&apos;oggetto:</label><br />
      <input type="text" id="inpt" name="desc" placeholder="Descrizione indicativa" maxlength="150" /><br />
      <label id="lbl">Indica il prezzo dell&apos;oggetto:</label><br />
	  <input type="number" id="inpt" name="prezzo" /><br /><!-- mi sa che non prende la virgola -->
      <label id="lbl">Indica la quantit&agrave; disponibile:</label><br />
	  <input type="number" id="inpt" name="qta" /><br />
	  <label id="lbl">Scegli la categoria:</label><br />
	  <select id="inpt" name="cat">
	   <option value="abiti">Abiti</option>
	   <option value="giacche">Giacche</option>
	   <option value="sciarpe">Sciarpe</option>
	   <option value="cappelli">Cappelli</option>
	  </select>
   </fieldset>
   <fieldset>
    <legend>Seleziona il tipo di caricamento necessario:</legend>
	 <input type="submit" id="upbutton" name="action" value="GALLERIA" />
	 <input type="submit" id="upbutton" name="action" value="SHOP" />
	 <input type="submit" id="upbutton" name="action" value="ENTRAMBI" />
   </fieldset>
  </form>
 </div>

che rimanda al seguente script php
PHP:
// definizione directory di caricamento
define("GALLERY", "/gallery/");
define("SHOP", "/shop/".$cat."/");
chmod(GALLERY, 0777) or die ("Impossibile settare i permessi della cartella Gallery");
chmod(SHOP, 0777) or die ("Impossibile settare i permessi della cartella Shop");

// recupero informazioni form
$desc = trim(addslashes(htmlspecialchars($_POST['desc'], ENT_QUOTES, 'UTF-8')));
$prezzo = trim($_POST['prezzo']);
$qta = trim($_POST['qta']);
$cat = trim($_POST['cat']);
$prefisso = date(YmdHis);

// controllo se il file è stato caricato nella cartella temporanea del server
if (is_uploaded_file($_FILES['foto']['tmp_name']))){
	// controllo il formato
	if ($_FILES['foto']['type'] != "image/jpeg" || $_FILES['foto']['type'] != "image/pjpeg" || $_FILES['foto']['type'] != "image/jpg" || $_FILES['foto']['type'] != "image/png"){
		// se non ci sono altri errori
		if ($_FILES['foto']['error'] == 0){
			// inizio le operazioni per l'upload
			// nuovo nome del file
			$oldname = htmlspecialchars(str_replace(" ", "_", $_FILES['foto']['name']), ENT_QUOTES, "UTF-8");
			$newname = $prefisso.$oldname;
			// se la scelta utente è Gallery
			if (isset($_POST['action']) && $_POST['action'] == "GALLERIA"){
				move_uploaded_file($_FILES['foto']['tmp_name'], GALLERY.$newname) or die("Impossibile spostare il file");
				echo "Il file ".$_FILE['foto']['name']." &egrave; stato caricato correttamente in Galleria";
				header('refresh:1; url=index.php?form');
			}
			// se la scelta utente è Shop
			elseif (isset($_POST['action']) && $_POST['action'] == "SHOP"){
				move_uploaded_file($_FILES['foto']['tmp_name'], SHOP.$newname) or die("Impossibile spostare il file");
				//creo il file delle info
				$newtxt = SHOP.$newname.".txt";
				fopen($newtxt, 'w+') or die("Impossibile creare il file delle informazioni");
				fwrite($newtxt, $desc."\n") or die("Impossibile scrivere nel file delle informazioni - descrizione");
				fwrite($newtxt, $prezzo."\n") or die("Impossibile scrivere nel file delle informazioni - prezzo");
				fwrite($newtxt, $qta) or die("Impossibile scrivere nel file delle informazioni - quantit&agrave;");
				fclose($newtxt);
				echo "Il file ".$_FILE['foto']['name']." &egrave; stato caricato correttamente in Shop/".$cat."/";
				header('refresh:1; url=index.php?form');
			}
			// se la scelta utente è Entrambi
			elseif (isset($_POST['action']) && $_POST['action'] == "ENTRAMBI"){
				move_uploaded_file($_FILES['foto']['tmp_name'], SHOP.$newname) or die("Impossibile spostare il file");
				copy(SHOP.$newname, GALLERY.$newname) or die("Impossibile copiare il file");
				// creo il file delle info
				$newtxt = SHOP.$newname.".txt";
				fopen($newtxt, 'w+') or die("Impossibile creare il file delle informazioni");
				fwrite($newtxt, $desc."\n") or die("Impossibile scrivere nel file delle informazioni - descrizione");
				fwrite($newtxt, $prezzo."\n") or die("Impossibile scrivere nel file delle informazioni - prezzo");
				fwrite($newtxt, $qta) or die("Impossibile scrivere nel file delle informazioni - quantit&agrave;");
				fclose($newtxt);
				echo "Il file ".$_FILE['foto']['name']." &egrave; stato caricato correttamente sia in Galleria che in Shop/".$cat."/";
				header('refresh:1; url=index.php?form');
			}
		}
		else{
			// errore generico
			die("Errore, impossibile caricare il file, codice errore :  ".$_FILES["foto"]["error"]);
		}
	}
	else{
		die("Formato file non valido, solo JPG JPEG PNG");
	}
}
else{
	die("Si sono verificati errori durante il caricamento! <a href=\"index.php?form\">Riprova</a> \n errore : ".$_FILES["foto"]["error"]);
}

Sembra che non prelevi proprio il file dal pc, infatti lo script da errore sempre all'istruzione if con is_uploaded_file() in tutti i test che ho fatto.

Ho provato anche a settare manualmente i permessi della cartella temp ma niente, ho provato lo script anche caricandolo direttamente al posto di un sito che gestisco su Linux ma niente, sempre lo stesso errore.

Ho controllato il php.info sia del MAMP che del sito e sembra tutto regolare, upload attivo, limite size e post size alto ecc....

Non capisco proprio dove sta l'errore o comunque il problema. Qulcuno riesce a darmi una mano???
Grazie in anticipo a tutti!!!!
 
ciao
così a naso dai un occhio a questa riga
PHP:
<?php
    if ($_FILES['foto']['type'] != "image/jpeg" || $_FILES['foto']['type'] != "image/pjpeg" || $_FILES['foto']['type'] != "image/jpg" || $_FILES['foto']['type'] != "image/png"){
?>
gli stai dicendo
se il tipo di foto è DIVERSO DA image/jpeg o DIVERSO DA image/pjpeg....
fai l'upload
altimenti stampa "Formato file non valido, solo JPG JPEG PNG"
PHP:
<?php
    if ($_FILES['foto']['type'] == "image/jpeg" || $_FILES['foto']['type'] == "image/pjpeg" || $_FILES['foto']['type'] == "image/jpg" || $_FILES['foto']['type'] == "image/png"){
?>
cioe se l'estenzione è giusta fai l'up altrimenti no
 
@borgo italia

Ottima osservazione......
ho effettuato la correzione e nel farlo mi sono accorto di una parentesi tonda di chiusura di troppo nella riga di is_uploaded_file.

adesso il caricamento funziona!!! tutto ok per quello, ma...
mi restituisce un errore fwrite() :
Warning: fwrite() expects parameter 1 to be resource, string given .....

premetto che ho modificato leggermente la definizione del nome da dare al file nuovo, comnque l'errore lo dava anche prima:

PHP:
//il resto del codice è uguale a quello gia postato
//creo il file delle info
$tmptxt1 = explode(".", $newname);
$tmptxt2 = implode("_", $tmptxt1);
$newtxt = SHOP.$tmptxt2.".xy";
fopen($newtxt, 'w') or die("Impossibile creare il file delle informazioni");
fwrite($newtxt, $desc."\n") or die("Impossibile scrivere nel file delle informazioni - descrizione");
fwrite($newtxt, $prezzo."\n") or die("Impossibile scrivere nel file delle informazioni - prezzo");
fwrite($newtxt, $qta) or die("Impossibile scrivere nel file delle informazioni - quantit&agrave;");
fclose($newtxt);

a cosa si riferisce quel "param 1"?? ho omesso un parametro?
 
ciao
immagino che $newtxt contenga qualcosa di simile a testo.txt e
le varie $desc $prezzo $qta "bla bla bla...."
se è così
PHP:
<?php
//....
$risorsa=fopen($newtxt, 'w') or die("Impossibile creare il file delle informazioni");
fwrite($risorsa, $desc."\n") or die("Impossibile scrivere nel file delle informazioni - descrizione");
fwrite($risorsa, $prezzo."\n") or die("Impossibile scrivere nel file delle informazioni - prezzo");
fwrite($risorsa, $qta) or die("Impossibile scrivere nel file delle informazioni - quantit&agrave;");
fclose($risorsa); 
//...
?>
poi se puoi abbandona i file txt e fai (meglio) il lavoro usando un database come mysql
 
ho fatto la correzione suggerita e funziona, devo vedere cosa e come scrive dentro il file comunque....

sono pienamente d'accordo su un db... ma non dipende da me! poco male pe me è tutta esperienza!

grazie qncora dei preziosi suggerimenti!!!
 

Discussioni simili