Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вывести несколько категорий на одной странице
 
 автор: hitball   (16.09.2010 в 14:56)   письмо автору
 
 

Добрый день! Пожалуйста, подскажите как вывести несколько категорий из одной таблицы, если категория выводится такими способами. Заранее спасибо за советы!

Способ 1
<?php 
include ("blocks/bd.php"); /*соединяемся с базой*/

 
if (isset($_GET['cat'])) {$cat $_GET['cat'];}
 if (!isset(
$cat)) {$cat 8;}

 
$result mysql_query ("SELECT * FROM categories WHERE id='$cat'",$db);
 
if (!
$result
{
echo 
"<p>Запрос на выборку данных из базы не прошел. <br><strong>Код ошибки:</strong></p>";
exit (
mysql_error());
}
if (
mysql_num_rows($result) > 0)
{
$myrow mysql_fetch_array($result);
}
else
{
echo 
"<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>



Способ 2
$result45 = mysql_query("SELECT * FROM books WHERE cat = 4 ORDER BY date DESC, id DESC LIMIT 3",$db);
if (!$result45) 

  Ответить  
 
 автор: Slo_Nik   (16.09.2010 в 15:15)   письмо автору
 
   для: hitball   (16.09.2010 в 14:56)
 

уберите условие выборки из запроса и будет выводить всё, что есть в таблице

  Ответить  
 
 автор: hitball   (16.09.2010 в 15:37)   письмо автору
 
   для: Slo_Nik   (16.09.2010 в 15:15)
 

мне так не нужно, мне нужно чтобы выводило, к примеру, категорию 3 и 6 или 5, 6, 3.

  Ответить  
 
 автор: Trianon   (16.09.2010 в 15:41)   письмо автору
 
   для: hitball   (16.09.2010 в 14:56)
 

SELECT * FROM categories WHERE id IN (3,5,6)


второй запроос аналогично

  Ответить  
 
 автор: hitball   (16.09.2010 в 15:43)   письмо автору
 
   для: Trianon   (16.09.2010 в 15:41)
 

Trianon, спасибо!

  Ответить  
 
 автор: hitball   (16.09.2010 в 18:23)   письмо автору
 
   для: Trianon   (16.09.2010 в 15:41)
 

 if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
 if (!isset($cat)) {$cat = (9,60,61,62,63,64,65,66,109);}
 $result = mysql_query ("SELECT * FROM categories WHERE id='$cat'",$db);

написала так в первом способе, но выдает синтаксическую ошибку

  Ответить  
 
 автор: Slo_Nik   (16.09.2010 в 18:33)   письмо автору
 
   для: hitball   (16.09.2010 в 18:23)
 

а Вы внимательно сравтите Ваш запрос с тем запросом, что Trianon написал
да и здесь Вы намудрили

<?php 
if (isset($_GET['cat'])) {$cat $_GET['cat'];} 
 if (!isset(
$cat)) {$cat = (9,60,61,62,63,64,65,66,109);}
?>

  Ответить  
 
 автор: hitball   (16.09.2010 в 18:40)   письмо автору
 
   для: Slo_Nik   (16.09.2010 в 18:33)
 

сравнила и ничего не увидела(
я же говорю, что у меня 2 разных способа вывода категорий.
А Trianon только для второго написал

  Ответить  
 
 автор: mihdan   (16.09.2010 в 18:49)   письмо автору
 
   для: hitball   (16.09.2010 в 18:23)
 

<?php
// Это
$cat = (9,60,61,62,63,64,65,66,109);
// На это 
$cat "(9,60,61,62,63,64,65,66,109)";
?>

  Ответить  
 
 автор: hitball   (16.09.2010 в 18:59)   письмо автору
 
   для: mihdan   (16.09.2010 в 18:49)
 

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

  Ответить  
 
 автор: Slo_Nik   (16.09.2010 в 19:03)   письмо автору
 
   для: hitball   (16.09.2010 в 18:59)
 

а вот теперь самое интересное....
воспользуйтесь функциями error_reporting(), mysql_errno() и mysql_error() , что бы выявить ошибку

  Ответить  
 
 автор: mihdan   (17.09.2010 в 14:37)   письмо автору
 
   для: hitball   (16.09.2010 в 18:59)
 

Это всего-навсего исправление одной из ваших ошибок. Поставьте максимальный уровень ошибок.

  Ответить  
 
 автор: hitball   (16.09.2010 в 19:26)   письмо автору
 
   для: mihdan   (16.09.2010 в 18:49)
 

скажите, а вы точно уверенны что такой заменной можно вывести информацию? у меня не получается никак это сделать(

<?php  
include ("blocks/bd.php"); /*соединяемся с базой*/ 

 
if (isset($_GET['cat'])) {$cat $_GET['cat'];} 
 if (!isset(
$cat)) {$cat ="(59,60,61,62,63,64,65,66,109)";} 

 
$result mysql_query ("SELECT * FROM categories WHERE id='$cat'",$db); 
  
if (!
$result)  

echo 
"<p>Запрос на выборку данных из базы не прошел. <br><strong>Код ошибки:</strong></p>"
exit (
mysql_error()); 

if (
mysql_num_rows($result) > 0

$myrow mysql_fetch_array($result); 

else 

echo 
"<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>"
exit(); 

?>

  Ответить  
 
 автор: Trianon   (16.09.2010 в 19:38)   письмо автору
 
   для: hitball   (16.09.2010 в 19:26)
 

Выводите текст запроса перед тем, как исполнять.
Выводите и сравнивайте с моим.

Кстати, в диагностике стоит написать "В таблице нет записей удовлетворяющих условию."

  Ответить  
 
 автор: hitball   (22.10.2010 в 11:21)   письмо автору
 
   для: Trianon   (16.09.2010 в 19:38)
 

сейчас снова попробовала и ничего не вышло(
помогите мне, пожалуйста!

  Ответить  
 
 автор: sim5   (22.10.2010 в 11:33)   письмо автору
 
   для: hitball   (22.10.2010 в 11:21)
 

>автор: Trianon (16.09.2010 в 15:41)
>для: hitball (16.09.2010 в 14:56)
>SELECT * FROM categories WHERE id IN (3,5,6)

А у вас, что получится:

WHERE id='$cat'"

???

  Ответить  
 
 автор: hitball   (22.10.2010 в 11:41)   письмо автору
 
   для: sim5   (22.10.2010 в 11:33)
 

Здравствуйте, sim5 )))

Нет, так тоже не выходит. Это ведь два кода с одной страницы
полный вид страницы вот

<?php 
include ("blocks/bd.php"); 
 if (isset(
$_GET['cat'])) {$cat $_GET['cat'];}
 if (!isset(
$cat)) {$cat 5;}
 
$result mysql_query ("SELECT * FROM categories WHERE id='$cat'",$db);
if (!
$result
{
echo 
"<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору L@net <br><strong>Код ошибки:</strong></p>";
exit (
mysql_error());
}
if (
mysql_num_rows($result) > 0)
{
$myrow mysql_fetch_array($result);
}
else
{
echo 
"<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<body><div id="wrapper">
<? 
$result77 
mysql_query ("SELECT str FROM options",$db);
$myrow77 mysql_fetch_array ($result77);
$num  = isset($myrow77["str"])  ? $myrow77["str"]  : 10;
$near = isset($myrow77["near"]) ? $myrow77["near"] :  3;
@
$page $_GET['page'];
$result00 mysql_query("SELECT COUNT(*) FROM articles WHERE cat='$cat'");
$temp mysql_fetch_array($result00);
$post $temp[0];
$total = (($post 1)/$num) + 1;
$total intval($total);
$page intval($page);
if(empty(
$page) or $page 0$page 1;
  if(
$page $total$page $total;
//--- постраничка ---
$pageline '<strong>Страницы:&nbsp;&nbsp;';
// Проверяем нужна ли 1-я страница
$pp $page-1;
$pn $page+1;
if(
$page $near 1$pageline .= " <a href= $srcfile?cat=$cat&page=1>1</a> ...";
// Находим ближайшие станицы с обоих краев, если они есть
for($i $page-$near$i <= $page+$near$i++)
if(
$i >=&& $i <= $total)
{
 if(
$i == $page)   $pageline .= "<b>$i</b>";
// elseif($i == $pp) $pageline .= " <a href= $srcfile?cat=$cat&page=$i > << </a> ";
// elseif($i == $pn) $pageline .= " <a href= $srcfile?cat=$cat&page=$i > >> </a> ";
 
else  $pageline .= " <a href= $srcfile?cat=$cat&page=$i > $i </a> ";
}
// Проверяем нужна ли последняя страница
if($page $near $total$pageline .= "... <a href= $srcfile?cat=$cat&page=$total >$total</a> ";
$pageline .= '</strong>';
$pageline $total "<div class=\"pstrnav\">$pageline</div>" "";
//--- Вывод постранички 1 ---
echo $pageline;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start $page $num $num;
// Выбираем $num сообщений начиная с номера $start
     
$result mysql_query("
     SELECT
         id,title,description,date,
         DATE_FORMAT(date, '%d.%m.%Y') AS eurodate,
         mini_img,rating,q_vote
     FROM articles
     WHERE cat= "
. ((int)$cat) . 
     ORDER BY date DESC
     LIMIT " 
. ((int)$start) . " , ". ((int)$num) ."
  "
,$db);
if (!
$result)
{
echo 
"<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору L@net <br><strong>Код ошибки:</strong></p>";
exit (
mysql_error());
}
while(
$myrow mysql_fetch_array($result))
{

$r $myrow["rating"]/$myrow["q_vote"];
$r intval($r);

printf ("<div class='lesson_title2'>
<img class='mini_lenta' align='left' src='../%s'>
<a class='h4' href='view_articles.php?id=%s'>%s</a>
<p class='br_p'><span class='lesson_add'> Дата добавления: %s&nbsp;&nbsp;&nbsp;&nbsp;Рейтинг:<img src='../images/css/%s.gif'></span></p>
%s</div>"
$myrow["mini_img"], $myrow["id"], $myrow["title"], $myrow["eurodate"], $r$myrow["description"]);
}
//--- Вывод постранички 2 ---
echo $pageline;
?>

</body>
</html>

  Ответить  
 
 автор: sim5   (22.10.2010 в 12:04)   письмо автору
 
   для: hitball   (22.10.2010 в 11:41)
 

Зачем числовые значения в запросах вы обрамляете в кавычки?
Вот так поступать нельзя:
if (isset($_GET['cat'])) {$cat = $_GET['cat'];} 
if (!isset($cat)) {$cat = 5;}
а затем подставляя $cat параметром запроса.
<?
$cat 
= isset($_GET['cat']) ? inval($_GET['cat']) : 5;

По причине выше, по которой вам советовали IN(...) - так и не видно, где вы это применяете, и чего вам собственно тогда надо?

  Ответить  
 
 автор: hitball   (22.10.2010 в 12:21)   письмо автору
 
   для: sim5   (22.10.2010 в 12:04)
 

мне нужно, чтобы выводилось несколько категорий на одной странице, а зачем же мне оставлять неработающий код на страницах?
если пишу так, то выдает синтаксическую ошибку
 $cat = isset($_GET['cat']) ? inval($_GET['cat']) : 16,114;
$result = mysql_query ("SELECT * FROM categories WHERE id='$cat'",$db);

  Ответить  
 
 автор: sim5   (22.10.2010 в 12:55)   письмо автору
 
   для: hitball   (22.10.2010 в 12:21)
 

Значит так:
1. $cat = isset($_GET['cat']) ? inval($_GET['cat']) : 16,114; может быть только в таком виде "16,114".
2. И если не будет выполнено условие, то ваша $cat будет равна строке "16,114".
Вопрос:
Как вы думаете, в результате этого ваш запрос, который в итоге будет выглядеть как:
SELECT * FROM categories WHERE id="16,114" будет выполнен?

Вам для чего Trianon об операторе IN упоминал и приводил синтаксис его записи? А вы что вытворяете со всем этим?

  Ответить  
 
 автор: hitball   (22.10.2010 в 13:01)   письмо автору
 
   для: sim5   (22.10.2010 в 12:55)
 

я не понимаю куда мне здесь деть это IN
у меня же не просто так выводится
id IN (3,5,6)
, а вот так
WHERE id='$cat'

  Ответить  
 
 автор: sim5   (22.10.2010 в 13:21)   письмо автору
 
   для: hitball   (22.10.2010 в 13:01)
 

Миледи, если ваши id в базе, это стока "3,7,8" или "9,5,6", заради бога, пишите:
WHERE id='3,5,6'
но если ваши id, это И 3 И 4 И 5 и т.п., то есть числовые одиночные значения, то уж будьте добры обращаться к ним соотвевтствующе, с уважением, либо:
только WHERE id=3, только WHERE id=4 и т.д,
либо сразу запрос нескольких:
WHERE id IN (3,5,6)
а не подсовывать числовым одниночным значениям id непонятную для них строку.

  Ответить  
 
 автор: hitball   (22.10.2010 в 13:24)   письмо автору
 
   для: sim5   (22.10.2010 в 13:21)
 

да я понимаю, что нужно через IN просто не знаю как его симантически грамотно в мою строку
вставить
 $cat = isset($_GET['cat']) ? inval($_GET['cat']) : "16,114"; 
$result = mysql_query ("SELECT * FROM categories WHERE id='$cat'",$db);

  Ответить  
 
 автор: sim5   (22.10.2010 в 13:39)   письмо автору
 
   для: hitball   (22.10.2010 в 13:24)
 

А не странна-ли сама запись у вас? Я так, ради интереса. Можете объяснить, почему при отсутствии запроса $_GET['cat'] надо выводить 16 и 114 категорию, почему, например, не 211, 123 и 45?

Так вы приравнивайте переменной $cat один из случаев запроса, то есть:
<?
$cat 
= isset($_GET['cat']) ? " id=" inval($_GET['cat']) : " IN(16,114)"
//и подставляйте в запросе
".... WHERE" $cat "...."

  Ответить  
 
 автор: hitball   (22.10.2010 в 13:46)   письмо автору
 
   для: sim5   (22.10.2010 в 13:39)
 

затрудняюсь ответить на ваш вопрос

  Ответить  
 
 автор: sim5   (22.10.2010 в 13:51)   письмо автору
 
   для: hitball   (22.10.2010 в 13:46)
 

Оригинально. А коли сами не знаете, то зачем такое пишите? Зачем тогда это нужно, да еще с проблемами?

  Ответить  
 
 автор: hitball   (22.10.2010 в 14:08)   письмо автору
 
   для: sim5   (22.10.2010 в 13:51)
 

уж очень нужно вывести несколько категорий на одной странице. спасибо за то, что пытались мне помочь)

  Ответить  
 
 автор: sim5   (22.10.2010 в 14:47)   письмо автору
 
   для: hitball   (22.10.2010 в 14:08)
 

Пожалуйста, выводите, но почему именно эти? Выбирайте сразу несколько любых категорий из базы и выводите. Либо зная все номера своих категорий (коли вы их пишите собственноручно), держите их как массив, и перемешивая этот массив, берите из него N номеров, через implode подставляйте параметрами для оператора IN в запросе.

  Ответить  
 
 автор: sim5   (23.10.2010 в 06:43)   письмо автору
 
   для: hitball   (22.10.2010 в 13:24)
 

Вот заглянул, по ошибке, и не зря - функция написана с ошибкой, и вы, и я ее добросовестно копируем от поста к посту:))
intval($_GET['cat'])

  Ответить  
 
 автор: hitball   (07.11.2010 в 22:55)   письмо автору
 
   для: sim5   (23.10.2010 в 06:43)
 

спасибо), но мне это все равно не очень помогло

  Ответить  
 
 автор: MakAst   (22.10.2010 в 13:27)   письмо автору
 
   для: hitball   (22.10.2010 в 13:01)
 

SELECT * FROM categories WHERE id IN ($x) где $x = '3,5,6'

  Ответить  
 
 автор: hitball   (22.10.2010 в 13:38)   письмо автору
 
   для: MakAst   (22.10.2010 в 13:27)
 

$cat = isset($_GET['cat']) ? inval($_GET['cat']): "16,114";
$result = mysql_query ("SELECT * FROM categories WHERE id IN ('$cat')",$db); 

так ошибку не выдает, но и категорию 114 не выводит

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования