如何通过电子邮件发送由jquery uploader的php表单变量创建的所有值

时间:2016-10-06 07:19:36

标签: php jquery forms uploadcare

我正在尝试在我的自定义php表单中实现uploadcare小部件,它将获取用户上传的所有图像,并向图像添加图像URL和文件名等附加信息,并通过电子邮件将这些附加数据发送给客户端。我已成功实施表单和电子邮件模板。问题是,当我发送表单时,生成的电子邮件包含仅有一个图像的信息。

如果我听起来有点模糊,请查看代码,其中up​​loadcare小部件上传的所有图像都作为列表项插入列表中。

 $ = uploadcare.jQuery;
     function installWidgetPreviewMultiple(widget, list) {
       widget.onChange(function(fileGroup) {
         list.empty();
         if (fileGroup) {
           $.when.apply(null, fileGroup.files()).done(function() {

             $.each(arguments, function(i, fileInfo) {
               // display file preview
               var $filename = fileInfo.name;
               var $fileurl = fileInfo.cdnUrl;
               var $src = fileInfo.cdnUrl + '-/resize/100x100/filename.jpg';
               var $sendurl = $("<input>").attr("type","hidden").attr("name","fileurl").val($fileurl);
               var $itemnu = 0;
               list.append(
            $('<li class="thumb_list_item"><input type="hidden" name="items" id="items" value="' + $fileurl +'"><img src="' + $src+ '" alt="Image Preview">' + '<h4 class="filename">' + $filename + '</h4>' + '<div class="get-layer-wraper"><ul class="get-layer"><li class="layer-name"><label for="white-layer" class="layer-title">White Layer : </label></li><li><input id="white-layer" name="white-layer" class="layer" type="number" value="0"/></li><li>PX</li></ul><div class="clear"><ul class="get-layer"><li class="layer-name"><label for="adhesive-layer" class="layer-title">Adhesive Layer : </label></li><li><input id="adhesive-layer" name="adhesive-layer" class="layer" type="number" value="0"/></li><li>PX</li></ul><div class="clear"><ul class="get-layer"><li class="layer-name"><label for="block-layer" class="layer-title">Blocking Layer : </label></li><li><input id="block-layer" name="block-layer" class="layer" type="number" value="0"/></li><li>PX</li></ul><div class="clear"><ul class="get-layer"><li class="layer-name"><label for="clear-layer" class="layer-title">Clear Layer : </label></li><li><input id="clear-layer" name="clear-layer" class="layer" type="number" value="0"/></li><li>PX</li></ul></div></li>').appendTo(".thumb_list")
            );

               list.append(
            $('<div>', {'class': 'layers'}).append($sendurl)                 
          );



             });
           });
         }
       });
     }

这是我的mailer.php用于发送电子邮件:

require 'vendor/autoload.php';
$sendgrid = new SendGrid('send_grid_api');
$mail = new SendGrid\Email();

 $name = "X";
 $email = "test@email.com";
 $fileurl = $_POST['fileurl'];
 $wlayer = $_POST['white-layer'];
 $alayer = $_POST['adhesive-layer'];
 $blayer = $_POST['block-layer'];
 $clayer = $_POST['clear-layer'];

 $msg = "White Layer: $wlayer, Adhesive Layer: $alayer, 
 Blocking Layer:      $blayer, Clear Layer: $clayer. 
 Download Link: $fileurl \n";

 $recipient ="test@email.com";
 $subject = "New Email";

$mail->
addTo( $recipient )->
setFromName($name)->
setFrom( $email )->
setSubject($subject)->
setText($msg);

//Send Mail.
if ($sendgrid->send($mail)) {
    header('Location: /thank-you/');
}
else{
    echo "failed";
}

我有中级jquery知识,但始终有点慢。所以请任何人帮助我。我所需要的只是包含电子邮件中的所有图像URL和其他信息,而不仅仅是一个。

提前致谢。

1 个答案:

答案 0 :(得分:1)

邮件程序部分 - 您可以在php中找到有关使用uploadcare组的文档here。一旦你完成它,你会发现你的正确的mailer.php将一个URL列表附加到消息正文中,如下所示:

<html>
<head>
<?php
require_once 'vendor/autoload.php';
use \Uploadcare;

//make sure you replace your key values here
$sendgrid = new SendGrid('send_grid_api');
$api = new Uploadcare\Api('YOUR_PUBLIC_KEY', 'YOUR_SECRET_KEY');

$mail = new SendGrid\Email();
$name = "X";
$email = "test@email.com";


$group_id = $_POST['fileurl'];
$wlayer = $_POST['white-layer'];
$alayer = $_POST['adhesive-layer'];
$blayer = $_POST['block-layer'];
$clayer = $_POST['clear-layer'];
$group = $api->getGroup($group_id);
$group->store();
$files = $group->getFiles();
$msg = "White Layer: $wlayer, Adhesive Layer: $alayer, 
Blocking Layer:      $blayer, Clear Layer: $clayer \n";


for($i = 0; $i < count($files); $i++) {

    $msg.=$files[$i]->getUrl().' \n';

    }

 $recipient ="test@email.com";
 $subject = "New Email";

$mail->
addTo( $recipient )->
setFromName($name)->
setFrom( $email )->
setSubject($subject)->
setText($msg);

//Send Mail.
if ($sendgrid->send($mail)) {
    header('Location: /thank-you/');
}
else{
    echo "failed";
}

?>
</head>

<body>
</body>

</html>

对于第一部分 - 我回答了类似问题here - 唯一的区别是窗口小部件初始化:

<?php echo $api->widget->getInputTag('fileurl',array('data-multiple' => true)); ?>`   

而不是

 <?php echo $api->widget->getInputTag('fileurl'); ?>  

当然,您在表单中发送的字段名称应与POST语句中mailer.php中的字段名称相匹配。