[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка пользователей из базы
Xander
Первоначально у меня был вот такой код



<?php
//this varible contains the array of existing users
$existing_users=array('');
//value got from the get metho
$user_name=$_POST['user_name'];
//checking weather user exists or not in $existing_users array
if (in_array($user_name, $existing_users))
{
//user name is not availble
echo "no";
}
else
{
//user name is available
echo "yes";
}
?>


тут он берет из массива я так понял, а мне надо чтобы брал из базы помогли поправить в итоге стало вот так


<?php
$sql="SELECT username FROM modx_web_users";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)) {
$return[] = $row;
}

$existing_users=$return;
//value got from the get metho
$user_name=$_POST['user_name'];
//checking weather user exists or not in $existing_users array
if (in_array($user_name, $existing_users))
{
//user name is not availble
echo "no";
}
else
{
//user name is available
echo "yes";
}
?>


и есть еще скрипт который вызывает этот пхп код


<script language="javascript">
$(document).ready(function()
{
$("#username").blur(function()
{
$("#msgbox").removeClass().addClass('messagebox').text('Проверка...').fadeIn("slow");
$.post("scripts/user_availability.php",{ user_name:$(this).val() } ,function(data)
{
if(data=='no')
{
$("#msgbox").fadeTo(200,0.1,function()
{
$(this).html('Этот логин занят').addClass('messageboxerror').fadeTo(900,1);
});
}
else
{
$("#msgbox").fadeTo(200,0.1,function()
{
$(this).html('Логин доступен для регистрации').addClass('messageboxok').fadeTo(900,1);
});
}

}
);

});
});
</
script>


