在链接上单击下载文件并运行脚本以发送邮件

时间:2014-04-04 11:34:01

标签: php jquery ajax

从过去3天开始,我试图解决这个简单的问题,但没有成功。 我想要做的是点击链接按钮我必须下载文件并通过邮件发送通知

$ path是要下载的文件的路径

   echo '<a href="'.$path.'" class="links" seq="'. $id .'" >Download</a>';

jquery调用sendMail.php onclick

  $(".links").click(function(){
      var s=($(this).attr('seq'));
     alert(s);
     $.ajax({
             type:'POST',
             url:'sendMail.php',
             data:{s:s},
             success:function(result){

                  alert(result);
                  }

         }) 

     }); 

问题是,当我点击下载链接文件时,下载但发送邮件脚本无效。   有没有像下载和发送邮件一样可能在链接点击PHP可能。   谢谢先进..

sendMail.php脚本

   $q=$_POST['s'];
   echo "this is q value".$q;
   $sqlid="SELECT * FROM files_table WHERE id = '".$q."'";
   $result = mysqli_query($conn,$sqlid);
   $row=mysqli_fetch_array($result);
   //collect data from table
   $id=$row['id'];
   $email =$row['user_email'];
   $message=$row['message'];
   $file_type=$row['file_type'];
   $download=$row['file_name'];
   $time=$row['time'];
  $file_name=$row['file_name'];

   $to=$email;
   $from = "support@print.com"; // sender
   $subject = $id.'   '.$message;
   $message = " 

  messsage text
    ";

// message lines should not exceed 70 characters (PHP rule), so wrap it
$message = wordwrap($message, 70);
// send mail
mail($to,$subject,$message,"From: $from\n");
echo "Mail Sent";  

2 个答案:

答案 0 :(得分:0)

试试这个 - 首先在邮件发送后调用php动作,你将被重定向到下载链接

$(".links").click(function (e) {
    e.preventDefault();
    var self = $(this);
    var s = self.attr('seq');
    var href = self.attr('href');
    alert(s);
    $.ajax({
        type: 'POST',
        url: 'sendMail.php',
        data: {s: s},
        success: function (result) {
            window.location.href = href;
        }
    })
});

答案 1 :(得分:0)

您需要捕获点击事件并阻止该页面加载te链接。它重新加载你的窗口,所以你的JS不会被触发。在阻止触发链接之后,再次触发点击

试试这个:

  $(".links").click(function(event){
     event.preventDefault();
      var s=($(this).attr('seq'));
     alert(s);
     $.ajax({
             type:'POST',
             url:'sendMail.php',
             data:{s:s},
             success:function(result){

                  alert("success");

                  }

         }); 
       window.location.href = $(this).attr("href");
     }); 

修改

如果您使用aqbove示例,我认为您的JS工作正常,让我们尝试调试您的PHP代码:

你可以做些什么来测试你的问题:

  1. 验证您的POST已发送ID

  2. 验证数据库选择是否适用于其中,并返回一个实际结果。

  3. 尝试这样的事情:     $ result = mysqli_query($ conn,$ sqlid);

    if(mysql_num_rows($result) == 0) 
    { 
        echo "no Results";
    }
    else{
        // only one result so we dont do a while loop here
        $row = mysqli_fetch_assoc($result);
    
        $id=$row['id'];
        $email =$row['user_email'];
        $message=$row['message'];
        $file_type=$row['file_type'];
        $download=$row['file_name'];   // Two times assign "file_name" ??
        $time=$row['time'];
        $file_name=$row['file_name'];
    
    }
    
    1. 切换mysqli_fetch_array($ result); for mysqli_fetch_assoc($ result);它更快,你不使用数字索引mysqli_fetch_array返回。 (见上面的例子)

    2. 尽可能基本测试邮件,然后尝试添加内容。

    3. 邮件(&#39; yourmail@gmail.com',&#39;我的主题&#39;,$ message);