Newsgroup: it.comp.www.php
Titolo: [HELP] Potete controllare il mio script di upload file?

Allora, è da ieri che sto diventando pazzo per creare qualcosa di
accettabile (quantomeno per le mie esigenze, sono un principiante) ^_^
Purtroppo alla fine la montagna partorì il topolino (è così che si dice?)
Tutto quello che sono riuscito a creare purtroppo è questo, ho ipotizzato
inizialmente un form che consente di inviare due immagini anzichè una 
(giusto
per complicare un pochino le cose).
Non sono riuscito ad aggiungere allo script upload.php il controllo che
i file inviati siano esclusivamente .jpg, .jpeg, .gif
Qualche anima pia potrebbe integrarmi questo controllo nello script che
ho pubblicato qui sotto?
Il form è questo:
<html>
<head>
<title>
form
</title>
</head>
<body>
<FORM method="POST" action="upload.php" enctype="multipart/form-data">
<INPUT type="file" name="miofile"><p>
<INPUT type="file" name="miofile2">
<INPUT type="submit" value="Upload">
</FORM>
</body>
</html>
Lo script upload.php invece è quest'altro:
<html>
<head>
<title>
prova
</title>
</head>
<body>
<?php
$prefisso='../';
$prefisso2='../';
$cartella='immagini/';
$cartella2='immagini/';
// Se non ricevo nessuna immagine dal form devo poter inserire un campo 
vuoto nel database
IF ($_FILES['miofile']['name'] != "")
{
$foto1 = $cartella.$_FILES['miofile']['name'];
}
ELSE
{
$foto1 = $_FILES['miofile']['name'];
}
IF ($_FILES['miofile2']['name'] != "")
{
$foto2 = $cartella2.$_FILES['miofile2']['name'];
}
ELSE
{
$foto2 = $_FILES['miofile2']['name'];
}
// Mi collego al database ed eseguo le due query per controllare se esistono 
già le due foto onde evitare di sovrascriverle per sbaglio
$db=mysql_connect("localhost", "root") or die ("impossibile connettersi al 
database");
$sqlinterr1 = "SELECT * FROM fotografia WHERE foto1 LIKE '$foto1'";
 $res1 = mysql_db_query ("campi_golf_italia", $sqlinterr1);
 $num1 = mysql_num_rows ($res1);
 $sqlinterr2 = "SELECT * FROM fotografia WHERE foto2 LIKE '$foto2'";
 $res2 = mysql_db_query ("campi_golf_italia", $sqlinterr2);
 $num2 = mysql_num_rows ($res2);
// Se almeno una delle due query mi restituisce record che comunque non sono 
campi vuoti controllo quale delle due foto ci sono già (o entrambe)
IF (($num1 > 0 AND $foto1 != "") OR ($num2 > 0 AND $foto2 != ""))
{
      IF ($num1 > 0 AND $foto1 != "")
      {
      echo "foto 1 già inserita<p>";
      }
      IF ($num2 > 0 AND $foto2 != "")
      {
      echo "foto 2 già inserita";
      }
}
// Se le due query non mi restituiscono record vuol dire che entrambe le 
foto sono nuove e quindi le carico nella cartella scelta all'inizio con una 
variabile apposita
ELSE
{
if (@move_uploaded_file($_FILES['miofile']['tmp_name'], 
realpath($prefisso.$cartella)."/".$_FILES['miofile']['name']) OR 
@move_uploaded_file($_FILES['miofile2']['tmp_name'], 
realpath($prefisso2.$cartella2)."/".$_FILES['miofile2']['name']))
{
print "Upload eseguito con successo<br>";
}
// Se qualcosa va storto oppure dal form scelgo di non inviare nessuna foto 
scrivo che non sono state inserite foto oppure l'upload è fallito
else
{
print "Non sono state inserite foto oppure l'upload è fallito";
}
     $db=mysql_connect("localhost", "root");
     $sqlinterr = "INSERT INTO fotografia (foto1,foto2) VALUES ";
     $sqlinterr .= " ('$foto1','$foto2')";
     $res = mysql_db_query ("campi_golf_italia", $sqlinterr);
}
  ?>
</body>
</html> 

Prova con questo:
// Se il file non è gif, jpg o jpeg.........
if ($HTTP_POST_FILES['file']['type'] != "image/gif" AND
$HTTP_POST_FILES['file']['type'] != "image/jpg" AND
$HTTP_POST_FILES['file']['type'] !="image/jpeg") // Stessa cosa con il
file2..
{
//Messaggio di errore
unlink($HTTP_POST_FILES['file']['tmp_name']); // Rimuovi file dal
server
}
else {
//File corretto. Sposta l'immagine nella cartella apposita
}
johnnystanchino ha scritto:


Ti ringrazio, do un'occhiata 

 
Ai professionisti potrà sembrare solo un pastrocchio, ma personalmente 
l'avevo risoltà così:
...
// Estensioni Supportate sulle quali viene
// Fatto il Controllo prima dell' upload.
$jpg = ".jpg";
$bmp = ".bmp";
$gif = ".gif";
$jpeg = ".jpeg";
$png = ".png";
$cartella='upload/';
$percorso=$_FILES['miofile']['tmp_name'];
$immagine=$_FILES['miofile']['name'];
// ESEGUO IL CONTROLLO DELLE ESTENSIONI
if ((strripos($immagine, "$jpg") == TRUE) or (strripos($immagine, 
"$bmp") == TRUE) or (strripos($immagine, ".gif") == TRUE) or 
(strripos($immagine, "$jpeg") == TRUE) or (strripos($immagine, "$png") 
== TRUE))
...
sostanzialmente con "stripos()" vado a cercare se ad ex.
"
miosito.it/upload/immagine.jpeg
" è contenuta una delle estensioni da me 
impostate.
Se (IF) è contenuta esegue lo script dell' upload, altrimenti (ELSE) 
rende qualcosa come:
echo "<strong>File Non Supportato</strong><BR><BR>";
Fatemi sapere se la mia soluzione è così pessima ;)
Saluti

 Saluti
se in un nome file e' contenuta l'estensione 'imjpgage.php' il file sara'
validato non essendo tuttavia un'immagine..
con le regex potresti eseguire test migliori..
<?php
$validExt = array('gif', 'jpe?g', 'png', 'tiff');
$suiteTest = 
  array('image.jpg',
        'image.jpr',
        'image.jpeg',
        '.tiff',
        'jpeg',
        'image.tiff',
        'jpg.ti'
       );
$validExt = '(?:' . implode('|', $validExt) . ')';
while (list(, $fileName) = each($suiteTest)) {
  if (preg_match("/^.+?\.$validExt$/i", $fileName)) {
    echo "'$fileName' is a valid name<br />\n";
  }     else {
    echo "'$fileName' is NOT a valid name<br />\n";
  }
}
?>
questo e' un modo..
ma tentando di ottenere dati con @getimagesize() potresti anche capire se
l'immagine e' valida oppure no..
-- 
www.iuz-lab.info

 validato non essendo tuttavia un'immagine..
  [CUT]
In effetti il mio script non è dei migliori,
anche se devo dire che l'ipotesi da te fatta non ha dato successo.
se tento di salvare "imjpgage.php" il risultato sarà:
File Non Supportato
imjpgage.php
Devo dire però che facendo la prova con "imjpgage.jpg.php" il file viene 
  salvato correttamente in quella directory.
Vedrò dunque di seguire le tue indicazioni e di migliorarlo :)
Saluti

 Saluti
-- 
www.iuz-lab.info