在PHP

时间:2016-07-14 13:50:41

标签: php mysql

我遇到以下PHP脚本的问题。具体来说,是创建user_id的部分。这是较大的registration.php文件的一部分,该文件在没有创建user_id的部分的情况下工作正常。

如您所见,它是一个使用变量$useridexits来控制循环的while循环。它默认设置为true,因此循环运行。生成随机数,然后针对数据库进行检查。如果返回结果,则$useridexists变量设置为true并继续循环。如果未返回任何结果,则$useridexists设置为false,因此循环停止。然后将生成的数字设置为$userid,然后将其添加到以下部分的数据库中。

以下是代码:

//This section creates a new userid for each user.  

//This varible is used by the while loop and is set to true by default. 
$useridexists = true; 

//While loop to create userid and check the database to see if the userid
//already exists.  If it does, the while loop keeps going until a unique 
//user id is created.  
while($useridexists){

    // Function to create random user id number.
    function randomNumber($length) {
        $result = '';

        for($i = 0; $i < $length; $i++) {
            $result .= mt_rand(0, 9);
        }
        return $result;
    }

    // user id value created from randomNumber function. 
    $number = randomNumber(1);

    //query the database to see if the user id already exists 
    $query = "SELECT * FROM users WHERE user_id = :number";

    $query_params = array(':number' => '$number');

    try {
        // These two statements run the query against the database table. 
        $stmt   = $db->prepare($query);
        $result = $stmt->execute($query_params);
    }
    catch (PDOException $ex) {

        $response["success"] = 0;
        $response["message"] = "Failed to run query: " . $ex->getMessage();
        die(json_encode($response));
    }

    $row = $stmt->fetch();

    if ($row){
        $useridexists = true;
    }else{
        $useridexists = false; 
    }
}

$userid = $number; 

// This section adds the values to the database:
$query = "INSERT INTO users (username, password, email, firstname, lastname, user_id) VALUES ( :user, :pass, :email, :firstname, :lastname, :uid)";

//update tokens with the actual data:
$query_params = array(
    ':user' => $_POST['username'],
    ':pass' => $_POST['password'], 
    ':email' => $_POST['email'],
    ':firstname' => $_POST['firstName'], 
    ':lastname' => $_POST['lastName'],
    ':uid' => $userid
);

//run the query, and create the user
try {
    $stmt   = $db->prepare($query);
    $result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
    $response["success"] = 0;
    $response["message"] = "Failed to run query: " . $ex->getMessage();
    die(json_encode($response));
}


$response["success"] = 1;
$response["message"] = "Username Successfully Added! Please log in.";
echo json_encode($response);

$email= mysql_escape_string($_POST['email']);
$username = mysql_escape_string($_POST['username']); 

如果我在本节中发表评论,一切正常:

// user id value created from randomNumber function. 
$number = randomNumber(1);

//query the database to see if the user id already exists 
$query = "SELECT * FROM users WHERE user_id = :number";

$query_params = array(
    ':number' => '$number'
    );

try {
    // These two statements run the query against the database table. 
    $stmt   = $db->prepare($query);
    $result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
    $response["success"] = 0;
    $response["message"] = "Failed to run query: " . $ex->getMessage();
    die(json_encode($response));
}

$row = $stmt->fetch();

if ($row){
    $useridexists = true;
}else{
    $useridexists = false; 
}

如果我不评论该部分,我不会收到任何错误,但没有任何内容添加到数据库中。

除了检查数据库以查看user_id是否已存在并且将$useridexists变量更改为false的部分之外,一切都有效,这应该转义为while循环。当我添加它时,没有任何东西被添加到数据库中。

BTW:我使用1位数值进行测试,但是一旦代码实际运行,我会将其更改为$number = randomNumber(7);

0 个答案:

没有答案