Проблема с PHP-скриптом - PullRequest
0 голосов
/ 24 марта 2011

Я не могу заставить if ($register_user_name != $check_name){ работать, но вложенное, если staement работает должным образом.

<?php
//al the default code to connect to mysql
include("../sql_information.php");

class infos{

    //the var that will store my sql query
    private $db;

    function login_details($queryresult) {

        //this runs the imported script
        $this->db = new MySQLDatabase();
        $register_user_name = $_POST['register_user_name'];
        $register_password = $_POST['register_password'];
        $confirm_password = $_POST['confirm_password'];
        //This is my mysql search query
        $sql = "SELECT user_name FROM `data_manager`.`user_accounts`;";
        //the result of the query is stored in this var
        $queryresult = $this->db->query($sql);

        //I dont know what I did here
        if ($result = $this->db->fetchArray($queryresult)) {

        $answer = $result['id'];

        $check_name = in_array($register_user_name, $answer);

        if ($register_user_name != $check_name){
            if ($register_password == $confirm_password) {
                $sql = "INSERT INTO `data_manager`.`user_accounts` (`id`, `user_name`, `password`) VALUES (NULL, '$register_user_name', '$register_password');";
                mysql_query($sql);
                echo "Registration Complete !";
            } else {
                print "The password you entered does not match, please retry.";
            }
        } else {
            print "This username is already being used !";
        }
    }
    }
?>

Ответы [ 6 ]

0 голосов
/ 24 марта 2011

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

$errors = array();
$register_password = $_POST['register_password'];
$confirm_password = $_POST['confirm_password'];
//escape string going to the query
$register_user_name = mysql_real_escape_string($_POST['register_user_name']);

$sql = "SELECT 1 FROM data_manager.user_accounts WHERE user_name='$register_user_name'";
$queryresult = $this->db->query($sql);
if ($this->db->fetchArray($queryresult)) {
  $errors[] = "Username already taken";
}
if ($register_password !== $confirm_password) {
  $errors[] = "Passwords mismatch";
}
if (!$errors) {
  $register_password = mysql_real_escape_string($register_password);
  $sql = "INSERT INTO `data_manager`.`user_accounts` (`id`, `user_name`, `password`) 
                          VALUES (NULL, '$register_user_name', '$register_password')";
  mysql_query($sql);
  header("Location: cpanel.php");
  exit;
} else {
  foreach ($errors as $err) echo $err;
}
?>
0 голосов
/ 24 марта 2011

Сравнение непустой строки с логическим значением всегда возвращает true, поскольку строка будет преобразована в TRUE.

0 голосов
/ 24 марта 2011
$register_user_name=$_POST['register_user_name']; // $register_user_name now contains a string
[..]
$check_name = in_array($register_user_name, $answer); //$check_name now contains a bool
if ($register_user_name != $check_name){ // if (string_thingy != bool_thingy) {

вы сравниваете две переменные, которые не имеют ничего общего друг с другом.

0 голосов
/ 24 марта 2011

in_array () функция возвращает логическое значение.Так что $check_name будет ИСТИНА или ЛОЖЬ, а $register_user_name представляется строкой.

UPD.

    //This is my mysql search query
    $sql = "SELECT user_name FROM `data_manager`.`user_accounts`;";
    //the result of the query is stored in this var
    $queryresult = $this->db->query($sql);

    // get result array
    if ($result = $this->db->fetchArray($queryresult)) {

    $answer = $result['id']; 

    $check_name = in_array($register_user_name, $answer);

Я вообще не понимаю, как работает ваш код :) $result должно быть array('user_name' => 'some username').При попытке получить ключ 'id' должно появиться предупреждение.Помещение переменной $answer без массива в функцию in_array() также недопустимо ...

0 голосов
/ 24 марта 2011

$register_user_name - строка, $check_name - логическое значение.

Кроме того, по этой строке $check_name = in_array($register_user_name, $answer); вы проверяете, что $register_user_name находится в массиве $answer. Но $ answer - это не массив, это что-то вроде целого числа?

0 голосов
/ 24 марта 2011

Вы не можете сделать это .. Это просто просто недействительно:

if ($result = $this->db->fetchArray($queryresult)) {

Я бы сказал, что вам нужно поставить () вокруг него, вот так:

if ( ($result = $this->db->fetchArray($queryresult)) ) {

Дайте мне знать, если это решит вашу проблему: -)

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