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

Форум MySQL

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

 

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

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

тема: Ссылки
 
 автор: Sin   (10.11.2004 в 23:41)   письмо автору
 
 

Здравствуйте. Подскажите пожайлуста вот есть таблица

CREATE table meseges (
id_text auto_increment primary key,
post_subject text,
post_body text,
id_user int(11),
id_forum tinytext,
putttime datetime,
flag enum ('show','hide') default 'hide'
); 


Как выводить записи я разобрался. А вот как сделать так чтобы при выводе post_subject образовывалась
ссылка на вывод post_body соответственно. Никак не могу придумать :0)

   
 
 автор: cheops   (10.11.2004 в 23:54)   письмо автору
 
   для: Sin   (10.11.2004 в 23:41)
 

Хм... вывод записей у вас происходит наверняка в цикле? Тогда при формировании ссылки следует использовать первичный ключ (так как он уникален) можно поставить ссылку fullpost.php?id_text=15, где параметр id_text - номер первичного ключа для поста в таблице meseges. В скрипте fullpost.php осуществить запрос к таблице по этому ключу
SELECT post_body FROM  meseges WHERE id_text=$id_text

   
 
 автор: glsv (Дизайнер)   (10.11.2004 в 23:59)   письмо автору
 
   для: Sin   (10.11.2004 в 23:41)
 

Хм, а какая логика работы должна быть? ... Не очень ясно.
Сначало выводятся списки названия (post_subject ) списком. А по ссылке на название выводится сообщение (post_body )? Причем именно то, на которое щелкнули. Это имеется ввиду или другое?

   
 
 автор: Sin   (11.11.2004 в 00:15)   письмо автору
 
   для: glsv (Дизайнер)   (10.11.2004 в 23:59)
 

Да-да. Что то на подобии форума. Нажимаешь по теме и выводятся посты. Только у меня в место постов статьи будут, которые хранятся в post_body, а названия в post_subject. B вот щелкая по названию должна открываться сама статья.

   
 
 автор: glsv (Дизайнер)   (11.11.2004 в 01:14)   письмо автору
 
   для: Sin   (11.11.2004 в 00:15)
 

cheops в общем то об этом и написал.

Можно организовать так. У вас будут 2 страницы
1 страница - список тем

<?
$query
="SELECT * FROM meseges";
$art mysql_query($query);
if (
$art)
{
  while(
$articles mysql_fetch_array($art))
  {
    echo 
"<h2><a href=article.php?id_text=".$articles['id_text '].">".
                  
$articles['post_subject ']."</a></h2>";
  }
}
?>


Здесь формируем ссылки на страницу article.php и передаем ей параметр статьи id_text=".$articles['id_text ']

Страница article.php отображает конкретную статью.

<?
$query
="SELECT post_body FROM  meseges WHERE id_text=".$_GET['id_text'];
$art mysql_query($query);
if (
$art)
{
  
$body mysql_fetch_array($art);
  
// Выводим содержимое статьи
  
echo $body['post_body '];
}
?>

   
 
 автор: Sin   (11.11.2004 в 13:54)   письмо автору
 
   для: glsv (Дизайнер)   (11.11.2004 в 01:14)
 

Ага вот сделал.
<?php

include ("includ/myaql.php");

if(
$id)
{
        
sql_connect(); //открываем соединение с базой
        
$sql_query="Select post_body FROM meseges WHERE id_text='".@$_POST['id']."'";
        
sql_execute();// Посылаем запрос
        
if($sql_res)
        {
                  
$body mysql_fetch_array($sql_res);
                  echo 
$body['post_body'];
        }
        else { echo (
"Ошибка"); }
        
sql_close();//закрываем соединение с базой
}
else { echo (
"ошибка id"); }

?>

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

   
 
 автор: cheops   (11.11.2004 в 14:10)   письмо автору
 
   для: Sin   (11.11.2004 в 13:54)
 

Дело происходит на локальной машине? Посмотрите в конфигурационном файле php.ini значение директивы display_errors, несущее ответственность за отображение ошибок в окно браузера - в новых версиях PHP она отключена, если это так включите её
display_errors = On

   
 
 автор: Sin   (11.11.2004 в 23:55)   письмо автору
 
   для: cheops   (11.11.2004 в 14:10)
 

