[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка id
SunSet
Сразу говорю, что скрипт примитивный, я только учусь)) blink.gif
Делаю вывод новостей в зависимости от имеющегося id через строку браузера. Скрипт работает как надо но возникла проблема при проверке.

PHP
<?php /* ЭТОТ БЛОК ОТВЕЧАЕТ ЗА title СТРАНИЦЫ, МОЖНО НЕ СМОТРЕТЬ  */

$maximum mysql_query ("SELECT MAX(`id`) FROM `articles` WHERE cat=1",$db);

if (isset(
$_GET['id'])) {$id $_GET['id']; } 
if (!isset(
$id) OR $id ==OR empty($id) OR $id mysql_result($maximum,0)) 
{

$titlez mysql_query ("SELECT `title`,`meta_d`,`meta_k` FROM articles_cat WHERE cat=1",$db);
$title_str mysql_fetch_array($titlez);}

else {
$titlez mysql_query ("SELECT `title`,`meta_d`,`meta_k` FROM articles WHERE id=$id  AND cat=1",$db);
$title_str mysql_fetch_array($titlez);
}

?>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta name="description" content="<?php echo $title_str['meta_d']; ?>">
<meta name="keywords" content="<?php echo $title_str['meta_k']; ?>">

<title><?php echo $title_str['title']; ?></title>
<link href="../../style.css" rel="stylesheet" type="text/css">
</head>

<?php
include_once ("".PATH."/shapka.php");
?>
<table width="100%" height="446" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="200" rowspan="2" align="center" valign="top">td>
<td width="100%" height="11">&nbsp;</td>
<td width="200" rowspan="2" align="center" valign="top"><center><br><br>
</center></td>
</tr><tr><td width="100%" align="center" valign="top">
<?php /* ВОТ ТУТ ВЫВОД НОВОСТИ  */

if (!isset($id) OR $id ==OR empty($id) OR $id mysql_result($maximum,0)) 
/* ПРОВЕРКа. Как видно, проверяется не существует ли, не равна нулю или id больше чем максимальный id из базы, то выводим на страницы все новости из категории cat=1 */


{
$stats mysql_query ("SELECT `id`,`title`,`meta_d`,`meta_k`,`image`,`view`,`date` FROM articles WHERE cat=1",$db);
$stat mysql_fetch_array($stats);

$text_1 mysql_query ("SELECT SUBSTRING(`text`, 1, 260) AS `text` FROM `articles` WHERE `cat` = 1",$db);
$text_2 mysql_fetch_array($text_1);

do 
{
printf %s,%s,%s,%s,%s,%s,%s",$stat['id'],$stat['title'],$stat['image'],$stat['date'],$text_2['text'],$stat['id'],$stat['view'],$r);
}
while ($stat = mysql_fetch_array($stats) AND $text_2 = mysql_fetch_array($text_1));
}

