Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/27: Рейтинг темы: голосов - 27, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 43
1

Проверка на существование имени в базе

12.10.2012, 22:27. Показов 5419. Ответов 43
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем. Вот мой очередной трабл))) Ссылки у меня вида index.php?cat=health и формируются из базы, если пользователь вместо health вобьет припустим heal тогда браузер выдаст ошибку, поэтому мне нужно сделать проверку, существует ли heal в базе. Если нет, значит отправить на index.
Есть выборка из базы, в ней все $CAT хранятся:
PHP
1
2
$res = mysql_query("SELECT cat FROM categories WHERE page IN ('category')",$db);
$allcat = mysql_fetch_array($res);
Дальше если существует глобальная переменная то присваиваем ей имя cat:
PHP
1
2
3
if (isset ($_GET['cat'])) 
    {$cat = $_GET ['cat'];
    }
Потом нужно то, что я не знаю как написать. Проверить существует ли heal в базе, если да - тогда $cat = $_GET ['cat'], если нет, тогда отправить на индексную страницу, либо присвоить ей значение ' ', пустота тоже подходит так как позднее я подключаю
PHP
1
2
3
if ($cat==''and $subcat==''){   
    require_once ("templates/index_content.php");
    }
Вот то на что я умудрился, причем ОНО не работает:
PHP
1
2
3
4
5
6
7
8
9
if (isset ($_GET['cat'])) {  
do  {
    if ($cat == $allcat['cat']) break;   
    }    
while ($allcat=mysql_fetch_array($res));
} 
else {
    $cat='';
}
Есть советы?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2012, 22:27
Ответы с готовыми решениями:

Проверка на существование логина в базе
Есть php код и форма, почему постоянно с одним и тем же логином я могу регистрироваться ?...

Проверка имени файла в базе
Привет,Загружаю файл, перед загрузкой беру имя файла $name = $_FILES; После проверяю нет ли...

Ошибка проверки логина на существование в базе данных
Зделал проверку логина на существование в базе данних, если нету, записивает в базу, а если єсть,...

Проверка на существование БД MySQL
Здравствуйте! Подскажите пожалуйста. Я создаю базу MySQL с помощью mysql_create_db. А как...

43
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.10.2012, 22:30 2
Цитата Сообщение от boichukvd Посмотреть сообщение
SQL
1
WHERE page IN ('category')
зачем Вам здесь IN вообще? Чем не устраивает обычный знак равно?
SQL
1
WHERE `page`='category'
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
12.10.2012, 22:33 3
вместо
PHP
1
$allcat = mysql_fetch_array($res);
PHP
1
2
3
4
if ($allcat = mysql_fetch_array($res))
{
   // тут код если данный из базы достались
}
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.10.2012, 22:34 4
Зачем вам вообще что то извлекать если необходимо просто проверить наличие такой записи?
PHP
1
2
3
4
5
6
7
8
9
10
$query = 'SELECT COUNT (*) FROM `categories` WHERE `page`="category"';
$res = mysql_query($query);
if($res)
    $row = mysql_fetch_array($res, MYSQL_NUM);
if(empty($row[0])) {
#не нашли таких записей
}
else {
#нашли
}
0
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 43
12.10.2012, 23:03  [ТС] 5
Цитата Сообщение от KOPOJI Посмотреть сообщение
зачем Вам здесь IN
Я укоротил, там есть еще продолжение

Добавлено через 26 минут
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
тут код если данный из базы достались
не это надо проверять
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
12.10.2012, 23:17 6
ну если у вас есть все категории из базы уже выбранные, то база данных к теме не относится уже
Проверяйте на пхп.

