0

我的 wordpress 网站上有联系表格,由 ajax 提供,并发送到我的邮箱。我还想将结果保存在数据库中,所以我编写了这个查询,但它给了我和语法错误,但我在这段代码中找不到任何错误:

<?php 
$con = mysql_connect("localhost","username","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("u31272B3", $con);

$sql="INSERT INTO wp_contactform (Nimi, Puhelin, E-mail, Viesti, IP, Day)
VALUES
('$_POST[Nimi]','$_POST[Puhelin]','$_POST[Sposti]','$_POST[Tiedot]','$_POST[Gotcha]','$_POST[Day]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con);

?>

发送它的 jquery 脚本有效,并且发送了邮件,但这并没有保存。

4

4 回答 4

2

用反引号 (`) 引用列名 E-mail。MySQL 目前将其解释为两部分。

另请注意,(根据我的评论)您的代码很容易受到SQL 注入攻击。使用正确参数化的 SQL 查询要好得多。


SQL注入示例:

"INSERT INTO table (field) VALUE ('$_POST[var]')"

如果您发布该值"'; DROP TABLE table; --",那么您有一个有效的 SQL 字符串,该字符串插入一个空字符串,然后尝试删除该表。替换你想要的任何有害的陈述。

于 2012-07-19T14:39:36.857 回答
1

你也应该使用 mysql_real_escape_string() 或准备好的语句。如果您的查询数据有任何特殊字符,它可能会破坏您的查询,它也可以帮助您进行 sql 注入。

http://php.net/mysql_real_escape_string http://php.net/pdo

于 2012-07-19T14:45:24.907 回答
0

您的 SQL 请求应编写如下:

$sql = "INSERT INTO wp_contactform (`Nimi`, `Puhelin`, `E-mail`, `Viesti`, `IP`, `Day`)
        VALUES
        ('$_POST[Nimi]','$_POST[Puhelin]','$_POST[Sposti]','$_POST[Tiedot]','$_POST[Gotcha]','$_POST[Day]')"

使用非字母数字字符的 SQL 字段必须使用反引号 ( `)进行转义

于 2012-07-19T14:43:57.117 回答
0

这应该工作

<?php
$con = mysql_connect("localhost", "username", "password");
if(!$con){
    die('Could not connect: '.mysql_error());
}

mysql_select_db("u31272B3", $con);

$sql = "INSERT INTO wp_contactform (`Nimi`, `Puhelin`, `E-mail`, `Viesti`, `IP`, `Day`)
VALUES
('".mysql_real_escape_string($_POST['Nimi'])."','".
   mysql_real_escape_string($_POST['Puhelin'])."','".
   mysql_real_escape_string($_POST['Sposti'])."','".
   mysql_real_escape_string($_POST['Tiedot'])."','".
   mysql_real_escape_string($_POST['Gotcha'])."','".
   mysql_real_escape_string($_POST['Day'])."')";

if(!mysql_query($sql, $con)){
    die('Error: '.mysql_error());
}
echo "1 record added";

mysql_close($con);
于 2012-07-19T14:47:40.427 回答