0

我有一个名为“leads”的 mysql 数据库表,其中包含一个 id 列、一个 name 列和一个 email 列。form我目前有用户从多个选择框中选择一个潜在客户,该选择框作为一个带有$_POST方法的 html 的数组返回。我将选择框项的值作为电子邮件列,在前端向用户显示的是名称列。但是,我希望能够返回两个值,电子邮件和名称,以供以后使用。我需要让电子邮件值能够在它们之间用逗号分解,这样我以后可以使用 PHP 向它们发送电子邮件mail功能。但是,当用户查看已发送的电子邮件时,我想向他们显示名称值。我已经读过我可以解析数组,或者使用 id 列集作为值,这似乎更实用,但是,我不确定我将如何去做。有任何想法吗?提前感谢您的帮助!

*更新*

基本上,登录网站的用户在 mysql 数据库中有自己的线索。我需要他们能够转到“发送电子邮件”页面,在那里他们可以按名称选择一个或多个潜在客户。然后有一个主题字段和一个消息字段,以便他们可以编写电子邮件,然后我有一个“发送电子邮件”表单提交按钮。在他们单击“发送电子邮件”后,我想取回他们选择的潜在客户的电子邮件地址和姓名,以备后用。我需要用逗号分隔电子邮件地址,以便我可以通过 php 邮件功能发送它们......但重要的是,我希望将表单中的信息存储在名为“PendingEmails”的数据库表中,我将运行一个 cron 作业来运行一个脚本,该脚本会找到需要发送的电子邮件,然后发送它们......发送电子邮件后,我需要将电子邮件中的姓名、主题和消息放入一个名为“SentEmails”的单独数据库中。在网站的另一个页面上,我希望用户能够看到他们发送的所有电子邮件,但我希望他们看到他们发送邮件的人的姓名,而不是电子邮件地址。这就是我需要姓名和电子邮件的原因。我需要邮件功能的电子邮件,以及要向用户显示的名称。我喜欢您使用 id 并运行其余服务器端的想法,我只是不知道该怎么做。希望这有帮助。这就是我需要姓名和电子邮件的原因。我需要邮件功能的电子邮件,以及要向用户显示的名称。我喜欢您使用 id 并运行其余服务器端的想法,我只是不知道该怎么做。希望这有帮助。这就是我需要姓名和电子邮件的原因。我需要邮件功能的电子邮件,以及要向用户显示的名称。我喜欢您使用 id 并运行其余服务器端的想法,我只是不知道该怎么做。希望这有帮助。

这是选择框:

<select data-placeholder="Select Lead(s) To Email..." multiple="true" class="chzn-container-multi" name="selectleads[]"style="width:505px;">
            <?php
do {  
?>
            <option value="<?php echo $row_rsAllLeads['Email']?>"><?php echo $row_rsAllLeads['FullName']?></option>
            <?php
} while ($row_rsAllLeads = mysql_fetch_assoc($rsAllLeads));
  $rows = mysql_num_rows($rsAllLeads);
  if($rows > 0) {
      mysql_data_seek($rsAllLeads, 0);
      $row_rsAllLeads = mysql_fetch_assoc($rsAllLeads);
  }
?>
          </select>

这是实际的表单操作:

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
    $startcode = $_POST['messagefield'];
    $replaced = preg_replace( '/\\\\(?="|\')/', '', $startcode );
    $selected = $_POST['selectleads'];
    $collectedleads = implode(", ", $_POST['selectleads']);
 $to = $collectedleads;
 $subject = $_POST['subjectfield'];
 $body = $replaced;
 $headers = "MIME-Version: 1.0\r\n"; 
 $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
 $headers .= "From: " . $row_rs_CurrentUser['FirstName'] . " " . $row_rs_CurrentUser['LastName'] . " <" . $row_rs_CurrentUser['Email'] . ">";
 if (mail($to, $subject, $body, $headers)) {
  } else {
   echo("<p>Message delivery failed...</p>");
  }

}

您给我的代码,我尝试(但失败)编辑和工作:

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
    $startcode = $_POST['messagefield'];
    $replaced = preg_replace( '/\\\\(?="|\')/', '', $startcode );

    mysql_select_db($database_myBackOfficeConn, $myBackOfficeConn);

    $collectedleads = implode(", ", $_POST['selectleads']);

//arrays to store email addresses and names
$emails = array();
$names = array();

foreach ($collectedleads as $id) {
  mysql_query("SELECT Email, FullName FROM Leads 
    WHERE Id = " . mysql_real_escape_string($id));

  while ($row = mysql_fetch_assoc()) {
    $emails[] = $row['Email'];
    $names[] = $row['FullName'];
  }
}
 $to = $collectedleads;
 $subject = $_POST['subjectfield'];
 $body = $replaced;
 $headers = "MIME-Version: 1.0\r\n"; 
 $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
 $headers .= "From: " . $row_rs_CurrentUser['FirstName'] . " " . $row_rs_CurrentUser['LastName'] . " <" . $row_rs_CurrentUser['Email'] . ">";
 if (mail($to, $subject, $body, $headers)) {
  } else {
   echo("<p>Message delivery failed...</p>");
  }

}

