Php 如何正确地将会话变量发送到电子邮件?
我正在处理一个项目,在该项目中,我发送存储在会话变量Php 如何正确地将会话变量发送到电子邮件?,php,html,css,Php,Html,Css,我正在处理一个项目,在该项目中,我发送存储在会话变量$\u session['favorites']中的信息 我使用了print\r函数print\r($\u SESSION,true),它的输出如下 Array ( [favourites] => Array ( [0] => Array ( [item_id] => 3 ) [1] =&
$\u session['favorites']
中的信息
我使用了print\r函数print\r($\u SESSION,true)
,它的输出如下
Array
(
[favourites] => Array
(
[0] => Array
(
[item_id] => 3
)
[1] => Array
(
[item_id] => 11
)
)
)
相反,我实现了一个带有while循环的foreach来显示内容并将其存储在变量$email\u message
中。代码的问题在于,由于$email\u message
是一个变量,因此它在的while循环中被覆盖和回显
我的主要目标是通过电子邮件发送会话变量中的所有信息
这是phpmailer代码,包括上面提到的foreach
和while循环
<?php
use PHPMailer\PHPMailer\PHPMailer;
foreach($_SESSION["favourites"] as $key => $value)
{
$id = $value['item_id'];
$sql= "SELECT * FROM menu WHERE id = '$id'";
$result=mysqli_query($conn, $sql);
$resultcheck=mysqli_num_rows($result);
while($row=mysqli_fetch_assoc($result))
{
$email_message = ($row['id']). ($row['name']). ($row['price']).'<br>';
}
echo $email_message;
}
if(isset($_POST['fullname']) && isset($_POST['email']))
{
$name = $_POST['fullname'];
$email = $_POST['email'];
$subject = 'My favourite\'s list as of '. date("Y/m/d");
//Calling the PHPMailer 'functions'
require_once "vendor\phpmailer\phpmailer\src\PHPMailer.php";
require_once "vendor\phpmailer\phpmailer\src\SMTP.php";
require_once "vendor\phpmailer\phpmailer\src\Exception.php";
$mail = new PHPMailer();
//SMTP Settings
//$mail -> SMTPDebug = 3;
$mail -> isSMTP();
$mail -> Host = "smtp.gmail.com";
$mail -> SMTPAuth = true;
$mail -> Username = "cis1045sem2a2021@gmail.com";
$mail -> Password = 'universityofmalta';
$mail -> Port = 587;
$mail -> SMTPSecure = "tls";
//Email Settings
$mail -> isHTML(true);
$mail -> setFrom($email, $name);
$mail -> addAddress("cis1045sem2a2021@gmail.com");
$mail -> Subject = $subject;
$mail -> Body = $email_message;
if ($mail->send()) {
echo "Email is sent!";
} else {
echo "Something is wrong: <br><br>" . $mail->ErrorInfo;
}
}
?>
更改此选项:
$email_message .= ($row['id']). ($row['name']). ($row['price']).'<br>';
$email\u message=($row['id'])。($row['name'])。($row['price'])。
;
为此:
$email_message = ($row['id']). ($row['name']). ($row['price']).'<br>';
$email\u message.=($row['id'])。($row['name'])。($row['price'])。
;
El_Vanja就是这么说的。如果我理解正确,问题就在这里:
$email_message .= ($row['id']). ($row['name']). ($row['price']).'<br>';
或
顺便说一句,援助也来自马耳他;) 警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。因此,不是覆盖,而是附加到变量?我相信您熟悉字符串连接。或者,您可以构建一个用于电子邮件内容的行数组,然后用新行将其内爆。请共享更多详细信息-您尝试了哪些方法来解决此问题?发送一封与CSS相关的电子邮件又是怎样的呢?我做了@El_Vanja所说的和下面的回答。我基本上是通过在foreach循环之前使用“.=”和初始化的$email消息附加到$email消息。工作起来很有魅力。干杯@Combinu
$email_message = ($row['id']). ($row['name']). ($row['price']).'<br>';
$email_message .= ($row['id']). ($row['name']). ($row['price']).'<br>';
$email_message .= ($row['id']). ($row['name']). ($row['price']).PHP_EOL;