【问题标题】:Inserting values into database with php, ajax and jQuery使用 php、ajax 和 jQuery 将值插入数据库
【发布时间】:2011-10-19 12:39:21
【问题描述】:

我正在努力让它发挥作用,我不知道我做错了什么。我有一个注册页面,我想将数据插入表单并使用 jQuery 和 AJAX 将其插入到数据库中。我对 AJAX 和 jQuery 不是很有经验,所以要温柔! :P 我会向你展示我拥有的文件...

sign_up.php

    <?php
    include 'connect.php';
    include 'header.php';

    echo '<h2>Register</h2>';

    if($_SERVER['REQUEST_METHOD'] != 'POST')
    {
        echo '<br/>';
        echo '
        <div class="container">  
        <form id="submit" method="post" action="">  
        <fieldset>  
        <legend> Enter Information </legend>  
        <br/>
        <label for="user_name">Your username: </label>
        <br/>
        <input id="user_name" class="text" name="user_name" size="20" type="text">
        <br/>
        <br/>
        <label for="user_pass">Your password: </label>
        <br/>
        <input id="user_pass" class="text" name="user_pass" size="20" type="password">  
        <br/>
        <br/>
        <label for="user_pass_check">Confirm password: </label>
        <br/>
        <input id="user_pass_check" class="text" name="user_pass_check" size="20" type="password">
        <br/>
        <br/>
        <label for="user_email">Email: </label>
        <br/>
        <input id="user_email" class="text" name="user_email" size="20" type="email">
        <br/>
        <br/>
        <button class="button positive" type="submit"> <img src="like.png" alt=""> Register </button>  
        </fieldset>  
        </form>  
        <div class="success" style="display: none;"> You are now a registered user!</div>  
        </div>';
    }
    else {
        $errors = array();
        //Checks the errors
        if(isset($_POST['user_name']) == NULL)
        {
                //if the user name is larger than 30 characters
                $errors[] = 'Please enter your username.';
        }   

        //Checks the password
        if(isset($_POST['user_pass']) == NULL)
        {
                $errors[] = 'Please enter your password.';
        }
        else
        {
                if($_POST['user_pass'] != $_POST['user_pass_check'])
                {
                    $errors[] = 'The two passwords did not match.';
                }
        }

        if(!empty($errors)) //Checks for empty fields
        {
                echo 'Please check that all the fields are filled in.<br /><br />';
                echo '<ul>';
                foreach($errors as $key => $value) //walk through the array so all the errors get displayed
                {
                        echo '<li>' . $value . '</li>'; //this generates a list with errors
                }
                echo '</ul>';
        }
 }
?>

在我的 header.php(我包含在每个页面中)中,我包含了 addMembers.js

    $(document).ready(function(){  
        $("form#submit").submit(function() {

        // we want to store the values from the form input box, then send via ajax below  
        var user_name = $('#user_name').val();  
        var user_email = $('#user_email').val();
        var user_pass= $('#user_pass').val();

        //$user_name = $('#user_name').val();
        //$user_email = $('#user_email').val();
        //$password = $('#password').val();

        alert(user_name);

            $.ajax({  
                type: "POST",  
                url: "ajax.php",  
                data: "user_name="+ user_name +"&user_email="+ user_email +"$user_pass=" + user_pass,  
                success: function(){  
                    $('form#submit').hide(function(){$('div.success').fadeIn();});  
                }  
            });

            //alert("ji");

        return false;  
        });  
});  

然后我的 ajax.php 获取数据并必须将其插入数据库,但它没有! :(

<?php
        include 'connect.php';
        include 'header.php';

        // CLIENT INFORMATION  
        $user_name  = $_POST['user_name'];  
        $user_email   = $_POST['user_email'];  
        $user_pass   = $_POST['user_pass'];  

        mysql_query("INSERT INTO
                      users(`user_name`, `user_pass`, `user_email` , `user_date` , `user_level`)
                VALUES('$user_name', '$user_pass', '$user_email', NOW() , 0)" OR trigger_error(mysql_error())); 
?>

请帮助...

非常感谢!

【问题讨论】:

  • 什么不起作用?此外,使用$('#user_name').val(); 获取字段值。你的插入在哪里?
  • 数据:"user_name="+ user_name +"&user_email="+ user_email +"& password=" + 密码,& user_email 前的签名缺失
  • 旁注:if(!ctype_alnum($_POST['user_name'])){$errors[] = 'That user name is allready taken.';} 具有误导性,你肯定不是那个意思
  • 我已经更新了帖子/问题。请再看一遍!抱歉第一次上传...谢谢!!! :)

标签: php jquery sql ajax


【解决方案1】:

这里有些地方不对:

html:

给你的按钮一个 type="submit":

<button type="submit" class="...>...</button>

jQuery

不要使用 attr() 来获取表单值,而是使用 val()。另外,请注意您是如何构建查询字符串的。您可能还想使用 serialize(),它会稍微缩短您的代码:

$("form#submit").submit(function() {

    var dataString = $(this).serialize();

        $.ajax({  
            type: "POST",  
            url: "ajax.php",  
            data: dataString,
            success: function(){  
                $(this).hide();
                $('div.success').fadeIn();  
            }  
        });  
    return false;  
    });  

PHP

没有显示您的 ajax.php,它在做什么? 如果你调用 ajax,为什么还要检查 sign_up.php?

还有,这段代码:

if(!ctype_alnum($_POST['user_name']))
{
  $errors[] = 'That user name is allready taken.';
}

具有误导性,ctype_alnum() 确实检查用户名是否只有字母字符或数字,用户名已经被占用是什么意思?

Mysql:

你必须提供你的 INSERT 查询,所以没有人知道这是否也失败了

更新:

您的查询的列多于值。 另外,htmlspecialchars() 对这里有什么好处?为避免 SQL 注入,您需要使用 mysql_real_escape_string()。进入数据库前转义html是没用的

在调用 mysql_real_escape_string() 时确保你有一个打开的连接。

应该是:

mysql_query("INSERT INTO users 
             (`user_name`,`user_pass`,`user_email`,`user_date`,`user_level`)
             VALUES ('$user_name','$password','$user_email','missingvalue','missingvalue')"
            ) OR trigger_error(mysql_error());

【讨论】:

  • 哇好!谢谢您的帮助!我已经上传了 ajax.php,这样你就可以看到我在做什么。到目前为止,我已经尽可能地编辑了文件!请再看看...
  • 那么我必须如何处理 $user_name = htmlspecialchars(trim($_POST['user_name'])); ?
  • @Joemeister 更新了我的答案。没什么,如果你想在输出上使用那个函数,不要在进入数据库之前使用它
【解决方案2】:
$.ajax({  
    type: "POST",  
    url: "ajax.php",  
    data: "user_name="+ user_name + "&user_email=" + user_email + "&password=" + password,
    success: function(){  
        $('form#submit').hide(function(){$('div.success').fadeIn();});  
    }  
});

【讨论】:

    【解决方案3】:

    显示 ajax.php,除了早期的 cmets,例如:' $('#user_name').val();','ampersant before user_email'... 似乎还可以...

    【讨论】:

      猜你喜欢
      • 2018-07-26
      • 2012-06-28
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      • 2021-09-21
      相关资源
      最近更新 更多