使用php,ajax和jQuery将值插入数据库

时间:2011-10-19 12:39:21

标签: php jquery sql ajax

我很难努力让这个工作,我不知道我做错了什么。我有一个注册页面,我想将数据插入到表单中,并使用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())); 
?>

请帮助......

非常感谢!

3 个答案:

答案 0 :(得分:3)

这里有一些不太合适的东西:

<强> 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的:

你dint'提供你的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());

答案 1 :(得分:1)

$.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();});  
    }  
});

答案 2 :(得分:0)

显示ajax.php,除了早期的评论,例如:'$('#user_name')。val();','ampersant在user_email'之前......似乎没问题......