2013-07-17 23 views
0

我已经在PHP中完成了很多联系表单没有问题,但是我对oop非常陌生,并且我无法完全理解这应该如何工作。我正在和一个正在帮助我自学的导师一起工作,基本上给了我资源来学习oop,但是我一直在坚持这一点。我将制作一个简单的联系表单,将用户信息发送到同一表单上指定的电子邮件。这些是我的要求:面向对象的PHP电子邮件联系表格不发送

用户类应:

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

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

的电子邮件类应该:

  • 是静态

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

  • 有一个方法,它将取代格式化标签([B]/[I]/[名称]])用适当的相当于

  • 不得不方法适当的访问(私人/公共)

我不W¯¯因为我只是想解释为什么电子邮件没有发送,所以现在就关于验证或语法转换。

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

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

我甚至不知道我是不是在正确的轨道与此有关。任何帮助/资源将不胜感激。

+0

您是否收到任何错误? – j08691

+0

你有'$ fristName'拼错了。 – romo

+0

好吧,你永远不会调用'post()'或'sendMail()'...另外,你定义了2个类,但是从来没有实例化它们中的任何一个。所以没有事情发生。如果你想使用你定义的类,你需要先创建它们的实例,然后调用你创建的实例的方法。然后你会看到一些非常明显的自我解释错误,它们应该表明代码有什么问题。 – rid

回答

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); 
+0

我会试试这个谢谢。 – mel

0

,如果你是在本地工作,PHP的邮件功能将无法正常工作。

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

+0

虽然可以在本地工作并设置邮件服务器。 – andrewsi

+0

我不是在当地工作。 – mel

+0

是的,你可以用本地的smtp设置。尝试使用支持html的phpmailer库。 –

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(); 
+0

感谢您的详细信息 - 将返回并在此工作,再次感谢 – mel

相关问题