2014-12-30 2 views
0

Я работаю над скриптом, который загружает файл в определенную папку и отправляет данные в базу данных, если все условия истинны, и все в порядке. Скрипт проверяет размер файла, и если размер файла больше, чем требуется, он отображает ошибку (работает нормально).Как отобразить ошибку при загрузке файла с нежелательным расширением?

Сценарий также проверяет, что загруженный файл имеет требуемое расширение или нет, если ok, тогда файл загружается, и если он имеет нежелательное расширение, он не будет загружен (работает нормально), но если файл не находится в ожидаемом расширении то он также должен отображать ошибку.

Например, если кто-то загружает .exe или zip или mp3 или любой файл, тогда он должен отображать «Недопустимый тип файла. Разрешены только файлы JPG, PNG, GIF, JPEG, PDF и DOC. ошибка. Как я могу показывать это сообщение? Какой код я должен поставить и где?

Вот мой сценарий.

<?php error_reporting(0); 

include'db.php'; 
if(isset($_POST['submit'])!=""){ 

$extension = substr($_FILES['photo']['name'], strrpos($_FILES['photo']['name'], '.')); 

$extension = strtolower($extension); 


if($extension == ".jpg" || $extension == ".jpeg" || $extension == ".gif" ||$extension == ".png" ||$extension == ".pdf" ||$extension == ".doc" ||$extension == ".docx") 
{ 

$name=$_FILES['photo']['name']; 
$size=$_FILES['photo']['size']; 
$type=$_FILES['photo']['type']; 
$temp=$_FILES['photo']['tmp_name']; 
$caption1=$_POST['caption']; 
$link=$_POST['link']; 

$limit_size=512000; // Define file size limit in Bytes. 
$size_in_kb=1024; // File size in KB 
$divide=$limit_size/$size_in_kb; // Dividing both the variables to get the size in KB. 


if($size > $limit_size){ 
echo "<center>Your file size is over limit. Max upload size $divide KB.</center><BR>"; 
echo "<center><a href='form.php'>Try Again</a></center>"; 

} 

else { 
move_uploaded_file($temp,"admin/files/".$name); 

$insert=mysql_query("insert into upload(name, fname, phone, email, message)values('$name','$_POST[fname]','$_POST[phone]','$_POST[email]','$_POST[message]')"); 
} 

if($insert){ 
echo "<center><BR>Data submitted successfully.</center>"; 
} 
else{ 
die(mysql_error()); 
} 
} 
} 
?> 
<html> 
<head> 
<title>Upload and Download</title> 
</head> 

