2

希望你们中的一些人对 php 有很好的了解!

基本上制作这个的人是 MIA,所以我不能问他我需要做什么来解决我们遇到的问题。

背景: 我们是一家锁匠公司,当他们有新工作时,我们使用自定义 Web 应用程序来通知我们的锁匠。这个网络应用程序还做了一些额外的事情,比如提供 gps 位置、工作时间以及在工作完成后从客户端保存签名的能力。

问题: 该应用程序通过接收从我们的名为 E3 的帐户管理应用程序发送的电子邮件来工作,该电子邮件(例如:http ://cl.ly/image/2E433O330T0N )被此 Web 应用程序读取,并被解析为电子邮件和网页并发送给锁匠以查看他的新工作。当锁匠到达他的手机上的网页时(例如:http ://cl.ly/image/0P1I0R0h0O3K),他可以看到工作详细信息,包括客户的姓名、地址和联系方式。但问题是,由于原始电子邮件中没有为工作说​​明分配标题,因此代码必须确定工作说明所在的位置,这是有问题的部分,因为 Web 应用程序不再显示工作中的数据笔记。工作笔记很重要,因为它告诉锁匠他需要修理什么。这以前有效,但现在刚刚停止工作,我们不确定为什么。

数据如何传输到 Web 应用程序是非常有趣的,而不是有一个数据库来存储数据,它被放在地址栏中,然后网页解释代码并将其格式化到页面中。

例如,这是当前链接的样子(取出数据,替换为 xxxxxxx):

http://www.xxxxxxx.com/apps/xxxxxx/on-my-way客户=xxxxxx&公司=xxxxxx&手机=xxxxxxx&电话=xxxxxxx&联系人=xxxxxxxx&地址数据=数组&地址索引=3&街​​道地址=xxxxxxxxx&地址位置=xxxxxxxx&邮政编码=xxxxxxx&城市=xxxxxxx&客户电子邮件=&工作日期=11/22/2012&工作时间=1:30:00 %20PM& jobID =xxxxxx& jobAMPM =PM& adminEmail =xxxxxxx&公司电话=xxxxxxxx&员工电子邮件=xxxxxxxx&员工姓名=xxxxxxx&员工电话=xxxxxxxx

以前,在工作时,此链接添加了一个 jobNotes 字段:

http://www.xxxxxxxx.com/apps/xxxxxxxx/on-my-way客户=xxxxxxxx&公司=xxxxxxxx&手机=xxxxxxxx&电话=&联系人=xxxxxxxx&地址数据=数组&地址索引=4&街道地址=xxxxxxxx&地址位置=xxxxxxxx&邮编=xxxxxxxx&城市=xxxxxxxx&客户电子邮件=xxxxxxxx&工作注释=Quote%20on%20installing%20new%20keying%20system% 0A%0AAlso%20would%20like%20a%20Quote%20on%20Install%20CCTV%0A%0ASub%20Total%3A%202%2C236.36%0AGST%3A%20223.64%0ATotal%3A%202%2C460.00%0A% 0AMISC&*工作日期=11/19/2012 *& jobTime =2:00:00%20PM& jobID =xxxxxxxx& jobAMPM =PM& adminEmail =xxxxxxxx& noreplyEmail =xxxxxxxx& companyPhone =xxxxxxxx& staffEmail =xxxxxxxx& staffName =xxxxxxxx& staffPhone =xxxxxxxx

编码:

这是 e3-parser.php 的摘录,该文件是用于将数据从 e3 电子邮件转换到 Web 应用程序的主文件。

    // Job notes
  if ($this->clientEmail) {

// REMOVED NOW THAT EMAIL IS BEING PUT ON THIRD LINE OF ADDRESS
//   // If customer email present grab everything after it save it as job notes
//   preg_match("/$this->clientEmail[^-]+/",$e3Output,$matches);
//   $result = implode("",$matches);
//   $notes  = trim(str_replace($this->clientEmail,'',$result));
//   $this->jobNotes = rawurlencode($notes);
// } else {

    // Fall back to grabbing everything after the time
    preg_match("/AM[^-]+/",$e3Output,$matchesAM);
    preg_match("/PM[^-]+/",$e3Output,$matchesPM);
    $resultAM = implode("",$matchesAM);
    $resultPM = implode("",$matchesPM);    
    $notes  = trim(str_replace('AM','',$resultAM) . str_replace('PM','',$resultPM));
    $this->jobNotes = rawurlencode($notes);
  }

这里的问题是,它是否成功抓取了Required Time字段之后列出的数据?(它正在读取的示例电子邮件http://cl.ly/image/2E433O330T0N:)

以下是将解析后的数据放入网页的代码:

// Create job link
$url      = $e3->create_job_url('http://www.prvgroup.com.au/apps/jobbook/on-my-way?');  
$linkName = "View job details";
$href     = '<a class="btn btn-small" href="' . $url . '&staffEmail=' . $staff-    >staffEmail . '&staffName=' . $staff->staffName . '&staffPhone=' . $staff->staffPhone . '">' . $linkName . '</a>';  

这将通过电子邮件发送给锁匠,在可点击的链接“查看工作详细信息”上通知他他的新工作。该链接充满了所需的数据。但是从外观上看,jobNotes 的数据不存在。当代码显示 jobNotes 时,我对这段代码的备份在此处显示完全相同的内容,因此我不确定它是如何放入该字段的。

如果你能做到这一点,那就太好了!我希望我对问题是什么已经足够清楚了,但是如果您需要更多说明,请问!

干杯,马克

4

1 回答 1

1

在查看您的代码后,如果有 clientEmail,您只会运行 preg_match。从上面的示例电子邮件来看,您似乎从未执行过此代码,因为没有客户端电子邮件或使用 preg_match 找不到它。要查看的具体位置在 e3-parser.php 文件的第 113 行。你会看到这个:

if($this->clientEmail) 
{
    //matching code here.
}

在第 109 行和第 110 行,您正在寻找一个电子邮件地址,但要么没有找到要么它在错误的位置。无论如何,无论是否有电子邮件地址,您都应该执行此代码。必须设置注释以供以后使用,现在没有设置任何内容。删除此 if 语句应该可以解决您的问题。

于 2012-11-26T02:58:13.003 回答