Kayıt Formu için PHP, AJAX

4 Cevap php

Ben benimle çıplak tüm bu yeni duyuyorum. Benim ilk PHP sitesi kurmak için çalışıyorum ve gerçekten bunu doğru şekilde yapmak istiyorum. Ben bulunduğu form üzerinde çalışıyorum: http://www.bwgblog.com/signup.

Ben aşağıdaki formu kurdunuz:

    		<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>

Ve burada benim PHP sayfası, register.php olduğunu:

    <?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);
?>

Ben bana iki şey verir, öyle ki AJAX eklemek için nasıl anlamaya çalışıyorum. 1) bu alanı olarak gerçek zamanlı kullanıcı adı alanını kontrol etmek için yeteneği benzersiz olmalıdır, ve 2) yeteneği, parola alanını == eğer onaylama şifre alan yeşil bir onay işareti işlemek zorunda.

Bunu yapmak için nasıl bütün gün seyir olmuştur ve ona net bir görünüm elde edemez. İşte dosyalar ortaya koydu nasıl:

signup (folder) -> index.php -> register.html.php -> register.php

4 Cevap

Javascript çerçeve seçim dışındaki tüm hesapları PeterJCLaw ile anlaştılar. İşte jQuery ile bunu nasıl olduğunu:

// 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!);
    }
});

1) AJAX backend özel bir şey olması gerekmez - öylesine basit çözüm geçti adı için DB sorgulayan bir 'usercheck.php' dosya var olabilir, o zaman doğru / yanlış çeşit döner. Muhtemelen (- json_encode bakınız Eğer PHP 5 varsa bu kolaydır) JSON kullanarak cevap isteyeceksiniz.

Birkaç var olan mevcut bir çerçeveyle (I MochiKit ve prototip kullandım, hem de gayet iyi görünüyor) kullanırsanız AJAX önyüz konusunda bunu kolay bulacaksınız. Bu kolayca sunucunun yanıtını yüklemek için izin vermelidir.

Eğer AJAX kullanımı (bu basit) yerine POST GET daha varsa o zaman sadece uygun bir sorgu dizesi ile sayfayı görüntüleyerek cevabı test edebilirsiniz. Her durumda Firebug gerçek zamanlı olarak çağrıları görüntülemek sağlayacak kullanarak.

2) şifre AJAX kontrol etmesi gerek yoktur - sadece düz JavaScript kullanılarak yapılabilir:. Basitçe iki girişlerin değeri özelliklerini karşılaştırın.

JQuery 'validate uzantısı bakmaktır.

Bu tüm basitleştirecek. Uzaktan kontrol edilmesi çok basittir.

A relatively recent post on this with example code.

Eğer sunucuya jQuery yükleyebilir, ya da google kod onlara ev sahipliği yapıyor. Google sürümünü kullanarak büyük ölçüde müşteri zaten de indirilmiş olacak ve önbelleğe alınan kopyasını kullanın şansını artırır.

$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 yapmak için daha iyi bir yolu ... Kullanım tablolarını ve değişkenleri hazırlamak için döngüler.