【问题标题】:Email isn't inserted into mysql database from form电子邮件未从表单插入 mysql 数据库
【发布时间】:2010-02-23 22:11:06
【问题描述】:

我有一个网站的时事通讯,但我无法将电子邮件发布到 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);

?>

任何帮助将不胜感激,因为在过去的 5 小时里我一直在愚弄这个,试图让它工作,我只是想不通,而且我再也看不到它了。我现在眼睛疼。大声笑再次感谢。

【问题讨论】:

  • 请发布有关您收到的错误的更多详细信息。我们需要更详细的内容然后“表单不会将信息输入到 mysql 数据库”
  • 基本上,当您提交电子邮件时,您会收到“谢谢!”消息,但电子邮件实际上并没有插入到 mysql 数据库中。由于某种原因,它没有将其写入数据库。
  • 你可以打印出 $q 来查看它试图运行的查询,你也可以更新 mysql_query($q);到 mysql_query($q) 或 die(mysql_error());查看正在生成的错误(如果有)。

标签: php jquery mysql


【解决方案1】:

您绝对应该按照 hobodave 的建议重写您的代码。不过,我认为您的数据库配置有问题。同时试试这个,执行你的查询:

$result = mysql_query($q);
if( $result ){
    echo( 'OK' );
} else {
    echo( 'Invalid query: ' . mysql_error() );
}

【讨论】:

    【解决方案2】:

    你的 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,并按预期使用提交按钮。

    如果您坚持,您至少可以暂时删除它以简化您的测试。

    【讨论】:

    • 原因是因为我的一些后端是用 AJAX 编写的,所以我只是想我会在这里使用它。在我的后端,我使用 AJAX 提交电子邮件,它工作正常,但由于某种原因,我无法让它与 ajax_subscribe.php 脚本一起工作。我只是要删除 AJAX,直到我有时间修复它。再次感谢您的帮助。
    【解决方案3】:

    您的查询中有语法错误,试试这个

    $email = sql_quote($_POST['email']);
    $category = $_POST['category'];
    $q = "INSERT INTO emails (email,category) VALUES ('$email','$category')";
    

    【讨论】:

      【解决方案4】:

      您必须使用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 !');
      
                  });
      

      【讨论】:

      • -1:不正确。您正在描述 jQuery.ajax() not jQuery.post() 的使用
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 2014-06-21
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 2011-10-07
      相关资源
      最近更新 更多