Сделайте массив из категорий и проверяйте функцией in_array()
или прям перебрав результат проверьте
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function in_db($res, $val)
{
    mysql_data_seek($res);
    $f = false;
    while($row = mysql_fetch_array($res))
    {
        if ($row['cat'] == $val)
        {
            $f = true;
            break;
        }
    }    
    mysql_data_seek($res);    
    return $f;
}
0
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 43
12.10.2012, 23:24  [ТС] 7
Цитата Сообщение от KOPOJI Посмотреть сообщение
Зачем вам вообще что то извлекать если необходимо просто проверить наличие такой записи?
Ну можно таким способ, но наверное не совсем подойдет... завтра попробую....
Просто у меня все страницы формируются через GET запросы с помощью $_GET['cat'] и $_GET['subcat'], но для subcat я прописать могу аналогично. А так я могу сделать???
PHP
1
2
3
4
5
6
7
8
9
10
$query = 'SELECT COUNT (*) FROM `categories` WHERE `page`="category"';
$res = mysql_query($query);
if($res)
    $row = mysql_fetch_array($res, MYSQL_NUM);
if(empty($row[$_GET ['cat']])) {
$cat = ' '; // так у меня будет формироваться индексная страница
}
else {
$cat = $_GET['cat'];
}
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.10.2012, 23:29 8
нет. или Вы не поняли меня, или я Вас.
PHP
1
2
3
4
5
6
7
8
9
10
11
$query = 'SELECT COUNT (*) FROM `categories` 
               WHERE `page`="'.mysql_real_escape_string($_GET['cat']).'"';
$res = mysql_query($query);
if($res)
    $row = mysql_fetch_array($res, MYSQL_NUM);
if(empty($row[0])) {
#не нашли таких записей
}
else {
#нашли
}
0
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 43
12.10.2012, 23:30  [ТС] 9
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
то база данных к теме не относится уже

Завтра буду пробовать... сейчас уже не имею возможности... к стати пока функции мне хорошо не дались((.. завтра отпишусь, надеюсь получится некоторыми предполагаемыми способами
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
12.10.2012, 23:32 10
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$in_cat = false;
$cat = isset($_GET['cat']) ? mysql_real_escape_string(trim($_GET['cat'])) : '';
if (!empty($cat))
{
    $query = "SELECT COUNT (1) FROM `categories` WHERE `page`='category' and `cat` = '{$cat}'";
    $in_cat = (bool)mysql_result(mysql_query($query), 0);
}
 
if($in_cat)
{
    // тут у вас уже есть $cat
}
else
{
    // тут если страницы нет
}
0
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 43
13.10.2012, 02:46  [ТС] 11
Цитата Сообщение от KOPOJI Посмотреть сообщение
или я Вас
наверное я)).. завтра попробую

Добавлено через 3 часа 13 минут
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
mysql_real_escape_string
мне не надо экранировать или я вас не понимаю или вы меня, у меня все страницы, даже навигация формируются из переданной строкой браузера... наверное ответ на мой вопрос очень прост, но я не правильно объясняю
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.10.2012, 02:48 12
Экранировать надо любые данные пришедшие от пользователя которые отправляются в бд запросом
0
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 43
13.10.2012, 03:02  [ТС] 13
DrobyshevAlex,
Из таблицы в базе я достаю все существующие значения index?cat=... и формирую по ним навигацию и ссылки, т.е. рубрики health-index?cat=health..., beauty-index?cat=beauty, cook-index?cat=cook ... если пользователь выбрал рубрику health значит я ему достаю одним запросом все рубрики которые имеют метку health, а если пользователь в строке браузера введет несуществующую ссылку, например index?cat=heal, тогда по $GET['cat'] мне придет несуществующий запрос, который мне надо обработать, но если я переделаю несуществующий запрос в пустоту, тогда сформируется просто индексная страница.
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.10.2012, 03:24 14
Цитата Сообщение от boichukvd Посмотреть сообщение
Из таблицы в базе я достаю все существующие значения
Ну так я спрашивал вы все достаёте? если да то ответ в посте 6

