我有一个我的网站的简报,我不能将电子邮件发布到mysql数据库。
这是html表单代码: 订阅
<h2>newsletter</h2>
<br /><input type="text" name="email" value="" id="email" />
<input type="button" name="submit" onclick="submit_it()" value="OK" />
<script type="text/javascript" charset="utf-8">
function submit_it() {
var cate_value = $('#cate').val();
var email_value = $('#email').val();
$.post("subscribe.php", { email: email_value , cate: category_value }, function(response) {
if (response!='') {alert(response)};
alert('ok');
});
}
</script>
</body>
这是php处理代码:
$host = "localhost";
$user = "some_user";
$password = "some_pass";
$database = "news";
$server = mysql_connect($host, $user, $password);
$connection = mysql_select_db($database, $server);
function sql_quote($value) {
$value = str_replace('<?','',$value);
$value = str_replace('script','',$value);
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
} else {
if ((string)$value[0] == '0') {
$value = "'" . mysql_real_escape_string($value) . "'";
}}
return $value;
}
$q = "INSERT INTO emails (email,cate) VALUES (".sql_quote($_POST['email']).",".$_POST['cate'].")";
mysql_query($q);
&GT;
任何帮助都会非常感激,因为我在过去的5个小时里一直在努力让它变得有效,我只是无法弄清楚加上我再也看不到它了。我的眼睛现在受伤了。大声笑再次感谢。
答案 0 :(得分:1)
您的PHP sql_quote
函数非常天真,它的str_replace()过滤。绕过它并在数据库中插入不需要的数据是微不足道的。
我建议您重新编写代码:
<?php
$host = "localhost";
$user = "some_user";
$password = "some_pass";
$database = "newsletter";
$server = mysql_connect($host, $user, $password);
$connection = mysql_select_db($database, $server);
function sql_quote($value)
{
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
return mysql_real_escape_string($value);
}
$email = $_POST['email'];
$category = $_POST['category'];
if (filter_var($email, FILTER_VALIDATE_EMAIL)
&& FALSE !== filter_var($category, FILTER_VALIDATE_INT)
) {
$q = sprintf("INSERT INTO emails (email, category) VALUES ('%s', '%s')",
sql_quote($email),
sql_quote($category)
);
// execute query
} else {
// Do what you want with invalid data
}
我还建议进行以下更改:
修改强>
为什么您甚至使用AJAX来处理此表单提交?我认为没有任何好处。你没有做任何特别的事情,只需提交一份表格。
我建议完全删除AJAX并按照预期使用提交按钮。
如果你坚持,你至少可以暂时删除它以简化你的测试。
答案 1 :(得分:1)
你应该像hobodave建议的那样重写你的代码。不过,我认为您的数据库配置有问题。在此期间尝试这样做,以执行您的查询:
$result = mysql_query($q);
if( $result ){
echo( 'OK' );
} else {
echo( 'Invalid query: ' . mysql_error() );
}
答案 2 :(得分:0)
您的查询中存在语法错误,请尝试此
$email = sql_quote($_POST['email']);
$category = $_POST['category'];
$q = "INSERT INTO emails (email,category) VALUES ('$email','$category')";
答案 3 :(得分:-1)
您必须使用data
作为数据的密钥。
$.ajax(url: "ajax_subscribe.php",
method : 'POST',
data: { email: email_value , category: category_value },
success: function(response) {
if (response!='') {alert(response)};
alert('Thank You !');
});