我知道这可能是我身边缺少的东西。
我正在使用PHP,因为它是我的新手,因此在同一个类中将一个函数的变量访问另一个函数时遇到了问题。
我有一个名为function.php的页面,并全局声明了该变量。
这是我的代码
<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
include 'Config.php';
/**
*
*
*/
class function
{
public $insert = array();
public function store()
{
$db = new Config();
$insert = array(
'date' => mysqli_real_escape_string($db->connection, $_POST['Date']) ,
'Tov' => mysqli_real_escape_string($db->connection, $_POST['Tov']) ,
'Name' => mysqli_real_escape_string($db->connection, $_POST['Name']) ,
'rh_first' => mysqli_real_escape_string($db->connection, $_POST['rh_first']) ,
'se_second' => mysqli_real_escape_string($db->connection, $_POST['se_second']) ,
'pk_third' => mysqli_real_escape_string($db->connection, $_POST['pk_third'])
);
return $insert;
}
public function Send()
{
//Load Composer's autoloader
require 'vendor/autoload.php';
$mail = new PHPMailer(); // Passing `true` enables exceptions
//Server settings
$mail->SMTPDebug = 0; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'xxxxx@gmail.com'; // SMTP username
$mail->Password = 'yyyy'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
if ($this->insert['rh_first'] == "P") {
//Recipients
$mail->setFrom('xxx@gmail.com', 'xxx');
$mail->addAddress('xvb@gmail.com', 'xvb');
//content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Test';
$mail->Body = 'Test email';
}
//Recipients
$mail->setFrom('xxx@gmail.com', 'xxx');
$mail->addAddress('yyyya@gmail.com', 'yyyya');
// $mail->addCC('asdfg@gmail.com');
//Attachments
$mail->addAttachment('lobbyq.png', 'sample.png'); // Add attachments
// Optional name
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Test2';
$mail->Body = 'Test2 messagwe';
if (!$mail->send()) {;
return "Message not sent" . $mail->ErrorInfo;
} else {
return "email send";
}
}
}
上面的代码包含一个通过phpmailer存储和发送电子邮件的功能
有六个字段要存储在数据库中(在功能store()上),最后三个是单选按钮。
当我尝试运行代码时,由于未在全局中初始化代码,因此出现了Undefined index 'rh_first'
错误,但是我却在全局中执行了$insert = array();
。
请建议我一种更好的方法,将数组变量的键访问到同一类的另一个函数中。
答案 0 :(得分:2)
此函数需要设置 $this->insert
的值:
public function store()
{
$db = new Config();
$insert = array(
'date' => mysqli_real_escape_string($db->connection, $_POST['Date']) ,
'Tov' => mysqli_real_escape_string($db->connection, $_POST['Tov']) ,
'Name' => mysqli_real_escape_string($db->connection, $_POST['Name']) ,
'rh_first' => mysqli_real_escape_string($db->connection, $_POST['rh_first']) ,
'se_second' => mysqli_real_escape_string($db->connection, $_POST['se_second']) ,
'pk_third' => mysqli_real_escape_string($db->connection, $_POST['pk_third'])
);
$this->insert = $insert;
return $insert;
}
是否注意到新行:$this->insert = $insert;
?
这会将您的类的属性设置为$insert
数组的值。
此外,我离开了它返回$insert
的值这一事实,因为我不知道其余代码的样子,但是,我认为该函数只能返回void ... < / p>
答案 1 :(得分:0)
您尚未定义全局变量,而是类变量。而且,如果要在类中访问它,则必须使用$this->insert
而不是$insert
,因为第二个将是函数作用域变量。
无论如何,请尝试重新编写您的代码。从我的角度来看,这些插入的值最好放在函数参数中。
最后,您应该将自动加载器放在最外层,紧接use
语句之后。
答案 2 :(得分:0)
您可以使用$this->insert
访问该数组,因为它是全局声明的。
要获取键和值,请使用:
foreach ($this->insert as $key => value) {
echo $value; // prints the values of insert
echo $key; // prints the keys of insert
}