?>
4

2 回答 2

1

我认为在服务器端检索数据会更有意义。<option>将值设置为数据库的id列值,而不是电子邮件地址。

编辑:在与 OP 讨论后更改了大部分答案

请记住,您发布的代码只是一个片段,因此我无法对此进行测试,您可以尝试以下方式:

<select data-placeholder="Select Lead(s) To Email..." multiple="true" 
  class="chzn-container-multi" name="selectleads[]"style="width:505px;">
<?php   
  /* I think while is better, in case there are no results. 
    do...while would attempt to echo the first result in a set even 
    if there were no results, which would give an error, methinks. */

  //Use the id field of your database when you populate the select
  while ($row_rsAllLeads = mysql_fetch_assoc($rsAllLeads)) {  ?>
  <option value="<?php echo $row_rsAllLeads['id']?>">
    <?php echo $row_rsAllLeads['FullName']?></option>
<?php
  }

  /* What is this block used for? */
  $rows = mysql_num_rows($rsAllLeads);
  if($rows > 0) {
    mysql_data_seek($rsAllLeads, 0);
    $row_rsAllLeads = mysql_fetch_assoc($rsAllLeads);
  }
?>
</select>

我不确定最后代码块的用途,所以我就离开了。我假设你对这些数据做了其他事情......?

所以现在你<select>的和以前完全一样,但不是实际的电子邮件地址,而是交回相应id的数据库。

现在,在提交数据时,我们稍微改变一下策略:

<?php
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
  $startcode = $_POST['messagefield'];
  $replaced = preg_replace( '/\\\\(?="|\')/', '', $startcode );
  $selected = $_POST['selectleads'];

  /* NEW CODE */
  /*selectleads[] is now an array of your database's ids. 
    You can now run a query to get whatever information you 
    need. In this case, you want the email addresses, so:
   */
  $collectedleads = $_POST['selectleads'];
  $emailaddylist = array();
  foreach ($collectedleads as $id) {
    $x = mysql_query("SELECT `Email` FROM `leads` WHERE `id` = " . 
       mysql_real_escape_string($id));
    $x_assoc = $x->fetch_assoc();
    $emailaddylist[] = $x['Email'];
  }
  /*Now you have an array of email addresses that correspond to 
    the ids you were sent via $_POST.
   */
  $emailaddystring = implode(", ", $emailaddylist);

  $to = $emailaddystring;

  /*If you want to use any other data from the database, 
     you still have an array of ids in $collectedleads.
     Just run another query to get the data you want.*/

  /* END OF NEW CODE */

  $subject = $_POST['subjectfield'];
  $body = $replaced;
  $headers = "MIME-Version: 1.0\r\n"; 
  $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
  $headers .= "From: " . $row_rs_CurrentUser['FirstName'] . " " . $row_rs_CurrentUser['LastName'] . " <" . $row_rs_CurrentUser['Email'] . ">";
  if (mail($to, $subject, $body, $headers)) {
    } else {
      echo("<p>Message delivery failed...</p>");
    }
}
?>

因为我们得到id了数组中的 s,所以我们可以使用它们从数据库中获取我们想要的任何信息。在这种情况下,我们只是获取电子邮件地址。如果您想检索任何其他信息,您可以使用相同的技术 - ids 的列表仍然存在于 中$collectedleads,因此您可以运行另一个查询来获取您需要的任何数据。

发送电子邮件后,我需要将电子邮件中的姓名、主题和消息放入一个名为“SentEmails”的单独数据库中

在这种情况下,使用id数据$collectedleads运行SELECT查询leads以获取您需要的信息(姓名、电子邮件地址等),然后INSERT对表运行查询SentEmails以复制该信息。

希望这可以帮助。

警告:

mysql不鼓励使用以支持mysqli。引用页面:

如果您使用 MySQL 4.1.3 或更高版本,强烈 建议您改用 mysqli 扩展。

它的工作原理几乎完全相同;在大多数情况下,您需要做的就是将 放在i它前面。有些功能不适用于它,或者有更好的选择。你应该检查一下。

于 2012-10-30T00:38:05.533 回答
0

我会做什么,我会添加一个名为“lead_name”的隐藏字段,并在 onblur 事件中使用 jQuery 或纯 JS 填充它,并使用所选线索的值。

$("#lead_name").val($("#lead option:selected").text());
于 2012-10-30T00:35:41.183 回答