0

我已经在 PHP 中完成了很多联系表单没问题,但是我对 oop 很陌生,我不能完全理解它应该如何工作。我正在与一位帮助我自学这一点的导师合作,基本上为我提供了学习 oop 的资源,但我一直坚持这一点。我要制作一个简单的联系表格,将用户信息发送到同一表格上指定的电子邮件。这些是我的要求:

用户类应该:

  • 包含相关提交的数据作为类的属性

  • 有一个构造方法,可以让你在一个语句中声明类并设置数据

电子邮件类应该:

  • 保持静止

  • 有一种方法可以让您在一个声明中发送电子邮件

  • 有一种方法可以用适当的等价物替换格式化标签([b] / [i] / [[name]])

  • 可以正确访问方法(私有/公共)

我现在不担心验证或语法转换,因为我只想弄清楚为什么电子邮件没有发送。

亚军.php:

<?php
class User  {

public $firstName;
public $lastName;
public $toEmail;
public $fromName;
public $fromEmail;
public $subject;
public $message;

public function post() {
if (isset($_POST['Submit'])) {
$mail = new email($_POST['firstName'], $_POST['lastName'], $_POST['toEmail'],     $_POST['fromName'], $_POST['fromEmail'], $_POST['subject'], $_POST['message']);
$mail->toEmail = $POST['$toEmail'];
$mail->sendMail();
    }
  }
}

class email {

private $fristName;
private $lastName;
private $toEmail;
private $fromName;
private $fromEmail;
private $subject;
private $message;

public static function __construct($firstName, $lastName, $toEmail, $fromName, $fromEmail, $subject, $message) {
    $this->firstName = $firstName;
    $this->lastName = $lastName;
    $this->toEmail = $toEmail;
    $this->fromName = $fromName;
    $this->fromEmail = $fromEmail;
    $this->subject = $subject;
    $this->firstName = $message;
}

 function sendMail($mail) {
    $contents = "To: $firstName&nbsp;$lastName<br />From: $fromName<br />Subject: $subject<br />Message: $message";
    $headers = "From:" . $fromEmail;
    $sendmail = mail($this->toEmail, $this->subject, $this->message, $this->contents, $headers);
    }
}
?>

表单.html:

<html>
<head>
</head>
<body>
<form action="runner.php" method="POST">
<b>To</b></br>
<label>First Name</label>
<input type="text" name="firstName" id="firstName"></br>
<label>Last Name</label>
<input type="text" name="lastName" id="lastName"></br>
<label>Email</label>
<input type="text" name="toEmail" id="toEmail"></br></br>
<b>From</b></br>
<label>Name</label>
<input type="text" name="fromName" id="fromName"></br>
<label>Email</label>
<input type="text" name="fromEmail" id="fromEmail"></br></br>
<b>Compose Email</b></br>
[b]<b>bold</b>[\b] and [i]<i>italic</i>[\i] tags permitted in email body</br>
<label>Subject</label>
<input type="text" name="subject" id="subject"></br>
<label>Body</label>
<textarea name="message" id="message"></textarea></br></br></br>
<input type="submit" value="Submit"></form>
</body>
</html>

我什至不知道我是否走在正确的轨道上。任何帮助/资源将不胜感激。

4

3 回答 3

0

我可能错了,但我认为这与你的$contents变量有关。你只在sendMail课堂上设置了它,但你使用了$this->contents. 尝试设置private $contents;为实例变量,或仅$contents在此行上使用:

$sendmail = mail($this->toEmail, $this->subject, $this->message, $this->contents, $headers);

(应该:)

$sendmail = mail($this->toEmail, $this->subject, $this->message, $contents, $headers);
于 2013-07-17T17:21:05.167 回答
0

如果您在本地工作,php 邮件功能将不起作用。

尝试使用 phpmailer 库(smtp)或尝试将脚本上传到启用邮件服务器的主机。

于 2013-07-17T17:25:59.807 回答
0
<?php
class User  {

public $firstName;
public $lastName;
public $toEmail;
public $fromName;
public $fromEmail;
public $subject;
public $message;

public function post() {
if (isset($_POST['Submit'])) {
$mail = new email($_POST['firstName'], $_POST['lastName'], $_POST['toEmail'],     $_POST['fromName'], $_POST['fromEmail'], $_POST['subject'], $_POST['message']);
$mail->toEmail = $POST['$toEmail'];

toEmail是私有财产。如果您希望能够像这样设置它,那么它应该被声明为公共的。此外,您发布的 HTML 表单中没有$toEmail字段,因此您可能想在toEmail这里写。

此外,您已经在构造函数中设置了这个值。

$mail->sendMail();
    }
  }
}

class email {

类应该以大写字母开头是一般惯例,但这主要是样式问题。

private $fristName;
private $lastName;
private $toEmail;
private $fromName;
private $fromEmail;
private $subject;
private $message;

public static function __construct($firstName, $lastName, $toEmail, $fromName, $fromEmail, $subject, $message) {

您不能拥有静态构造函数...您应该将其设为普通构造函数,或者,如果您希望该类仅包含静态属性,则将其完全删除。如果你希望属性是静态的,你应该在上面的代码中定义它们。

此外,如果这必须是只包含静态属性的类,那么您可能不想实例化它。

    $this->firstName = $firstName;
    $this->lastName = $lastName;
    $this->toEmail = $toEmail;
    $this->fromName = $fromName;
    $this->fromEmail = $fromEmail;
    $this->subject = $subject;
    $this->firstName = $message;
}

 function sendMail($mail) {
    $contents = "To: $firstName&nbsp;$lastName<br />From: $fromName<br />Subject: $subject<br />Message: $message";
    $headers = "From:" . $fromEmail;

$firstName, $lastName, ..., 在这里不可用,您可能的意思是使用$this->firstName, ... 等。

    $sendmail = mail($this->toEmail, $this->subject, $this->message, $this->contents, $headers);

mail()托管服务提供商可能会禁用该功能。如果发生这种情况,您应该会看到一条错误消息。

    }
}
?>

您没有实例化任何这些类。您可能想要执行以下操作:

$user = new User();
$user->post();
于 2013-07-17T17:30:52.780 回答