2011-07-05 3 views
1

こんにちは私はPHP webformを使ってHTMLメールを送信しようとしています。フォームはうまく動作し、$ name、$ addressなどの変数をメッセージに渡してもOKですが、HTMLを使用してフォーマットしようとすると、その変数をメッセージに渡すことができません。これは私がW3Schoolsの上で見つかりましたが、私は私がやりたいことを調整することができないようサンプルコードです:私は何をしようとしているhtmlメールでphp変数を入力するには

<?php 
.... 
$to = "[email protected], [email protected]"; 
$subject = "HTML email"; 

$message = " 
<html> 
<head> 
<title>HTML email</title> 
</head> 
<body> 
<p>This email contains HTML Tags!</p> 
<table> 
<tr> 
<th>Firstname</th> 
<th>Lastname</th> 
</tr> 
<tr> 
<td>John</td> 
<td>Doe</td> 
</tr> 
</table> 
</body> 
</html> 
"; 
.... 
?> 

は、それが「ジョン・ドウと言う変数$名を渡しています"私は一度私は他のすべての変数を渡すことができるはずだと思うと思います。

ご協力いただきありがとうございます。

+0

変数を渡すことができないということを説明できますか? '​​'タグの間に$ nameを置くと、何が送られますか? – EdoDodo

+0

フォームから収集したデータを墨塗りしていることを確認してください。そうしなければ、可能なコードインジェクション攻撃まで自分自身を開いています。 –

+0

あなたの電子メールは非常に悪い形で形成されています - HTML部分はデリミタとともにMIMEタイプ、配置、エンコーディングを持たなければなりません。一部のMUAは引き続きレンダリングしますが、phpmailerのようなものを適切に保持することをお勧めします。 – symcbean

答えて

0

$message = " 
<html> 
... 
<tr> 
<td>$name</td> 
</tr> 
... 
</html> 
"; 

あなたはまた、STから抜け出すことができ

例:文字列内の変数を含めるにはring

$message = " 
<html> 
... 
<tr> 
<td>".$name."</td> 
</tr> 
... 
</html> 
"; 

シングルクォーテーションまたはダブルクォートで動作する(個人的には、この方法を一重引用符で囲むことをお勧めします)。

ただし、このメールを受け取った時点で、生のHTMLが表示されます。 htmlが適切に表示されるようにするには、適切なメールヘッダーを設定する必要があります。このhereを行う方法の例とhereあなたは、単にこのようにそれを行うことができます

+0

または単に引用符をエスケープする必要性を完全に取得するHEREDOCを使用します。文字列を閉じてどちらかを連結する理由はありません。シンタックスを強調表示している、まともにまともなエディタでは、内部変数が表示され、強調表示されます。 –

+0

heredocも仕事をします。一重引用符を使用して文字列を閉じることを好む理由は、PHPが自動的に変数などの二重引用符で囲まれた文字列を自動的に解析する方法が嫌いだからです。私が読んだベストプラクティスガイドは、特にパフォーマンス上の理由から必要とされない限り、PHPで二重引用符を使用することについてアドバイスしています(それほど大きな違いはないと思いません - 今のところこれに慣れています) – Addsy

+0

変数を使用していない場合は、NOWDOC(http://php.net/nowdoc)があります。これは、heredocの二重引用符と同じ一重引用符です。 –

1
$message = " 
    <html> 
<head> 
<title>HTML email</title> 
</head> 
<body> 
<p>This email contains HTML Tags!</p> 
<table> 
<tr> 
<th>Firstname</th> 
<th>Lastname</th> 
</tr> 
<tr> 
<td>".$firstname."</td> 
<td>".$lastname."</td> 
</tr> 
</table> 
</body> 
</html> 
"; 
+0

ありがとう、このメソッドは私のためにうまくいった – Fahad

0

名前を2つの重要な変数に分割する必要があります。 $first_nameおよび$second_name。これは、これを行うことによって可能です:

<?php 

$split_names = explode(' ', $name); // assuming you have a space between both 

$first_name = $split_names[0]; 
$last_name = $split_names[1]; 

?> 

次にあなたがこれを行うことができます:あなたは、二重引用符を使用している場合は、あなただけのことができるはず、メッセージにあなたの変数を取得するために

$message = " 
<html> 
<head> 
<title>HTML email</title> 
</head> 
<body> 
<p>This email contains HTML Tags!</p> 
<table> 
<tr> 
<th>Firstname</th> 
<th>Lastname</th> 
</tr> 
<tr> 
<td>" . $first_name . "</td> 
<td>" . $second_name . "</td> 
</tr> 
</table> 
</body> 
</html> 
"; 
.... 
?> 
0

あります

$message = " 
<html> 
... 
<tr> 
<td>".htmlspecialchars($name)."</td> 
</tr> 
... 
</html> 
"; 

それは非常にあなたによって制御されていないコンテンツを逃れるためにをインポートする(すなわちから収集ですフォーム)を使用して注入攻撃を防ぎます。この場合、htmlspecialcharsを使用します。

関連する問題