注册表格的PHP,AJAX

时间:2009-10-27 00:50:26

标签: php mysql ajax

我对这一切都很陌生。我正在尝试建立我的第一个PHP站点,我真的想以正确的方式做到这一点。我正在处理位于http://www.bwgblog.com/signup的表单。

我已设置以下表格:

            <p><form action="/signup/register.php" method="post">

                    <label for="first_name">First Name</label>
                    <input type="text" name="first_name" />

                    <label for="last_name">Last Name</label>
                    <input type="text" name="last_name" />

                    <label for="company">Company</label>
                    <input type="text" name="company" />

                    <label for="job_title">Job Title</label>
                    <input type="text" name="job_title" />

                    <label for="phone">Phone</label>
                    <input type="text" name="phone" />

                    <label for="email">Email</label>
                    <input type="text" name="email" />

                    <label for="username">Choose a Username</label>
                    <input type="text" name="username" />

                    <label for="password">Choose a Password</label>
                    <input type="text" name="password" />

                    <label for="confirm_password">Confirm Your Password</label>
                    <input type="text" name="confirm_password" />

                    <input type="submit" value="Get Started" />

                    </form>

这是我的PHP页面,register.php:

    <?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

$con = mysql_connect("localhost","*******","******"); //Replace with your actual MySQL DB Username and Password
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db("bwgblog", $con); //Replace with your MySQL DB Name
$first_name=mysql_real_escape_string($_POST['first_name']); 
$last_name=mysql_real_escape_string($_POST['last_name']); 
$company=mysql_real_escape_string($_POST['company']);
$job_title=mysql_real_escape_string($_POST['job_title']); 
$phone=mysql_real_escape_string($_POST['phone']);
$email=mysql_real_escape_string($_POST['email']); 
$username=mysql_real_escape_string($_POST['username']);
$password=mysql_real_escape_string($_POST['password']); 
$confirm_password=mysql_real_escape_string($_POST['confirm_password']);  

$sql="INSERT INTO members (first_name,last_name,company,job_title,phone,email,username,password,confirm_password) VALUES ('$first_name','$last_name','$company','$job_title','$phone','$email','$username','$password','$confirm_password')"; 

if (!mysql_query($sql,$con)) {
 die('Error: ' . mysql_error()); 
} 

echo "The form data was successfully added to your database."; 
mysql_close($con);
?>

我试图弄清楚如何添加AJAX这样它给了我两件事。 1)它能够实时检查用户名字段作为该字段应该是唯一的,以及2)如果确认密码字段是==密码字段,则能够呈现绿色复选标记。

我一直在寻找如何做到这一点,并且无法清楚地看到它。以下是文件的布局方式:

注册(文件夹) - &GT;的index.php - &GT; register.html.php - &GT; register.php

4 个答案:

答案 0 :(得分:2)

1)AJAX不要求后端有什么特别之处 - 所以最简单的解决方案可能是有一个'usercheck.php'文件,它向DB查询传递的用户名,然后返回某种形式的true / false 。您可能希望使用JSON进行回复(如果您使用PHP 5,这很容易 - 请参阅json_encode)。

关于AJAX前端,如果您使用现有框架(我使用Mochikit和原型,两者看起来都很好),您会发现它最简单,其中有几个。这应该允许您轻松加载服务器的响应。

如果你有AJAX使用GET而不是POST(这更简单),那么你可以通过查看具有相应查询字符串的页面来测试响应。在任何情况下,使用Firebug都可以实时查看来电。

2)无需密码检查AJAX - 只需使用纯JavaScript即可:只需比较两个输入的.value属性。

答案 1 :(得分:1)

除了javascript框架的选择外,所有帐户都同意PeterJCLaw。以下是使用jQuery的方法:

// give the form an ID to use a better selector: ie: $('#myform')
// intercept form submit

$('form').submit(function(){

    // check if passwords match; you might want to do more thorough validation
    if($('input[name=password]').val()==$('input[name=confirm_password]').val()){

         // make ajax post request and store the response in "response" variable
         $.post('/signup/register.php', $(this).serialize(), function(response){

             // process response here (assume JSON object has boolean property "ok"
             if(response.ok==true){
                 // sweet, it worked!
                 alert('OK!');
             }else{
                 // handle error
                 alert('Ooops');
             }
         }, 'json');

         // stop the form from being submitted
         return false;
    }else{
        // for the sake of simplicity
        alert('Passwords don't match!);
    }
});

答案 2 :(得分:0)

查看Jquery的validate扩展名。

它将简化所有这些。检查远程值也很简单。

A relatively recent post on this with example code.

您可以将Jquery上传到您的服务器,或谷歌代码托管它们。使用谷歌版本大大增加了客户已经下载它的机会,并且可以使用他们的缓存副本。

答案 3 :(得分:0)

$fields = array('first_name','last_name','company','job_title','phone','email','username','password','confirm_password');

$dbfields = array(); $dbdata = array(); $dbfieldq = array(); $types = ''; //Setting Variable    

foreach ($fields as $field){ //For Each Field
if (!isset($_POST[$field]){ header('Location: signup.php'); die('Please Fill in all fields, they are required'); } //Missing Field Error -- Doublecheck on serverside
array_push($dbdata, strip_tags($_POST[$field])); //Add Data - MySQLi Prepared Statements don't need to be escaped
array_push($dbfields,$field); //Add a field
array_push($dbfieldq,'?'); //Add a ?
$types += 's'; //Add a field type (string for all of these)
}

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); //Connect

if ($mysqli->connect_error) { //If there is a connect Error
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}
$names = explode($dbfields); //Explode the Field Names
$questions = explode($dbfieldq); //Explode the ?
$stmt = $mysqli->prepare("INSERT INTO DBName ($names) VALUES ($questions)"); 
$params = $this->paramValues;
array_unshift($dbdata, implode($this->paramTypes);
call_user_func_array( array( $stmt, 'bind_param' ), $params);
$stmt->bind_param($types, $code, $language, $official, $percent);
$stmt->execute();
$mysqli->close();

更好的方法来执行php ...使用预准备的语句和循环来准备变量。