[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: While + функция
maximka787
Привет парни. Подскажите, такой метод реализации содержит в себе какие-то ошибки? Стыдно, но первый раз за столько лет использую цикл while с функцией внутри. Грамматика вообще правильная?
Суть: Генерируем URL (в примере сделал элементарную генерацию), проверяем в БД, если копии нет, то ОК, если найдена копия, то выполняем дальше, пока не получим уникальный URL. Я старался сделать самую быструю версию, уж проще по моему нельзя.


function check_url_copy($url)
{
$query = "SELECT `id` FROM `pages` WHERE `url` = '".$url."' LIMIT 1";
if(mysql_num_rows(mysql_query($query)) > 0)
{
return false;
}
else
{
return true;
}
}



$url = rand(1,9); //URL для примера упрощены


while(!check_url_copy($url))
{
$url = rand(1,9);
}

echo $url;


_____________
..Работает - не трогай!
AllesKlar
Нормально.
Проблемы две.
1: открыта SQL-inj
2: как только в базе будет 9 url, цикл будет крутиться бесконечно.

лично я для циклов без конкретного числа итераций ставлю максимально-допустимое количество витков, после которого выкидываю исключение, типа: "не удалось сгенерировать url"

_____________
[продано копирайтерам]
Dezigo
Лучше ищите в база данных сразу с использованием in
$query = "SELECT `id` FROM `pages` WHERE `url` in (".implode(',', $url).") LIMIT 1";
maximka787
Цитата (AllesKlar @ 2.06.2015 - 09:35)
Нормально.
Проблемы две.
1: открыта SQL-inj
2: как только в базе будет 9 url, цикл будет крутиться бесконечно.

лично я для циклов без конкретного числа итераций ставлю максимально-допустимое количество витков, после которого выкидываю исключение, типа: "не удалось сгенерировать url"

1) Это я специально, чтоб не засорять пример сделал :)
2) URL генерируется более сложно, цифро-буквенное значение. Проверка нужна на всякий случай.
3) По поводу ограничения - идея хороша, учту!
Благодарю за совет!


Dezigo
$query = "SELECT `id` FROM `pages` WHERE `url` in (".implode(',', $url).") LIMIT 1";

Не вариант совсем) Тут смысл другой, IN никак не подходит.

_____________
..Работает - не трогай!
maximka787
Цитата (Dezigo @ 2.06.2015 - 09:54)
Лучше ищите в база данных сразу с использованием in
$query = "SELECT `id` FROM `pages` WHERE `url` in (".implode(',', $url).") LIMIT 1";

и еще
in (".implode(',', $url).") 
+

LIMIT 1


круто))))

_____________
..Работает - не трогай!
Invis1ble
ну и в догонку:
Цитата
mysql_num_rows(mysql_query($query)

если mysql_query() вернет false, то будет ошибка

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Dezigo
Тогда и это
  if(mysql_num_rows(mysql_query($query)) > 0)
{
return false;
}
else
{
return true;
}

Замени на это
		  return !mysql_num_rows(mysql_query($query)) > 0;
kaww
Цитата (Dezigo @ 2.06.2015 - 11:00)
Замени на это

а это замени на это
return !mysql_num_rows(mysql_query($query))
;)
Быстрый ответ:

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