【问题标题】:How Would I Return Two Multiple Select Values In HTML?如何在 HTML 中返回两个多选值?
【发布时间】:2012-10-30 00:10:39
【问题描述】:

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

*更新*

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

}

?>

【问题讨论】:

  • 不知道为什么这被否决了......我想我知道你在说什么,但你能发布一些代码吗?更容易谈论细节。
  • 当然,我也有同感!为什么人们要拿走我的代表 LOL!
  • 我发布的代码有帮助吗?
  • 只是为了检查 - 您希望用户的电子邮件列表显示在 &lt;select&gt; 中。用户选择一个选项,单击一个按钮,然后显示该电子邮件?这是交易吗?
  • 不,我在选择中显示了潜在客户的 Names,当用户选择一个时,他们选择的人的姓名和电子邮件将被发送到 mysql数据库,以及主题和消息... 然后,我将使用 cron 作业调用一个 php 脚本,该脚本将向提供的电子邮件发送一封电子邮件,并附上相应的主题和消息。然后,名称、主题和消息将被发送到一个名为 sentemails 的单独 mysql 数据库表中,我将有一个单独的网页,他们可以在其中查看已发送的电子邮件,但我希望他们能够看到潜在客户的名称,不是电子邮件...

标签: php html arrays forms parsing


【解决方案1】:

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

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

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

<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>

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

所以现在您的&lt;select&gt; 与以前完全相同,但它会交回相应的数据库ids,而不是实际的电子邮件地址。

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

<?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>");
    }
}
?>

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

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

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

希望这会有所帮助。

警告:

不鼓励使用mysql,而是使用mysqli。引用页面:

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

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

【讨论】:

  • 一切都有意义,除了 fetch_assoc... 我将如何使用它?
  • 我希望有一个页面,用户可以在其中查看他们通过网站发送的所有电子邮件,并且我希望他们能够看到他们发送给谁、主题和消息......他们看到他们发送给谁的地方,我认为他们更容易看到他们通过电子邮件发送的人的姓名,而不是电子邮件。
  • 但另外,我需要实际的电子邮件地址值,以便 PHP 邮件函数知道将电子邮件发送到哪里。
  • 但是在发送电子邮件页面的选择框中,用户看到的是人名,而不是他们的电子邮件...
  • 这是否有助于您更好地理解?
【解决方案2】:

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

$("#lead_name").val($("#lead option:selected").text());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-10
    • 2015-10-25
    • 1970-01-01
    • 2011-01-01
    • 2015-09-19
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    相关资源
    最近更新 更多