0

ユーザー名が使用されているかどうかを確認する必要があります。ユーザーが登録できない場合は、ユーザー名が既に使用されているかどうかを確認するスクリプトを追加する必要がある登録ページにリダイレクトされますか? または、このためのスクリプトをどこで入手できますか。私のスクリプトは、私が持っているものです。

 <?php

// Check if he wants to register:
if (!empty($_POST[username]))
{
// Check if passwords match.
if ($_POST[password] != $_POST[password2])
    exit("Error - Passwords don't match. Please go back and try again.");

// Assign some variables.
$date = time (" d - m - Y ");
$ip = $_SERVER[REMOTE_ADDR];

require_once("connect.php");

// Register him.
$query = mysql_query("INSERT INTO members 
(username, fname, email, password, date, ip)
VALUES      ('$_POST[username]','$_POST[fname]','$_POST[email]','$_POST[password]','$date','$ip')")
or die ("Error - Couldn't register user.");

echo "Welcome $_POST[username]! You've been successfully reigstered!<br />
    You Will Be Redirected To Our Home Page Where U Can Login ";
exit();
}

?>
4

3 に答える 3

3

最初にユーザー名の存在を確認する必要があります。

SELECT count(1) FROM members WHERE username = '$_POST[username]'

結果が > 0 の場合、User already existsエラーがスローされます。

于 2012-11-21T00:08:48.253 に答える
0

コードを機能させてきれいにするために、コードにいくつかの変更を加えました。

<?php
// Check if he wants to register
// - Make sure that param exists
// - Check length 
if (isset($_POST['username']) && strlen($_POST['username']) > 0) {

    // Check if passwords match.
    // - Make sure that params exist
    // - Check length 
    // - Check matching
    if (!isset($_POST['password']) || 
        !isset($_POST['password2']) ||
        strlen($_POST['password']) === 0 || 
        $_POST['password'] !== $_POST['password2']) {
           die("Error - Passwords don't match. Please go back and try again.");
    }

    require_once("connect.php");

    // Set array of params
    $fields = array(
        'username' => $_POST['username'],
        'fname' => isset($_POST['fname']) ? $_POST['fname'] : '',
        'email' => isset($_POST['email']) ? $_POST['email'] : '',
        'password' => $_POST['password'],
        'date' => date("d-m-Y"),
        'ip' => $_SERVER[REMOTE_ADDR]
    );

    // Escape fields agains sql injection
    $fields = array_map('mysql_real_escape_string', $fields);

    // Check if member exists
    $exists = mysql_num_rows(mysql_query("SELECT * FROM members WHERE username='" . $fields['username'] . "'"));
    if ($exists === 0) {

        // Insert member in DB
        if (mysql_query("INSERT INTO `members` (`" . implode('`,`', array_keys($fields)) . "`) VALUES ('" . implode("','", array_values($fields)) . "')") !== false) {
            echo "Welcome" . $_POST['username'] . "! You've been successfully reigstered!<br />
            You Will Be Redirected To Our Home Page Where U Can Login ";
            exit();
        } else {
            die("Error - Couldn't register user.");
        }
    } else {
        die("Error - Member exists!");
    }
}
?>
于 2012-11-21T01:14:12.760 に答える
0

ユーザー名が使用されているかどうかを確認するコードを更新しました。他の人々が言っ​​たように、SQL インジェクション攻撃について読んで、自分自身を守ってください。

<?php

// Check if he wants to register:
if (!empty($_POST[username])) {
// Check if passwords match.
    if ($_POST[password] != $_POST[password2])
        exit("Error - Passwords don't match. Please go back and try again.");

// Assign some variables.
    $date = time(" d - m - Y ");
    $ip = $_SERVER[REMOTE_ADDR];

    require_once("connect.php");

    // CHEK IF USERNAME IS VALID
    if (someFunctionThatChecksIfUsernameIsTaken($_POST['username'])) {
        // Register him.
        $query = mysql_query("INSERT INTO members 
        (username, fname, email, password, date, ip)
        VALUES      ('$_POST[username]','$_POST[fname]','$_POST[email]','$_POST[password]','$date','$ip')")
                or die("Error - Couldn't register user.");

        echo "Welcome $_POST[username]! You've been successfully reigstered!<br />
        You Will Be Redirected To Our Home Page Where U Can Login ";
        exit();
    } else {
        // redirect him back to the page and tell the user that the username is taken
    }
}
?>
于 2012-11-21T00:11:54.427 に答える