电子邮件未从表单插入到mysql数据库中

时间:2010-02-23 22:11:07

标签: php jquery mysql

我有一个我的网站的简报,我不能将电子邮件发布到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个小时里一直在努力让它变得有效,我只是无法弄清楚加上我再也看不到它了。我的眼睛现在受伤了。大声笑再次感谢。

4 个答案:

答案 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 !');

            });