else {

/* ЕСЛИ ID ТАКАЯ КАК НАМ НУЖНО И СООТВЕТСТВУЕТ CAT=1 ТО ВЫВОДИМ ТОЛЬКО ЭТУ НОВОСТЬ НА СТРАНИЦЕ */

$kk = mysql_query ("
SELECT `title`,`meta_d`,`meta_k`,`text`,`image`,`view`,`dateFROM articles WHERE cat=AND id=$id",$db);
$pop = mysql_fetch_array($kk);

printf ("
%s,%s,%s,%s,%s",$pop['title'],$pop['image'],$pop['date'],$pop['text'],$pop['view'],$r);

}
$views = $pop['view'] + 1;
$updates = mysql_query ("
UPDATE articles SET view='$views' WHERE id='$id'",$db);
/* ЭТО КОЛЛИЧЕСТВО ПРО
?> </td></tr><tr><td colspan="3">< /td>< /tr></table> и тут закрытие таблицы (форум не отобразил)
Так вот в чем вопрос. В моей проверке id должен быть от 1 до 9. 1 это минимум для записи, 9 максимум - больше новостей нету. Если он больше чем 9, либо id нету, либо id =0 то выводим все новости из категории cat=1. Но вот если пользователь вручную введет айдишник другой index.php?id=5, то в базе есть новость 5, но она в категории cat=2, и получается вроде ошибки нету, проверку проходит, но mysql ничего не выведет, потому что нету новости с id=5 и cat=1. Как сделать чтоб выводило какоето сообщение либо, желательно, загружало все новости как если бы id была не 5, а ошибкой в проверке. unsure.gif
Пробовал сделать чтоб вытягивало категорию, которой соответствует полученная id. Но правильно както не вышло оформить. Наверно, таким способом нужно чтоб сопоставлять id с категорией и потому либо дальше обрабатывать скрипт либо выводить ошибку

пример таблицы user posted image



Спустя 17 минут, 1 секунда (23.08.2009 - 18:56) DeeKeiD написал(а):
Цитата (SunSet @ 23.08.2009 - 15:39)
Но вот если пользователь вручную введет айдишник другой index.php?id=5, то в базе есть новость 5, но она в категории cat=2, и получается вроде ошибки нету, проверку проходит, но mysql ничего не выведет, потому что нету новости с id=5 и cat=1

Нечего не понял blink.gif почему бы не сделать вывод новости по id и список новостей по категориям?

Пример (для категории 1)
index.php?cat=1
news1
news7
news8
news9

Пример (вывод содержания новости)
index.php?id=1
Тут текст1
---
index.php?id=2
Тут текст2

Спустя 18 минут, 39 секунд (23.08.2009 - 19:14) SunSet написал(а):
DeeKeiD
У меня так и выводятся, заходишь по site.com/news/1 и вывод по категории 1. Но это же файл (index.php) у меня отвечает и за вывод определенной новости уже по id. Так сделал что если к нему без параметра id обращаешься то вывод всех, если есть id то только эту новость.
Но мне проверку на наличие id бы получше сделать, чтоб еще сравнивал введенный id c категорией в базе. А то некрасиво както, если будет показывать новость из раздела "Россия" про "Негритосов в Африке" sad.gif

Спустя 8 минут, 4 секунды (23.08.2009 - 19:22) DeeKeiD написал(а):
Если я правильно понял то:
Имеется
Новости из категории - site.com/news/1 /news/2 и т.д?
Нужно
site.com/news/10 - вывод всех новостей?

Проверка на существование новости с введенным id:
PHP
if($_GET['action']=="view") {

    $id = (int)$_GET['id'];
    $result = mysql_query("SELECT * FROM `news` WHERE id = '".$id."'") or die(mysql_error());
if ( !$result || mysql_num_rows($result) === 0 ) { echo '<center>ErroR</center>'; }
else
   {
   // вывод новости
   }
}

Спустя 16 минут, 3 секунды (23.08.2009 - 19:39) DeeKeiD написал(а):
Вот конструкция моего скритпа новостей, может пригодится
PHP
if($_GET['action']=="view") {
    
// Проверка на существование новости с введенным id
    $id = (int)$_GET['id'];
    $result = mysql_query("SELECT * FROM `news` WHERE id = '".$id."'") or die(mysql_error());
    if ( !$result || mysql_num_rows($result) === 0 ) { echo '<center>ErroR</center>'; }
    else {
    // Вывод новости
    }
}
if(
$_GET['action']=="cat") {
    $cat = (int)$_GET['cat'];
    $result = mysql_query("SELECT * FROM `news` WHERE `cat` = '".$cat."'") or die(mysql_error());
    while ($row = mysql_fetch_assoc($result)) {
    // вывод новостей из категории заданной ?cat=
    }
}
else
{
    $result = mysql_query("SELECT * FROM `news`");
    while ($row = mysql_fetch_assoc($result)) {
    // Вывод всех новостей со всех категорий
    }
}

Спустя 5 минут, 39 секунд (23.08.2009 - 19:44) SunSet написал(а):
DeeKeiD
Нетс.. трудно понять, согласен.
У меня есть файл index.php в папке site.com/news/1. Что он делает - если пользователь ввел просто или нажал на ссылку, то есть без ничего обратился к файлу site.com/news/1/index.php то выводятся новости cat=1. А это судя из таблицы новости 1, 7 ,8, 9. Но до этого проверка на то нету ли id, если она равна нулю или она больше максимальной записи в базе ,то есть если больше чем 9. Иначе говоря, скрипт проверяет нет ли в id нужной, подходящей нам id. Если нету то по дефолту загружаем все новости. И поскольку вообще без параметра зашли, то выводим все новости.
Если же пользователь зашел на эту же страницу с параметром site.com/news/1/index.php?id=1 то вывод сразу первой новости. Но после того как проверка "даст добро" )) Так вот мне надо чтоб еще одна проверка смотрела, соответствует ли введенный id категории cat=1. То есть чтоб до загрузки новости сравнивал запись из базы. Загвоздка в том, что введенный id=5 в базе есть, но он не соответствует cat=1. Но в проверке такого не указано и скрипт вытягивает новость 5, строит таблицу для нее, но заполнить нечем, потому что mysql по запросу id=5?cat=1 ничего не выводит, пусто. В итоге и пустая таблица, а нужно чтоб ошибку выдавал или загружал все новости из категории cat=1. В файле индекс изменяется только id, cat же постоянны, не меняется.

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

Спустя 11 минут, 14 секунд (23.08.2009 - 19:55) SunSet написал(а):
DeeKeiD
В твоем скрипте как сделано - пришел id - вывел определенную новость, пришел cat - вывел все новости категории. А у меня чуть сложнее - у меня нужно выводит только ту новость, которая принадлежит категории cat=1, а не просто по нужному id. Как ограничить, что выводило только новости 1, 7, 8, 9 ?
А в другом файле буду делать чтоб выводило только 2, 3, 4, 5, 6.

Спустя 12 минут, 41 секунда (23.08.2009 - 20:08) DeeKeiD написал(а):
хм зачем тебе такой геморой blink.gif жди профи пхп я даже представить себе не могу зачем и как можно сделать нечто подобное

Спустя 8 минут, 30 секунд (23.08.2009 - 20:17) SunSet написал(а):
DeeKeiD
Ты можешь)) Я верю)
Вот чуть похимичил, сделал на 70% что хотел.. но еще нужно доработать.
PHP
<?php 
$prov 
mysql_query ("SELECT `cat` FROM `articles` WHERE id=$id",$db); /* КАК ВОТ ТУТ СДЕЛАТЬ ЧТОБ ВЫВОДИЛО БЛОК echo НИЖЕ ЕСЛИ ИЗ БАЗЫ НЕ УДАЛОСЬ НИЧЕГО ВЫТЯНУТЬ? */
$proverka mysql_fetch_array($prov);


if (!isset(
$id) OR $id ==OR empty($id) OR $id mysql_result($maximum,0) OR ($proverka['cat']) !=1)  /* Это сама проверка, которая и проверяет теперь принадлежит ли введенный id категории cat=1 или нет */

Спустя 3 минуты, 9 секунд (23.08.2009 - 20:20) DeeKeiD написал(а):
PHP
<?php 
$prov 
= mysql_query ("SELECT `cat` FROM `articles` WHERE id=$id",$db);
$proverka = mysql_fetch_array($prov);
$res_proverka = $proverka['id'];
if(
mysql_num_rows($res_proverka) == 0) {
    echo 'Ничего не найдено';
}

if (!isset($id) OR $id ==0 OR empty($id) OR $id > mysql_result($maximum,0) OR ($proverka['cat']) !=1)

проверяй

Спустя 1 час, 28 минут, 31 секунда (23.08.2009 - 21:48) SunSet написал(а):
DeeKeiD
Спасиб за помощь. Чуть не то, думаю все переделать чтоб толково было. А то так я накрутил.. blink.gif


_____________
... и помните! Каким бы ни был PHP, главное - чтобы он был защищенным! :) (PHP с Анфисой Чеховой)
Быстрый ответ:

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