0

ID列、名前列、および電子メール列を持つ「リード」と呼ばれるmysqlデータベーステーブルがあります。現在、複数選択ボックスからリードを選択しているユーザーがいます。これは、html formwith$_POSTメソッドから配列として返されます。選択ボックス項目の値をメール列として持っており、フロント エンドでユーザーに表示されるのは名前列です。ただし、後で使用するために、電子メールと名前の 2 つの値を返すことができるようにしたいと考えています。後で PHP を使用して電子メールを送信できるように、電子メールの値をカンマで区切られるようにする必要があります。mail関数。ただし、ユーザーが送信されたメールを見ると、名前の値を表示したいと思います。配列を解析するか、ID列セットを値として使用できることを読んだことがありますが、これはより実用的なようですが、どうすればよいかわかりません。何か案は?助けてくれてありがとう!

*更新*

基本的に、サイトにログインするユーザーは、mysql データベースに独自のリードを持っています。名前で 1 つまたは複数のリードを選択できる「メール送信」ページにアクセスできるようにする必要があります。次に、件名フィールドとメッセージ フィールドがあり、メールを書くことができます。次に、「メールを送信」フォームの送信ボタンがあります。「メールを送信」をクリックした後、後で使用するために、選択した見込み客のメール アドレスと名前を取得したいと考えています。PHP のメール機能を使用してメール アドレスを送信できるように、メール アドレスをカンマで区切る必要があります。 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>

最後のコード ブロックの目的がよくわからないので、そのままにしておきました。私はあなたがそのデータで何か他のことをしていると思います...?

これで、 your<select>は以前とまったく同じですが、実際の電子メール アドレスidの代わりに、対応するデータベース s が返されます。

ここで、データを送信する際に、方針を少し変更します。

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

s は配列で渡されるためid、それらを使用してデータベースから必要な情報を取得できます。この場合、メールアドレスを取得しているだけです。他の情報を取得する場合は、同じ手法を使用できます。 のリストは にidまだ存在する$collectedleadsため、別のクエリを実行して必要なデータを取得できます。

メールが送信された後、メールの名前、件名、メッセージを「SentEmails」と呼ばれる別のデータベースに入れる必要があります。

その場合、idデータを使用してクエリ$collectedleadsを実行し、必要な情報 (名前、電子メール アドレスなど) を取得し、テーブルに対してクエリを実行してその情報をコピーします。SELECTleadsINSERTSentEmails

お役に立てれば。

警告:

の使用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 に答える