PHP, AJAX для формы регистрации - PullRequest
0 голосов
/ 27 октября 2009

Я новичок во всем этом, так со мной. Я пытаюсь настроить свой первый сайт 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) возможность иметь поле подтверждения пароля, отображающее зеленую галочку, если оно == поле пароля.

Я весь день искал, как это сделать, и не могу ясно это понять. Вот как выложены файлы:

регистрация (папка) -> index.php -> register.html.php -> register.php

Ответы [ 4 ]

2 голосов
/ 27 октября 2009

1) AJAX не требует, чтобы бэкэнд был чем-то особенным - поэтому простейшим решением может быть наличие файла 'usercheck.php', который запрашивает в БД переданное имя пользователя, а затем возвращает некоторую форму true / false , Вы, вероятно, захотите ответить, используя JSON (это легко, если у вас PHP 5 - см. Json_encode).

Что касается внешнего интерфейса AJAX, вам будет проще, если вы используете существующий фреймворк (я использовал Mochikit и prototype, оба кажутся хорошими), которых несколько. Это должно позволить вам легко загрузить ответ сервера.

Если в AJAX используется GET, а не POST (это проще), вы можете проверить ответ, просто просмотрев страницу с соответствующей строкой запроса. В любом случае использование Firebug позволит вам просматривать звонки в реальном времени.

2) Нет необходимости проверять пароль AJAX - это можно сделать, просто используя простой JavaScript: просто сравните свойства .value двух входных данных.

1 голос
/ 27 октября 2009

Согласился с PeterJCLaw на всех аккаунтах, кроме выбора фреймворка javascript. Вот как вы можете сделать это с помощью 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!);
    }
});
0 голосов
/ 27 октября 2009
$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 ... Используйте подготовленные операторы и циклы для подготовки переменных.

0 голосов
/ 27 октября 2009

Посмотрите на расширение Jquery .

Это упростит все это. Проверить удаленные значения тоже просто.

Относительно недавний пост на эту тему с примером кода.

Вы можете загрузить Jquery на свой сервер или разместить их в коде Google. Использование версии Google значительно повышает вероятность того, что ваши клиенты также уже загрузили ее и смогут использовать свою кэшированную копию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...