Добавлено через 5 минут
Вот вам пришел запрос с переменной cat.
Она же вам нужна для выбора из базы? Если нет, то зачем вообще передавать эту переменную?
А раз нужна, и вы в бд её отправляете, вот там и проверяйте.
У вас где то есть запрос
SQL
1
WHERE ... = '$cat'
вот сюда и нужно пихать экранированную переменную.

Другое дело, что не обязательно проверять отдельно, подделали ла запрос, если нет такого значения в базе, то просто не чего ен выбирится, и вы узнаете что он подделан, и можно сделать страничку ошибки 404 или редирект на главную.

Но с другой стороны, раз у вас всё ранво все категории выбраны, то можно как я написал в посте 6 проверить, есть ли такая категория вообще, прежде чем делать запрос, и опять же либо ошибку 404 либо редирект на главную.
0
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 43
13.10.2012, 13:51  [ТС] 15
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
У вас где то есть запрос
Код SQL
WHERE ... = '$cat'
Есть
PHP
1
2
$resultCatNav = mysql_query("SELECT subcat,altTitle,title FROM categories WHERE category='$cat'",$db);
$myrowCatNav=mysql_fetch_array($resultCatNav);
Из этого запроса я делаю подкатегории выбранной пользователем соответсвенной категории, припустим он выбрал $cat=health:
PHP
1
2
3
4
do {
    printf   ("<li><a href='index.php?subcat=%s' title='%s'>%s</a></li>",$myrowCatNav["subcat"],$myrowCatNav["altTitle"],$myrowCatNav["title"]);
    }
while ($myrowCatNav=mysql_fetch_array($resultCatNav));
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
вот сюда и нужно пихать экранированную переменную
Я так понимаю в моем случае оно обрезает лишние пробелы, а что сделает с пустотой?... мне как раз не надо удалять пустоту поскольку я использую пустоту $cat=' ':
PHP
1
2
3
4
5
6
7
8
9
10
11
12
include("blocks/header.php");
 
include("templates/navigation.php");
 
if ($cat!='') {   
    require_once ("templates/category_nav.php");
    }
if ($subcat!='') {   
    require_once ("templates/subcategory_nav.php");
    }
