保存到数据库后的电子邮件

时间:2011-11-24 07:02:08

标签: php

嗨我有一个带下拉框和文本框的fom,下拉框中有用户名和电子邮件作为其值。我有代码保存到数据库和代码发送电子邮件,但现在当它保存到数据库时,用户名不仅仅存储在文本框中的文本,请让我知道我做错了我希望它先保存然后发送出去给用户的电子邮件。

     $con = mysql_connect("host","user","password");
     if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }

      mysql_select_db("database", $con);

  $sql="INSERT INTO table(`feild1`, `feild2`)
    VALUES
    ('$_POST[User]','$_POST[QueryDes]')";
     if (!mysql_query($sql,$con))
       {
       die('Error: '. mysql_error());
       }
       echo "1 record added";

上面的代码是插入。

     if (isset($_POST['dropdown']))
     {
       //send email
       $email = $_POST['dropdown'] ;
       $subject = "You have submitted your query  ";
        $message = "Thank you for using the online query facility. We will attend to your query as soon as possible."; 


        $from = "me@mail.com";
      $headers = "From:" .$from;
     mail($email, $subject,$message, $headers);

以上代码就是发送电子邮件。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0           Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">

   <head>
   <meta content="en-za" http-equiv="Content-Language" />
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
  <title>Query</title>
  </head>

  <body>

     <form action="log2.php" method="post">
UserName&nbsp; <select name="User" style="width: 156px">
<option value="">--SELECT--</option>
<option value="myself@mymail.com">Me</option>
      Query Description&nbsp;<input name="QueryDes" style="width: 196px" type="text" />&nbsp;
      &nbsp;<input name="Submit1" type="submit" value="Log Call" style="width: 78px" />
      </form>

      </body>

   </html>

这是表单的html

2 个答案:

答案 0 :(得分:1)

重要您永远不应该做的事情是将值直接插入数据库。在您的代码中,请勿直接使用$_POST。为什么?有许多原因,例如SQL Injection Attack,数据不一致等。使用类似mysql_real_escape_string的函数或其他可用函数(另一个讨论主题)

要回答您的问题,您需要在服务器中存在一个活动数据库(最好是MySQL我的收藏:P)。您可以在向用户发送详细信息之前按照tutorial herehere插入值。只是谷歌吧。

  

打开与MySQL的连接

     

指定我们要打开的数据库

     

设置可用于向数据库添加记录的SQL语句   表

     

再次使用mysql_query(),但这次要向表中添加记录

     

关闭连接

答案 1 :(得分:1)

所以,首先,正确(请参阅数组索引中的引号)并转义(如@footy已经告诉过您)您的查询 [插入更好地使用预处理语句“这里的短语]: < / p>

$user = mysql_real_escape_string($_POST['User']);
$request = mysql_real_escape_string($_POST['QueryDes']);
$sql="INSERT INTO table(`feild1`, `feild2`) VALUES ('$user','$request')";

然后,您没有任何$_POST['drowpdown'],因此您的isset()永远不会评估为TRUE。如果您打算引用下拉html输入字段,那么您就错误了。你没有像$_POST['input']那样拨打文字输入,不是吗?

另外,既然你给它一个空值(你可能不希望在你的邮件中使用它),你可以做类似的事情

    if($_POST['User'] != '')
    {
       $email = $_POST['User']
       // You should also check if the mail is valid. Try using the filter_var() provided by
       // PHP, or some fancy regex you find everywhere

       $subject = "You have submitted your query  ";
       $message = "Thank you for using the online query facility. We will attend to your query as soon as possible.";
       $from = "me@mail.com";
       $headers = "From:" .$from;

       if(filter_var($email, FILTER_VALIDATE_EMAIL))
       {

          // better option is querying your database here, since you're going to insert an empty value for the mail, otherwise.

          if(mail($email, $subject,$message, $headers))
          {
            echo 'Mail sent!';
          }
          else
          {
            echo 'Error in sending your mail!';
          }
       }
       else
       {
          echo 'Invalid email';
       }
}

第二个想法,在数据库中插入$ _POST ['User']字段的非空值,因此您应该在运行查询之前进行检查。