drrqwokuz71031449 2016-05-30 01:01
浏览 32
已采纳

PHP表单错误,即使没有附加文件

I have a form that users may choose to upload a file to and it will send an email with the file as an attachment.

The issue I am having is that AJAX alert below always gives me the The uploaded file is not a supported file type. message from the PHP code even if I did not choose any files to attach.

if (data.error) {
   alert(data.error.message);
 }`

AJAX Code:

$(document).ready(function (e){
$("#main-contact-form").on('submit',(function(e){
    e.preventDefault();
    $('#sendingemail').fadeIn();
        $.ajax({
        url: "../sendemail.php",
        type: "POST",
        data:  new FormData(this),
        contentType: false,
        cache: false,
        processData: false,
        success: function(data){
            if (data.error) {
                    alert(data.error.message);
                }
            else{
                $('#sendingemail').fadeOut();
                $('#emailsent').fadeIn();
              alert(data.message);
            }
        },
      error: function(XHR,textStatus,errorThrown) {
              console.log(data);
            //alert("error");
              alert(XHR.status);
            alert(textStatus);
            alert(errorThrown);
        }
    }           
 );
}));
});

PHP Code:

<?php

    header('Content-type: application/json');

            // WE SHOULD ASSUME THAT THE EMAIL WAS NOT SENT AT FIRST UNTIL WE KNOW MORE.
            // WE ALSO ADD AN ATTACHMENT KEY TO OUR STATUS ARRAY TO INDICATE THE STATUS OF OUR ATTACHMENT:  
            $status = array(
                            'type'          =>'Error',
                            'message'       =>'Couldn\'t send the Email at this Time. Something went wrong',
                            'attachement'   =>'Couldn\'t attach the uploaded File to the Email.'
            );

    //Added to deal with Files
    require_once('PHPMailer/class.phpmailer.php');

    if(isset($_FILES['uploaded_file'])){    
    //Get the uploaded file information
        $name_of_uploaded_file =
            basename($_FILES['uploaded_file']['name']);

        //get the file extension of the file
        $type_of_uploaded_file =
            substr($name_of_uploaded_file,
            strrpos($name_of_uploaded_file, '.') + 1);

        $size_of_uploaded_file =
            $_FILES["uploaded_file"]["size"]/1024;//size in KBs

        //Settings
        $max_allowed_file_size = 10000; // size in KB
        $allowed_extensions = array("jpg", "jpeg", "gif", "bmp","png");

        //Validations
        if($size_of_uploaded_file > $max_allowed_file_size )
        {
          $status['type']    = 'Error';
        $status['message'] = 'Error: Size of file should be less than ~10MB. The file you attempted to upload is too large. To reduce the size, open the file in an image editor and change the Image Size and resave the file.';
          echo(json_encode($status));
          exit;
        }

        //------ Validate the file extension -----
        $allowed_ext = false;
        for($i=0; $i<sizeof($allowed_extensions); $i++)
        {
          if(strcasecmp($allowed_extensions[$i],$type_of_uploaded_file) == 0)
          {
                $allowed_ext = true;
          }
        }

        if(!$allowed_ext)
        {
          $status['type']    = 'Error';
        $status['message'] = 'Error: The uploaded file is not a supported file type.';
          echo(json_encode($status));
            exit;
        }

  $upload_folder = "temp/";
        $path_of_uploaded_file = $upload_folder . $name_of_uploaded_file;
        $tmp_path = $_FILES["uploaded_file"]["tmp_name"];

        if(is_uploaded_file($tmp_path))
        {
          if(!copy($tmp_path,$path_of_uploaded_file))
          {
              $status['type']    = 'Error';
            $status['message']   = 'Error: Encountered an error while copying the uploaded file';
            exit;
          }
        }
}
    //--end

    $name = @trim(stripslashes($_POST['name'])); 
    $clientemail = @trim(stripslashes($_POST['email'])); 
    $subject = @trim(stripslashes($_POST['subject'])); 
    $message = @trim(stripslashes($_POST['message']));

    $body = 'Name: ' . $name . "

" . 'Email: ' . $clientemail . "

" . 'Subject: ' . $subject . "

" . 'Message: ' . $message;

     $email = new PHPMailer();      

    $email->From      = $clientemail;
    $email->FromName  = $name;
    $email->Subject   = $subject;
    $email->Body      = $body;  
    $email->AddAddress( 'root@localhost.com' ); //Send to this email

    $email->isMail();

  if(isset($_FILES['uploaded_file'])){   
                if($email->AddAttachment( $path_of_uploaded_file , $name_of_uploaded_file )){
            $status['message']   = 'The Uploaded File was successfully attached to the Email.';  
        }
  }
        header("Content-Type: application/json; charset=utf-8", true);
 // NOW, TRY TO SEND THE EMAIL ANYWAY:
        try{
            $success    = $email->send();
            $status['type']    = 'success';
            $status['message']  = 'Thank you for contacting us. We will reply as soon as possible.';   
        }catch(Exception $e){
            $status['type']     ='Error';
            $status['message']  ='Couldn\'t send the Email at this Time. Something went wrong';     
        }   

 die(json_encode($status));

HTML:

        <form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php" enctype="multipart/form-data">
            <div class="col-sm-5 col-sm-offset-1">
                <div class="form-group">
                    <label>Name *</label>
                    <input type="text" name="name" class="form-control" required="required">
                </div>
                <div class="form-group">
                    <label>Email *</label>
                    <input type="email" name="email" class="form-control" required="required">
                </div>
                <div class="form-group">
                    <label>Phone</label>
                    <input type="number" class="form-control">
                </div>
                <div class="form-group">
                    <label>Company Name</label>
                    <input type="text" class="form-control">
                </div>                        
            </div>
            <div class="col-sm-5">
                <div class="form-group">
                    <label>Subject *</label>
                    <input type="text" name="subject" class="form-control" required="required">
                </div>
                <div class="form-group">
                    <label>Message *</label>
                    <textarea name="message" id="message" required="required" class="form-control" rows="8" style="height:125px"></textarea>
                    <label for='uploaded_file' style="margin-top:10px">Select A Photo To Upload:</label>
                    <input type="file" name="uploaded_file">
                </div>                        
                <div class="form-group">
                    <button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>
                </div>
            </div>
        </form> 
  • 写回答

1条回答 默认 最新

  • douwei4370 2016-05-30 04:05
    关注

    You will find when you print_r($_FILES), even when you have not attached a file, will give you this array:

    Array
    (
        [uploaded_file] => Array
            (
                [name] => 
                [type] => 
                [tmp_name] => 
                [error] => 4
                [size] => 0
            )
    )
    

    You do not want to check isset($_FILES['uploaded_file']) but rather if

    1. $_FILES['uploaded_file']['error'] == 0 or
    2. !empty($_FILES['uploaded_file']['name'])

    EDIT:

    Just so I am clear, my answer is addressing the comment that you receive your error message "...even if I did not choose any files to attach". My answer explains why this would occur.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