我对这一切都很陌生。我正在尝试建立我的第一个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
答案 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 ...使用预准备的语句和循环来准备变量。