16.3 通过电子邮件发送表单数据

如果不想为服务器端脚本操心,并且能够处理未经格式化(或未经脚本预处理)的数据,可以选择通过电子邮件发送访问者的数据,如图16.3.1~图16.3.4所示。

  1. ...
  2. <body>
  3.  
  4. <?php
  5. //这是一个非常简单的PHP脚本……
  6. if (empty($_POST)) {
  7. print "<p>No data was submitted.</
  8. p>";
  9. print "</body></html>";
  10. exit();
  11. }
  12.  
  13. function clear_user_input($value) {
  14. if (get_magic_quotes_gpc()) $value=stripslashes($value);
  15. $value= str_replace( "\n", '', trim($value));
  16. $value= str_replace( "\r", '', $value);
  17. return $value;
  18. }
  19.  
  20. $body ="Here is the data that was submitted:\n";
  21.  
  22. foreach ($_POST as $key => $value) {
  23. $key = clear_user_input($key);
  24. $value = clear_user_input($value);
  25. if ($key=='extras') {
  26.  
  27. if (is_array($_POST['extras']) ){
  28. $body .= "$key: ";
  29. $counter =1;
  30. foreach ($_POST['extras'] as $value) {
  31. //除了最后一个元素,都应该添加逗号
  32. 和空格
  33. if (sizeof($_POST['extras']) == $counter) {
  34. $body .= "$value\n";
  35. break;}
  36. else {
  37. $body .= "$value, ";
  38. $counter += 1;
  39. }
  40. }
  41. } else {
  42. $body .= "$key: $value\n";
  43. }
  44. } else {
  45.  
  46. $body .= "$key: $value\n";
  47. }
  48. }
  49.  
  50. extract($_POST);
  51. $email = clear_user_input($email);
  52. $first_name = clear_user_input ($first_name);
  53.  
  54. $from='From: '. $email . "(" . $first_name . ")" . "\r\n" . 'Bcc: yourmail@yourdomain.com' . "\r\n";
  55.  
  56. $subject = 'New Profile from Web Site';
  57.  
  58. mail ('yourmail@yourdomain.com',
  59. $subject, $body, $from);
  60. ?>
  61.  
  62. <p>Thanks for your signing up!</p>
  63. </table>
  64. </body>
  65. </html>

图16.3.1 这是用于通过电子邮件发送数据的脚本。可以在本书的配套网站找到这段脚本的带注释版本

16.3 通过电子邮件发送表单数据 - 图1

图16.3.2 除了对action字段进行了更新,这个表单与图16.1.3是一样的

16.3 通过电子邮件发送表单数据 - 图2

图16.3.3 让访问者知道刚刚发生了什么总是一个好主意

16.3 通过电子邮件发送表单数据 - 图3

图16.3.4 这是表单提交后收到的电子邮件

通过电子邮件发送数据的步骤

  • 输入

  • 输入action="emailform.php",这里的emailform.php是将数据发送到电子邮件地址的脚本。

  • 输入>

  • 根据从16.5节开始讲解的知识,创建表单的内容。

  • 输入

提示 可以要求访问者输入两遍电子邮件地址,然后让脚本对这两个字段进行比较,如果不一致就返回错误。这种验证可以防止输入错误,这些错误会导致收不到表单数据。

 

提示 可以在本书的配套网站找到脚本代码(www.bruceontheloose.com/htmlcss/exam-ples/)。你可以在自己的网站上使用该脚本。

 

提示 如果这段脚本在你的服务器上不起作用,这可能是因为你的服务器没有安装PHP。请联系你的Web主机提供商并请求帮助(或查看他们的支持页面)。