<body> 
<style> 
h1 {font-family:Georgia, "Times New Roman", Times, serif; font-size:36px; color:#000000} 
.formdesign {width: 350px; height: 300px; border:1px solid black; border-radius: 5px; margin-top: 75px; box-shadow: 10px 10px 5px #888888;} 
.testbox {width:300px; height: 50px; border: 1px solid grey} 
</style> 
<center> 
<div class="formdesign"> 

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post" enctype="multipart/form-data" name="form"> 
<table style="padding:7px; line-height:1;"> 
<tr> 
<th><label for="fname">Name</label></th> 
<td><input type="text" name="fname" id="fname" required maxlength="30" style="width: 220px; height:30px; font-size: 14px; font-family: georgia; text-indent: 15px;" placeholder="Your First Name"/></td> 
</tr> 

<tr> 
<th><label for="phone">Phone</label></th> 
<td><input type="text" name="phone" id="phone" required maxlength="15" style="width: 220px; height:30px; font-size: 14px; font-family: georgia; text-indent: 15px;" placeholder="Your Phone Number"/></td> 
</tr> 

<tr> 
<th> <label for="email">Email</label></th> 
<td> <input type="text" name="email" style="width: 220px; height:30px; font-size: 14px; font-family: georgia; text-indent: 15px;" placeholder="Your Email ID"> 
    </td> 
</tr> 

<tr> 
<th><label for="message">Message</label></th> 
<td> <textarea name="message" rows="4" cols="25" placeholder="Your message here!" maxlength="200"> 
</textarea> </td> 
</tr> 
</table><table border="0" cellspacing="0" cellpadding="5" id="table"> 
<tr> 
<th >Chosse Files (Max 500KB)</th> 
<td ><label for="photo"></label><input type="file" name="photo" id="photo" /></td> 
</tr> 
<tr> 
<th colspan="2" scope="row"><input type="submit" name="submit" id="submit" value="Submit" /></th> 
</tr> 
</table> 
</form> 
</div></center> 
<br /> 
<br /> 




</body> 
</html> 
+0

Вместо того чтобы использовать '' substr' и strrpos' Я хотел бы использовать [PathInfo] (http://php.net/manual/de/function.pathinfo.php), чтобы определить расширение. И, пожалуйста, добавьте отступы в свой код, иначе действительно сложно определить, правильны ли ваши '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' –

+0

Пожалуйста, обратитесь к этой ссылке: http://stackoverflow.com/questions/10456113/php-check-file-extension-in-upload-form – Lakhan

ответ

0

Вы опуская еще {} часть, где расширение не является правильным

<?php error_reporting(0); 

     include'db.php'; 
     if(isset($_POST['submit'])!="") 
     { 

     $extension = substr($_FILES['photo']['name'], strrpos($_FILES['photo']['name'], '.')); 

     $extension = strtolower($extension); 


      if($extension == ".jpg" || $extension == ".jpeg" || $extension == ".gif" ||$extension == ".png" ||$extension == ".pdf" ||$extension == ".doc" ||$extension == ".docx") 
      { 

      $name=$_FILES['photo']['name']; 
      $size=$_FILES['photo']['size']; 
      $type=$_FILES['photo']['type']; 
      $temp=$_FILES['photo']['tmp_name']; 
      $caption1=$_POST['caption']; 
      $link=$_POST['link']; 

      $limit_size=512000; // Define file size limit in Bytes. 
      $size_in_kb=1024; // File size in KB 
      $divide=$limit_size/$size_in_kb; // Dividing both the variables to get the size in KB. 


       if($size > $limit_size) 
       { 
       echo "<center>Your file size is over limit. Max upload size $divide KB.</center><BR>"; 
       echo "<center><a href='form.php'>Try Again</a></center>"; 

       } 

       else 
       { 
       move_uploaded_file($temp,"admin/files/".$name); 

       $insert=mysql_query("insert into upload(name, fname, phone, email, message)values('$name','$_POST[fname]','$_POST[phone]','$_POST[email]','$_POST[message]')"); 
       } 

       if($insert) 
       { 
       echo "<center><BR>Data submitted successfully.</center>"; 
       } 
       else 
       { 
       die(mysql_error()); 
       } 
      } 
      else 
      { 
       echo " wrong file type"; 
      } 
     } 
     ?> 
+0

Вы опускаете часть else {}, где расширение неверно –

0

Просто сделайте то же самое, что и когда вы поймаете слишком большой размер. В вашей еще, получить тот же код с другим сообщением об ошибке, как неправильно закачиваемого файла, только эти форматы ...

0

Редактировать «размер файла» состояние, и заменить:

$allowed_ext = explode(",", 'jpg,jpeg,gif'); //Extensions separated by coma 

if($size > $limit_size){ 
echo "<center>Your file size is over limit. Max upload size $divide KB.</center><BR>"; 
echo "<center><a href='form.php'>Try Again</a></center>"; 

} else if(!in_array(pathinfo($name, PATHINFO_EXTENSION), $allowed_ext)) { 
echo "<center>Your file is not allowed.</center><BR>"; 
echo "<center><a href='form.php'>Try Again</a></center>"; 
} 

Вы просто заменить этот код:

if($size > $limit_size){ 
echo "<center>Your file size is over limit. Max upload size $divide KB.</center><BR>"; 
echo "<center><a href='form.php'>Try Again</a></center>"; 

} 

Извините за мой плохой английский.

Bye

0

Вам просто нужно заполнить массив, содержащие ошибки и отображать его в верхней части формы. Не проверен, но ваш код должен выглядеть примерно так же, как этот образец.

<?php 
$allowedExt = array("jpg", "pdf"); // Add others allowed extenstions here 
$errors = array(); 
if(!in_array($extension, $allowedExt) 
{ 
    $errors[] = "Invalid file ext"; 
} 
else { 
    // Normal process 
} 
?> 

<!--Inside the "View" at the top of form show errors-->  
<div class="formdesign"> 
    <?php 
    if(!empty($errors)) : 
     foreach($errors as $error) : 
      echo "<p>{$error}</p>"; 
     endforeach;   
    endif; 
    ?> 
</div> 
+0

Я мог бы быть неправильным, но не должен быть либо 'array (" jpg "," pdf ");' или '[" jpg "," pdf "]'? –

+0

@ t.niese Отсутствует 'array()' thx. – Debflav

Смежные вопросы