Ага спасиба, я так разобрался. Просто вместо $_post['id'] написал $_GET['id'] и все пошло почемуто. Но вот опять появилась новая проблема. плохо когда мало знаешь, спасибо хоть вы помогаете. А дело в том
<?php
sql_connect
();
$sql_query="select * from forums";
sql_execute();
$sql_ress=$sql_res;
while (
$row mysql_fetch_array($sql_ress)) {
        
$sql_query="select meseges.*  from meseges  WHERE meseges.id_forum=forums.id_forum";
        
sql_execute();
        
$res=mysql_num_rows($sql_res);
echo (
" //текст страницы
           "
.$row['name_forum'].
         //текст страницы
         "
.$res.");


Я тут пытаюсь найти количество тем (статей) в разделе форума Тойсть название форума (раздела) и на против сколько статей он содержит. Названия форумов находятся в таблицы forums, а статьи в meseges. они связаны ключом id_forum
так вот у меня вылазиют ошибки то что запрос не осуществился. Хотя первый прошел удачно и названия разделов появляются.

   
 
 автор: cheops   (12.11.2004 в 00:11)   письмо автору
 
   для: Sin   (11.11.2004 в 23:55)
 

>$_POST['id'] написал $_GET['id']
1) Это массивы для двух способов передачи - GET это передача в строке запроса, вы будете видить свои параметры в URL, как у нас на форуме, что-то вроде
answer.php?id_forum=3&id_theme=738&id_post=5572

При передаче методом POST - данные передаются через заголовки и не видны в строке запроса. Метод передачи задаётся параметром method формы (тэг <form>)
2) Вы пытаетесь осуществить многотабличный запрос, в этом случае, после оператора FROM должны быть перечислены все используемые таблицы:
SELECT meseges.*  
FROM meseges, forums  
WHERE meseges.id_forum=forums.id_forum

3) На самом деле в вашем случае удобнее обойтись одним запросом
<?php
  sql_connect
(); 
  
$sql_query="SELECT forums.name_forum AS name_forum, COUNT(meseges.id_forum) AS total
    FROM forums, meseges
    WHERE meseges.id_forum=forums.id_forum
    GROUP BY name"

  
sql_execute(); 
  
$sql_ress=$sql_res
  while (
$row mysql_fetch_array($sql_ress))
  { 
    echo (
" //текст страницы 
           "
.$row['name_forum'].
         //текст страницы 
         "
.$row['total']); 
?>

   
 
 автор: Sin   (12.11.2004 в 23:05)   письмо автору
 
   для: cheops   (12.11.2004 в 00:11)
 

Ага все получилось.
Только вот меня заинтересовал вот этот запрос
<?php
$sql_query
="SELECT forums.name_forum AS name_forum, COUNT(meseges.id_forum) AS total 
    FROM forums, meseges 
    WHERE meseges.id_forum=forums.id_forum 
    GROUP BY name"


Я его понял так, выбераем Name_forum из forums как name_forum и считаем кол. такогоже id_forum в meseges как total и все это дело выберается из таблиц forums и meseges где meseges.id_forum=forums.id_forum А вот для чего нужно GROUP BY name видемо имелось не name а name_forum я так и не понял

   
 
 автор: cheops   (13.11.2004 в 01:35)   письмо автору
 
   для: Sin   (12.11.2004 в 23:05)
 

Так как выборка производится из двух таблиц, БД не знает сколько записей вы хотите получить и выдаёт по максимуму кол-во записей в forums умноженное на количество записей в messages - декартово произведение. GROUP BY позволяет указать, что нам нужно лишь число записей равное числу записей в таблице forum (всю эту кучу записей группируем по именам форумов).

   
 
 автор: glsv (Дизайнер)   (12.11.2004 в 00:21)   письмо автору
 
   для: Sin   (11.11.2004 в 23:55)
 

А у Вас запрос неправильный.

select meseges.*  from meseges  WHERE meseges.id_forum=forums.id_forum


Для получения количества статей в форуме используйте следующий запрос

<?
$sql_query 
="SELECT count(*) FROM 'paragraphes' WHERE id_article=".$row['id_forum'];
?>

   
Rambler's Top100
вверх

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