Перенесено на новый хостинг / сервер - теперь возникают проблемы с использованием MySQL для проверки формы - PullRequest
1 голос
/ 22 января 2012

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

Я использую jQuery для проверки форм . Один из них я использую, чтобы определить, существует ли имя пользователя на самом деле, когда пользователь пытается войти (не волнуйтесь, я также проверяю серверную часть). На моем сервере разработки это работает без нареканий. Если вы не знакомы с jQuery Validation, в основном это возвращает истину или ложь обратно на сервер в форме некоторого вида JSON, но я не совсем осведомлен в этой части.

Код:

//Database Information vars (removed)

mysql_connect ($dbhost, $dbuser, $dbpass)or die("Could not connect: ".mysql_error());
mysql_select_db($dbname) or die(mysql_error());

$username = mysql_real_escape_string($login_username); // In validation, I can grab inputs like this.

$query = "SELECT username FROM registerusers WHERE username='$username';";

$res = mysql_query($query);

if (mysql_num_rows($res) > 0) {
    $output = true;
} else {
    $output = false;    
}

echo json_encode($output);

Проблема в том, что он всегда ссылается на первое предложение и возвращает true, даже если имя пользователя не существует. По какой-то причине, я думаю, что всегда возвращается 1 для mysql_num_rows($res).

Этот EXACT-код (за исключением новых переменных базы данных, которые я проверял сто раз, чтобы быть точными) все еще работает, как и предполагалось, на моем сервере разработки. Я могу только предположить, что это как-то связано с новым сервером, и поэтому я спрашиваю переполнение стека, потому что понятия не имею.

Ответы [ 2 ]

1 голос
/ 22 января 2012

Вы пытались установить соединение MySQL для переменной, а затем вызвать переменную соединения в качестве второго параметра внутри mysql_query? Иногда это вызывает проблемы на некоторых серверах, особенно если по умолчанию отключены определенные методы отладки, ошибки и предупреждения:

//Database Information vars (removed)

$connect = mysql_connect ($dbhost, $dbuser, $dbpass) or die("Could not connect: ".mysql_error());
mysql_select_db($dbname) or die(mysql_error());

$username = mysql_real_escape_string($login_username); // In validation, I can grab inputs like this.

$query = "SELECT `username` FROM `registerusers` WHERE `username` = '".$username."';";

$res = mysql_query($query, $connect);

if (mysql_num_rows($res) > 0) {
    $output = true;
} else {
    $output = false;    
}

echo json_encode($output);

Я также изменил $ query на объединенную строку с переменной, так как некоторые серверы, над которыми я работал, иногда бывают хитрыми с точки зрения помещения переменных внутри строки без разделения их на "..".

1 голос
/ 22 января 2012

Проблема в том, что register_globals включен. Это создает проблему высокой степени безопасности, поэтому оно отключено и не рекомендуется к использованию.

Изменение $login_username на $_GET['login_username'] решает проблему.

Использование суперглобальных массивов $ _GET и $ _POST не является проблемой безопасности, но вы всегда должны дезинфицировать ваш ввод (как вы это делаете с mysql_real_escape_string ()).

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