и в итоге все равно ничего не работает((( в чем может быть проблема?



Спустя 5 минут, 46 секунд (21.06.2011 - 19:02) Xander написал(а):
может надо указать еще путь к базе название ее и пароль , но как это сделать?

Спустя 1 минута, 16 секунд (21.06.2011 - 19:04) Renden написал(а):
Xander
Цитата

и в итоге все равно ничего не работает((( в чем может быть проблема?

В чем угодно, ты скажи что конкретно не работает? В php коде проблем не вижу, ты его запускал, отдельно без javascript он работает?
Если он не работает, он должен писать ошибки. Какие тебе выдаются?

Спустя 23 минуты, 13 секунд (21.06.2011 - 19:27) Xander написал(а):
у меня ошибок не выдается просто у меня есть список логинов в базе и он должен проверять поле с логином на лету и выдавать сообщение что то типо логин свободен или занят, а он всегда выдает что свободен, не смотря на то что должен быть занят!

Спустя 1 минута, 12 секунд (21.06.2011 - 19:28) Xander написал(а):
http://captainpolo.mysmartidea.ru/registraciya.html вот страница с регистрацией , логин admin занят а пишет что свободно(

Спустя 27 секунд (21.06.2011 - 19:29) Renden написал(а):
Напиши в конце скрипта

print_r($existing_users);

что выведется на экран?

UP: мне пишет "Пользователь с введенным вами логином уже зарегистрирован" все ок.

Спустя 1 минута, 39 секунд (21.06.2011 - 19:30) Xander написал(а):
хм , сейчас гляну!

Спустя 2 минуты, 56 секунд (21.06.2011 - 19:33) Xander написал(а):
совсем ничего не пишет!

Спустя 1 минута, 13 секунд (21.06.2011 - 19:34) Xander написал(а):
и писать должен не сверху а справа про занятость логина)

Спустя 2 минуты, 12 секунд (21.06.2011 - 19:37) Renden написал(а):
Xander
Говоришь ошибок php срипта нет http://captainpolo.mysmartidea.ru/scripts/...vailability.php
UP: отредактировал, вот весь код:

$dbhost = "localhost"; //Хост
$dbuser = "root"; //Пользователь
$dbpassword = "xz"; //Пароль
$dbname = "xz"; //База Данных
mysql_connect($dbhost,$dbuser,$dbpassword) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());
$existing_users = array();
$user_name=$_POST['username'];
$query = mysql_query("SELECT username FROM modx_web_users");
while($row=mysql_fetch_array($query))
$existing_users[] = $row;
if (in_array($user_name, $existing_users))
echo "no";
else
echo "yes";

Еще раз отредатировал :)

Спустя 4 минуты, 50 секунд (21.06.2011 - 19:41) Xander написал(а):
так ну теперь он выдает

yesArray ( [0] => Array ( [0] => admin [username] => admin ) [1] => Array ( [0] => ant111 [username] => ant111 ) [2] => Array ( [0] => Phill [username] => Phill ) [3] => Array ( [0] => siteadmin [username] => siteadmin ) [4] => Array ( [0] => xander [username] => xander ) )

но то что надо все равно не работает!

Спустя 2 минуты, 22 секунды (21.06.2011 - 19:44) Renden написал(а):
Xander
print_r() убери.
$user_name=$_POST['user_name'];
Замени на:
$user_name=$_POST['username'];

Спустя 2 минуты, 4 секунды (21.06.2011 - 19:46) Xander написал(а):
убрал заменил ,но результата никакого опять(

Спустя 1 минута, 13 секунд (21.06.2011 - 19:47) Xander написал(а):
он по какой то причине всегда выдает yes!

Спустя 1 минута, 30 секунд (21.06.2011 - 19:49) Renden написал(а):
Xander
В скрипте js у тя ошибка:
$.post("scripts/user_availability.php",{ user_name:$(this).val() } ,function(data)


а надо наверно:
$.post("scripts/user_availability.php",{ username:$(this).val() } ,function(data)

Спустя 54 секунды (21.06.2011 - 19:49) Xander написал(а):
да и там я поправил(

Спустя 4 минуты (21.06.2011 - 19:53) Renden написал(а):
Чет неверится мне:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<
form method="POST">
<
input id="username" type="text" maxlength="30" size="30" name="username">
<
input type="submit" value="Отправить">
</
form>
<?php
$dbhost = "localhost"; //Хост
$dbuser = "root"; //Пользователь
$dbpassword = "xz"; //Пароль
$dbname = "xz"; //База Данных
mysql_connect($dbhost,$dbuser,$dbpassword) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());
$existing_users = array();
$user_name=$_POST['username'];
$query = mysql_query("SELECT username FROM modx_web_users");
while($row=mysql_fetch_array($query))
$existing_users[] = $row;
if (in_array($user_name, $existing_users))
echo "no";
else
echo "yes";
?>


Вставь, отрой страницу и вбей админ, че будет?

Спустя 5 минут, 32 секунды (21.06.2011 - 19:59) Xander написал(а):
http://captainpolo.mysmartidea.ru/registraciya.html вот можешь посмотреть сам что вышло все равно пишет yes

Спустя 8 минут, 43 секунды (21.06.2011 - 20:08) Renden написал(а):
Xander
Замени
$existing_users[] = $row;
на
$existing_users[] = $row['username'];

Спустя 1 минута, 56 секунд (21.06.2011 - 20:10) YVSIK написал(а):
/*проверка на существование пользователя с таким же логином*/
$result = mysql_query("SELECT `id` FROM `reg_li_ag` WHERE `loginl` = '$loginl'", $db);
$myrow = mysql_fetch_assoc($result);
if(!empty($myrow['id']))
{
unset($loginl);
echo 'Такой логин уже есть, Вам необходимо подобрать '
.'другой логин.<br>';
}

reg_li_ag=> это собственно таблица
то бишь складываеи ID в массив потом проверяем
есль конечно вы работаете с базой

Спустя 54 секунды (21.06.2011 - 20:11) Xander написал(а):
Урааа , работает спасибо тебе огроменное!

Спустя 1 минута, 35 секунд (21.06.2011 - 20:12) Renden написал(а):
YVSIK
Зачем кидать гавнокоды? С таким кодом его ломанут за 2 секунды.

Спустя 1 минута, 11 секунд (21.06.2011 - 20:13) Renden написал(а):
Xander
Незачто.
Убери из кода or die(mysql_error()); В 2- местах, если ты их добавлял, чтоб не выдавало лишнего.

Спустя 6 минут, 10 секунд (21.06.2011 - 20:19) YVSIK написал(а):
Цитата (Renden @ 21.06.2011 - 20:12)
YVSIK
Зачем кидать гавнокоды? С таким кодом его ломанут за 2 секунды.

стоппПП
а сэтого момента по подробней

Спустя 5 минут, 58 секунд (21.06.2011 - 20:25) Renden написал(а):
YVSIK,Xander
Вот так должно быть

$dbhost = "localhost"; //Хост
$dbuser = "root"; //Пользователь
$dbpassword = "xz"; //Пароль
$dbname = "xz"; //База Данных
mysql_connect($dbhost,$dbuser,$dbpassword);
mysql_select_db($dbname);
$user_name = trim(mysql_real_escape_string($_POST['username']));
$query = mysql_query("SELECT username FROM users WHERE username='$user_name'");
if (mysql_num_rows($query))
echo "no";
else
echo "yes";


Спустя 5 минут, 11 секунд (21.06.2011 - 20:31) Админ написал(а):
Renden
ну да и обратные кавычки чтоб избежать совпадения с зарезервированными именами
да и двойные лучше заменить на одинарные

Спустя 1 минута, 54 секунды (21.06.2011 - 20:32) YVSIK написал(а):
я же вам сказал по подробней а не просто так должно быть есль быть до конца точным вот это
$query = mysql_query("SELECT username FROM users WHERE username='$user_name'");

должно быть так
$query = mysql_query("SELECT `username` FROM `users` WHERE `username`='$user_name'");


а терь сравним с этим
$result = mysql_query("SELECT `id` FROM  `reg_li_ag` WHERE `loginl` = '$loginl'", $db);

Renden
буду ждать ваших ответов с нетерпением

Спустя 2 минуты, 17 секунд (21.06.2011 - 20:35) Админ написал(а):
Цитата
 $myrow = mysql_fetch_assoc($result);
if(!empty($myrow['id']))

ренден прав - нафига выдёргивать массив если нужно только проверить наличие ряда в таблице

Спустя 13 секунд (21.06.2011 - 20:35) Renden написал(а):
Админ
Я против обратных кавычек, я за нормальные названия таблиц и полей smile.gif
YVSIK
Перед запросом ты не показал человеку как избежать sql иньекции в $loginl + остальной код неимеет смысла так делать.

Спустя 3 минуты, 11 секунд (21.06.2011 - 20:38) Админ написал(а):
Renden
Цитата
Я против обратных кавычек

странно - ну да фиг с ними с кавычками.

Спустя 3 минуты, 5 секунд (21.06.2011 - 20:41) Renden написал(а):
Админ
Я даже где-то спор развивал на эту тему, часть за, чать против.
Я лично против т.к ОФИЦИАЛЬНАЯ документация MySQL не использует обратные кавычки, и меня напрягает ставить 100 ковычек если я собираюсь выбрать 50 полей smile.gif

Спустя 8 минут, 16 секунд (21.06.2011 - 20:50) YVSIK написал(а):
Renden
ну я дико извиняюсь а где тут инекции
это что, то что проверяеться через массив?
терь так
я же просил про по подробней в этом по моему весь смысл
а не отрицать что это не так и всё моё лучше
вижу сщас что оно таво лучше вот только почему лучше
так и дойдем до светлого будущего

Спустя 2 минуты, 26 секунд (21.06.2011 - 20:52) Админ написал(а):
Renden
я ж говорю - тут дело каждого user posted image

Спустя 1 минута, 33 секунды (21.06.2011 - 20:54) Админ написал(а):
YVSIK
иньекция там самая натуральная
Цитата
а где тут инекции
это что, то что проверяеться через массив?

это я вообще не понял

Спустя 3 минуты, 1 секунда (21.06.2011 - 20:57) Renden написал(а):
YVSIK

$loginl = $_POST['username']; //Ничем не проверяется, не убирает кавычки и не экранирует, так бы сделал Автор темы, тк. ты не показал ему что нужно сделать.
$result = mysql_query("SELECT `id` FROM `reg_li_ag` WHERE `loginl` = '$loginl'", $db); //И попадает в запрос.
//В итоге используя UNION можно получить спокойно логин-пароль.
//А добавив всего-лишь в форму вместе с именем кавычку можно раскрыть пути.


По поводу остального кода помоему Админ тебе уже ответил, что незачем генерировать массив если нужно узнать присутствует 1 строка в базе или нет.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.