0

私はPHPでかなりの数の連絡フォームを問題なく作成しましたが、私はoopに非常に慣れていないため、これがどのように機能するかについて頭を悩ませることはできません. 私はこれを独学で教えてくれる家庭教師と一緒に働いています。同じフォームで指定された電子メールにユーザー情報を送信する簡単な連絡先フォームを作成することでした。これらは私の要件でした:

User クラスは次のようにする必要があります。

  • 関連する送信データをクラスのプロパティとして含める

  • クラスを宣言し、1 つのステートメントでデータを設定できるコンストラクター メソッドを用意する

Email クラスは次のことを行う必要があります。

  • 静的であること

  • 1 つのステートメントでメールを送信できるメソッドを用意する

  • 書式タグ ([b] / [i] / [[name]]) を適切な同等のものに置き換えるメソッドを用意する

  • メソッドへの適切なアクセス権がある (プライベート / パブリック)

メールが送信されない理由を調べたいだけなので、検証や構文変換については今のところ心配していません。

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

フォーム.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
<?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私有財産です。このように設定できるようにしたい場合は、パブリックとして宣言する必要があります。また、$toEmail投稿されたHTMLフォームにはフィールドがありませんので、おそらくここに書きたいと思い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 に答える
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 に答える