2012-09-27 2 views
0

У меня есть контактная форма php, которая в настоящее время проверяет вложение для типа файла и размера файла, , но Мне также нужно проверить, не забыл ли пользователь приложить изображение в целом (т.е. , прикрепление фотографий должно быть «обязательным полем» и при необходимости отправить сообщение «пожалуйста, прикрепите фотографию»).PHP-форма - проверить, был ли файл прикреплен

Форма в вопросе:

http://www.cucinadellanonna.com/nominate-form.php

Это часть кода, который проверяет вложение ... Я попытался добавить несколько вещей, но безрезультатно, так что я просто колоть во тьме.

//file upload validation 


    if(!empty($this->fileupload_fields)) 
    { 
    if(!$this->ValidateFileUploads()) 
    { 
     $ret = false; 
    } 
    } 
    return $ret; 
} 

function ValidateFileType($field_name,$valid_filetypes) 
{ 
    $ret=true; 
    $info = pathinfo($_FILES[$field_name]['name']); 
    $extn = $info['extension']; 
    $extn = strtolower($extn); 

    $arr_valid_filetypes= explode(',',$valid_filetypes); 
    if(!in_array($extn,$arr_valid_filetypes)) 
    { 
     $this->add_error("Valid file types are: $valid_filetypes"); 
     $ret=false; 
    } 
    return $ret; 
} 

function ValidateFileSize($field_name,$max_size) 
{ 
    $size_of_uploaded_file = 
      $_FILES[$field_name]["size"]/1024;//size in KBs 
    if($size_of_uploaded_file > $max_size) 
    { 
     $this->add_error("The file is too big. File size should be less than $max_size KB"); 
     return false; 
    } 
    return true; 
} 

function IsFileUploaded($field_name) 
{ 
    if(empty($_FILES[$field_name]['name'])) 
    { 
     return false; 
    } 
    if(!is_uploaded_file($_FILES[$field_name]['tmp_name'])) 
    { 
     return false; 
    } 
    return true; 
} 
function ValidateFileUploads() 
{ 
    $ret=true; 
    foreach($this->fileupload_fields as $upld_field) 
    { 
     $field_name = $upld_field["name"]; 

     $valid_filetypes = $upld_field["file_types"]; 

     if(!$this->IsFileUploaded($field_name)) 
     { 
      continue; 
     } 

     if($_FILES[$field_name]["error"] != 0) 
     { 
      $this->add_error("Error in file upload; Error code:".$_FILES[$field_name]["error"]); 
      $ret=false; 
     } 

     if(!empty($valid_filetypes) && 
     !$this->ValidateFileType($field_name,$valid_filetypes)) 
     { 
      $ret=false; 
     } 

     if(!empty($upld_field["maxsize"]) && 
     $upld_field["maxsize"]>0) 
     { 
      if(!$this->ValidateFileSize($field_name,$upld_field["maxsize"])) 
      { 
       $ret=false; 
      } 
     } 

    } 
    return $ret; 
} 

ответ

1

Если файлы не были загружены следующее заявление возвратит 0:

count($_FILES); 

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

function IsFileUploaded($field_name) 
{ 
    if(count($_FILES) > 0) 
    { 
     if(empty($_FILES[$field_name]['name'])) 
     { 
      return false; 
     } 
     if(!is_uploaded_file($_FILES[$field_name]['tmp_name'])) 
     { 
      return false; 
     } 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 
+0

Я смущен, чтобы признать, что я не достаточно PHP отбивные, чтобы сформировать заявление ... Я пытался обратный инжиниринг кучу других заявлений, но я просто колоть в темноте. –

+0

Я обновил свой ответ, он включает в себя модификацию вашей функции. – Flosculus

+0

Где в этой инструкции я бы поставил сообщение об ошибке '$ this-> add_error'? –

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