我在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脚本有效,并且邮件已发送,但这不会保存。
答案 0 :(得分:2)
使用反引号(`)引用列名电子邮件。 MySQL目前正在分两部分解释这一点。
另请注意,(根据我的评论)您的代码对SQL injection攻击持开放态度。使用正确的参数化SQL查询要好得多。
SQL注入示例:
"INSERT INTO table (field) VALUE ('$_POST[var]')"
如果您发布值"'; DROP TABLE table; --"
,那么您有一个插入空字符串的有效SQL字符串,然后尝试删除该表。替换你想要的任何有害言论。
答案 1 :(得分:1)
并且您还应该使用mysql_real_escape_string()或预处理语句。如果您的查询数据有任何特殊字符,它可以打破您的查询,它也可以帮助您从SQL注入。
http://php.net/mysql_real_escape_string http://php.net/pdo
答案 2 :(得分: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字段必须使用反引号进行转义(`
)
答案 3 :(得分: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);