if ($cat==''and $subcat==''){  
include("blocks/slider.php");
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
либо ошибку 404
Если я бы сделал запланированное решение, то страницы 404 не было бы таковой, а просто редирект на главную переменной $cat=' ', потому как:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
if ($cat!='') {   
    require_once ("templates/category_nav.php");
    }
if ($subcat!='') {   
    require_once ("templates/subcategory_nav.php");
    }
if ($cat==''and $subcat==''){  
include("blocks/slider.php");
} 
 
if ($cat==''and $subcat==''){   
    require_once ("templates/index_content.php");
    }
Я, понимаю, что существует наверно намного лучшие решения, но я пока учусь и лучшее что я придумал, это такое решение:
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Сделайте массив из категорий и проверяйте функцией in_array()
Вот мой массив, в котором содержатся все возможные значения категорий и соответственно $cat:
PHP
1
2
$result = mysql_query("SELECT subcat,cat,category,page,altTitle,title FROM categories WHERE page IN ('index','category')",$db);
$myrow=mysql_fetch_array($result);
Я уже не знаю что писать и как)))... Как с вышеприведенного запроса переделать под функцию in_array? А то я уже весь код своего сайта написал и толку ноль, жаль(
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.10.2012, 14:05 16
Цитата Сообщение от boichukvd Посмотреть сообщение
Вот мой массив, в котором содержатся все возможные значения категорий и соответственно $cat:
Это вы только одну строку вытащили из базы.
Ну можно как то так сделать

PHP
1
2
3
4
5
6
$result = mysql_query("SELECT subcat,cat,category,page,altTitle,title FROM categories WHERE page IN ('index','category')",$db);
while($rows[] = mysql_fetch_assoc($res));
if (isset($_GET['cat']) && in_array($_GET['cat'], $rows, true))
{
    // категория найдена
}
Добавлено через 4 минуты
А нет, стоп.
Это же будет массив массивов.

PHP
1
2
3
4
5
6
7
8
9
10
11
$result = mysql_query("SELECT subcat,cat,category,page,altTitle,title FROM categories WHERE page IN ('index','category')",$db);
 
$cats = array();
while($row = mysql_fetch_assoc($res))
{
    $cats[] = $row['cat'];
}
if (isset($_GET['cat']) && in_array($_GET['cat'], $cats, true))
{
    // категория найдена
}
0
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 43
13.10.2012, 14:19  [ТС] 17
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
PHP
1
while($rows[] = mysql_fetch_assoc($res));
mysql_fetch_assoc() expects parameter 1 to be resource, null given in

Добавлено через 2 минуты
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
PHP
1
while($row = mysql_fetch_assoc($res))
Сорри, я понял здесь $result должен быть

Добавлено через 7 минут
DrobyshevAlex, Опять не работает что-то... секунду... сейчас скины выложу
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.10.2012, 14:29 18
Ну если вы там ещё будете что то делать с результатом из базы, то есть ещё применять будете mysql_fetch... то вам нужно передвинуть внутренний указатель результата на начало.

как то так
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$res = mysql_query("SELECT subcat,cat,category,page,altTitle,title FROM categories WHERE page IN ('index','category')",$db);
 
$cats = array();
while($row = mysql_fetch_assoc($res))
{
    $cats[] = $row['cat'];
}
if (isset($_GET['cat']) && in_array($_GET['cat'], $cats, true))
{
    // категория найдена
    $cat = $_GET['cat'];
}
else
{
    $cat='';
}
mysql_data_seek($res, 0); //возвращаем в начало указатель результата


Но вот я не понимаю, вы первый запрос делаете только для определения есть ли у вас категория в бд? или потом выводите где то ещё результат первого запроса?

Добавлено через 1 минуту
Просто если вы используете только для определения категории, то вам не нужно выбирать всё содержимое, а нужно просто проверить есть ли такая категория в базе и всё.
0
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 43
13.10.2012, 14:34  [ТС] 19
DrobyshevAlex, Вот код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$res = mysql_query("SELECT subcat,cat,category,page,altTitle,title FROM categories WHERE page='category'",$db);
 
$cats = array();
while($row = mysql_fetch_assoc($res))
    {
    $cats[] = $row['cat'];
    }
if (isset($_GET['cat']) && in_array($_GET['cat'], $cats, true))
    {
    }
else {
    $cat = '';
}
Миниатюры
Проверка на существование имени в базе   Проверка на существование имени в базе  
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.10.2012, 14:34 20
хм, не совсем понятна структура вашей таблицы.
У вас категории и подкатегории хранятся в однйо таблице? И получается что если для одной категории есть несколько подкатегорий то у вас что, дубликат строк с именем категории идёт?

Нужно тогда как то так сделать
SQL
1
2
3
id - ID категории
pid - ID родительской категории, по умолчанию 0
name - имя категории
Что бы выбрать категории, выбираете все записи с pid = 0
Что бы подкатегорию, указываете ID категории, то есть pid = $cat_id
ну или через join по имени
SQL
1
SELECT b.* FROM category a JOIN category b ON a.id = b.pid WHERE a.name = '$cat'
0
13.10.2012, 14:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2012, 14:34
Помогаю со студенческими работами здесь

Проверка на существование логина в БД
Хочу при регистрации проверить, есть ли пользователь с таким логином. $sql = mysql_query(&quot;SELECT *...

Проверка на существование логина
if (!mysql_query(&quot;SELECT `login` FROM `r_users` WHERE `login` = '&quot;.$login.&quot;'&quot;)) { ...

Проверка на существование страницы!
Здравствуйте! Подскажите пожалуйста, как в php можно проверить существует ли страница, допустим...

Проверка записи на существование в БД
Перед добавлением новой записи в БД, осуществляю проверку на ее существавание в БД. Например при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru