За последние 24 часа нас посетили 19793 программиста и 1694 робота. Сейчас ищут 1645 программистов ...

Странице в виде index?do=news

Тема в разделе "Вопросы от блондинок", создана пользователем Caman, 16 май 2007.

Статус темы:
Закрыта.
  1. Caman

    Caman Активный пользователь

    С нами с:
    16 май 2007
    Сообщения:
    46
    Симпатии:
    0
    Помогите, не могу понять, как это делается.
    есть news.php

    PHP:
    1.  
    2. <?php
    3. function news(){
    4. echo "тут новости";
    5. }
    6. ?>
    7.  
    есть index.php

    PHP:
    1.  
    2. <?php
    3. include("connect.php");
    4. $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1");
    5. $row = mysql_fetch_array($query);
    6. if ($row["close"] == 1) {$page = "Извините, портал временно закрыт";}  
    7. else {header("Location: index.php?do=news");die();}
    8. echo $page;
    9. ?>
    10.  

    Что нужно дописать в index.php, что бы можно было переходить по ссылкам ?
    www.test1.ru/index.php?do=news
    www.test1.ru/index.php?do=content
    www.test1.ru/index.php?do=comment

    и т.п.
    Что нужно прописать. Я знаю, что это должно передоваться гетом, но как тута его засунуть и как сказать, что функция лежит именно в файле новости!
     
  2. oligarx

    oligarx Активный пользователь

    С нами с:
    23 янв 2007
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Украина Львов
    Делай так:
    PHP:
    1. <?php
    2. include("connect.php");
    3. $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1");
    4. $row = mysql_fetch_array($query);
    5. if ($row["close"] == 1) {$page = "Извините, портал временно закрыт";}
    6. else {header("Location: index.php?do=news");die();}
    7.  
    8. if (isset($_GET['do']) && $_GET['do'] = 'news'){
    9.   include_once('news.php');
    10.   news();
    11. }
    12. ?>
     
  3. Caman

    Caman Активный пользователь

    С нами с:
    16 май 2007
    Сообщения:
    46
    Симпатии:
    0
    Код (Text):
    1.  
    2. Warning: Cannot modify header information - headers already sent by (output started at z:\home\test2.ru\www\index.php:1) in z:\home\test2.ru\www\index.php on line 6
    =(
     
  4. Caman

    Caman Активный пользователь

    С нами с:
    16 май 2007
    Сообщения:
    46
    Симпатии:
    0
    Попытался немного по другому сделать, но вылазит ошибка

    Код (Text):
    1. Warning: Cannot modify header information - headers already sent by (output started at z:\home\test2.ru\www\index.php:1) in z:\home\test2.ru\www\index.php on line 9
    2. чёт ошибка какая-то
    PHP:
    1.  
    2.  <?php
    3.  include("connect.php");
    4.  $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1");
    5.  $row = mysql_fetch_array($query);
    6.  
    7.  if ($row["close"] == 1) {$page = "Извините, портал временно закрыт";}
    8.  else { header("Location: index.php?do=news"); }
    9.  
    10. if (isset($_GET["do"])) {
    11.         if ($_GET["do"] == "news"){ include('news.php'); news();}
    12.   elseif ($_GET["do"] == "comment"){ include('news.php'); comment();}
    13.     } else { error_page();}
    14.    
    15. function error_page(){
    16. echo "чёт ошибка какая-то";
    17. }
    18.  ?>
    19.  
     
  5. oligarx

    oligarx Активный пользователь

    С нами с:
    23 янв 2007
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Украина Львов
    Или так:
    PHP:
    1. <?php
    2. include("connect.php");
    3. $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1");
    4. $row = mysql_fetch_array($query);
    5. if ($row["close"] == 1) die("Извините, портал временно закрыт");
    6.  
    7. define('DS', DIRECTORY_SEPARATOR);
    8. $path = dirname(__FILE__).DS.'includes'.DS;
    9.  
    10. if (isset($_GET['do'])) {
    11.   if (!preg_match("/^[a-zA-Z]+$/", $_GET['do'])) die("Че хакер?");
    12.   if (!file_exists($path.$_GET['do'].'.php')) die("Нет такого модуля ".$_GET['do']);
    13.  
    14.   include_once($path.$_GET['do'].'.php');
    15.   if (function_exists($_GET['do'])) {
    16.     call_user_func($_GET['do']);
    17.   } else {
    18.     die("Функция ".$_GET['do']." не найдена");
    19.   }
    20. } else {
    21.   header("Location: index.php?do=news");
    22.   die();
    23. }
    24. ?>
     
  6. oligarx

    oligarx Активный пользователь

    С нами с:
    23 янв 2007
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Украина Львов
    Попробуй в самое начало поставить вот этот код:
    PHP:
    1. <?php
    2. if (headers_sent()) {
    3.   die('PHP отправил какието хедеры без моего ведома мне нужно посмотреть файл php.ini');
    4. }
     
  7. Caman

    Caman Активный пользователь

    С нами с:
    16 май 2007
    Сообщения:
    46
    Симпатии:
    0
    Нет такого модуля news =(
     
  8. oligarx

    oligarx Активный пользователь

    С нами с:
    23 янв 2007
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Украина Львов
    Обрати внимание на $path (строка 8 )– это папка где будут лежать все твои модули
     
  9. Caman

    Caman Активный пользователь

    С нами с:
    16 май 2007
    Сообщения:
    46
    Симпатии:
    0
    Спасибо за помощь. Я взял некоторые советы.
    PHP:
    1.  
    2.  <?php
    3.  include("connect.php");
    4.  $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1");
    5.  $row = mysql_fetch_array($query);
    6.  
    7.  if ($row["close"] == 1) {echo "Извините, портал временно закрыт";}
    8.  else { header("Location: index.php?do=news"); }
    9.  
    10. if (isset($_GET["do"])) {
    11.         if ($_GET["do"] == "news"){ include('news.php'); news();}
    12.   elseif ($_GET["do"] == "comment"){ include('news.php'); comment();}
    13.     }
    14. ?>
    15.  
    этот код мне больше нравится, но не могу понять, почему он не редеректит на index.php?do=news ?

    Код (Text):
    1. Warning: Cannot modify header information - headers already sent by (output started at z:\home\test2.ru\www\index.php:1) in z:\home\test2.ru\www\index.php on line 7
    если напрямую набрать index.php?do=news , то пишет, что тут новости, но вверхё ошибка та же!
     
  10. oligarx

    oligarx Активный пользователь

    С нами с:
    23 янв 2007
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Украина Львов
    просто в файле php.ini стоит какаято настройка которая перед запускам скрипта посылает хедеры.

    В примере то я тебе написал, используется папка includes, можешь изменить ее на свою. Создать там необходимые модули и будет тебе счастье!
    ВНИМАНИЕ!!! В каждом модуле должна быть функция с таким же именем что и модуль только без ‘.php’ или просто удали вот это из моего примера:
    PHP:
    1. <?php
    2. if (function_exists($_GET['do'])) {
    3.   call_user_func($_GET['do']);
    4. } else {
    5.   die("Функция ".$_GET['do']." не найдена");
    6. }
    7.  
     
  11. Caman

    Caman Активный пользователь

    С нами с:
    16 май 2007
    Сообщения:
    46
    Симпатии:
    0
    А что поменять в php.ini?
    Я поставил в начало файла
    PHP:
    1.  if (headers_sent()) {
    2.    die('PHP отправил какието хедеры без моего ведома мне нужно посмотреть файл php.ini');
    3.  }
    4.  
    и появилось 'PHP отправил какието хедеры без моего ведома мне нужно посмотреть файл php.ini'
     
  12. oligarx

    oligarx Активный пользователь

    С нами с:
    23 янв 2007
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Украина Львов
    просто этот код менее функционален, чем мой второй пример. Если тебе надо добавить какой-то новый модуль в систему придется каждый раз изменять и index.php
     
  13. Caman

    Caman Активный пользователь

    С нами с:
    16 май 2007
    Сообщения:
    46
    Симпатии:
    0
    просто мне это и нужно, чтобы я сам добавлял каждый модель, я просто учусь и хочу пока научиться писать так, с простого... ну а потом уже и более сложные вещи пробовать. Я выше ещё пост написал.
     
  14. oligarx

    oligarx Активный пользователь

    С нами с:
    23 янв 2007
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Украина Львов
    Поработай поиском! - помогает.
     
  15. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Caman
    Эта ошибка весьма распространенная.
    У Вас начался вывод до отправки заголовков.
    Все заголовки должны быть отправлены до начала какого-либо вывода.
     
  16. Caman

    Caman Активный пользователь

    С нами с:
    16 май 2007
    Сообщения:
    46
    Симпатии:
    0
    почитал инфу http://www.phpfaq.ru/headers и понял, что у меня перед <?php стоял пробел. Почистил кеш, убрал пробел, запустил. Теперь пытается с главной сделать редирект на index.php?do=news , я вижу, что пытается, постоянно то пишет, что узел найден, то линк index.php?do=news И ничего не происходит, как буд-то зациклился. Где теперь может быть косяк?
     
  17. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Надо проверять адрес.
    Попробуйте сделать так:
    PHP:
    1. header("Location: http://{$_SERVER['HTTP_HOST']}/index.php?do=news");die;
    В принципе, если index.php - главная страница, то можно написать так:
    PHP:
    1. header("Location: http://{$_SERVER['HTTP_HOST']}/?do=news");die;
     
  18. Caman

    Caman Активный пользователь

    С нами с:
    16 май 2007
    Сообщения:
    46
    Симпатии:
    0
    PHP:
    1.  
    2. <?php
    3.  if (headers_sent()) {
    4.   die('PHP отправил какието хедеры без моего ведома мне нужно посмотреть файл php.ini');
    5.   exit();
    6.  }
    7.  include("connect.php");
    8.  $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1");
    9.  $row = mysql_fetch_array($query);
    10.  
    11.  if ($row["close"] == 1) {echo "Извините, портал временно закрыт.";}
    12.  else {header( "Location: index.php?do=news"); }
    13.  
    14. if (isset($_GET["do"])) {
    15.         if ($_GET["do"] == "news"){ include('news.php'); news();}
    16.     elseif ($_GET["do"] == "comment"){ include('news.php'); comment();}
    17.     } else {echo "Извините, возникла ошибка.";}
    18. ?>
    19.  
    пробовал и так и так, по разному, всё равно долго ищет... очень долго! Что не так? =(
     
  19. jj

    jj Активный пользователь

    С нами с:
    3 мар 2007
    Сообщения:
    26
    Симпатии:
    0
    чек вис

    PHP:
    1.  
    2. <?php
    3.  include("connect.php");
    4.  
    5. if (isset($_GET["do"])) {
    6.         if ($_GET["do"] == "news"){
    7.             include('news.php'); news();
    8.         }
    9.     elseif ($_GET["do"] == "comment"){
    10.                 include('news.php'); comment();
    11.         }
    12.  }
    13.  else {
    14.   $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1");
    15.   $row = mysql_fetch_array($query);
    16.  
    17.    if ($row["close"] == 1)  {
    18.       echo "Извините, портал временно закрыт.";
    19.    }
    20.     else {
    21.            header( "Location: /index.php?do=news");
    22.            die;
    23.          }
    24. }
    25.  
    26. ?>
    27.  
     
  20. Caman

    Caman Активный пользователь

    С нами с:
    16 май 2007
    Сообщения:
    46
    Симпатии:
    0
    заработало!!! Спасибо огромное, если вас не затруднит, скажите, в чём была моя ошибка?
     
  21. jj

    jj Активный пользователь

    С нами с:
    3 мар 2007
    Сообщения:
    26
    Симпатии:
    0
    PHP:
    1.  
    2. <?php
    3.  if ($row["close"] == 1) {echo "Извините, портал временно закрыт.";}
    4.    else {header( "Location: .index.php?do=news"); }
    5. ?>
    6.  
    по этому условию будет вечный редирект
     
  22. oligarx

    oligarx Активный пользователь

    С нами с:
    23 янв 2007
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Украина Львов
    вместо echo лучше использовать die
    PHP:
    1. <?php
    2. if ($row["close"] == 1){
    3.   die( "Извините, портал временно закрыт." )
    4. } else {
    5.   header( "Location: /index.php?do=news");
    6.   die();
    7. }
    ИМХО
    Лучше сначала проверить выключен сайт или нет, а потом обрабатывать $_GET. Чтобы лишний раз не гонять систему.
     
  23. Caman

    Caman Активный пользователь

    С нами с:
    16 май 2007
    Сообщения:
    46
    Симпатии:
    0
    Спасибо всем большое, ещё раз! Выручили и дали много знаний =)
    Теперь вот такой вопрос пришёл. Нужно отредактировать новость через $id новости

    PHP:
    1.  
    2. <?php
    3. function editnews() {
    4. $query = mysql_query("SELECT * FROM news ORDER BY id DESC");
    5.     echo "<table width=\"50%\">";
    6.     $count = 1;
    7.     while ($row = mysql_fetch_array($query)) {
    8.         if ($count == 1) { echo "<tr><td>".$row["data"]." <a href=\"#\">".$row["title"]."</a></td></tr>\n"; $count = 2; }
    9.         else { echo "<tr><td>".$row["data"]." <a href=\"#\">".$row["title"]."</a></td></tr>\n"; $count = 1; }
    10.     }
    11.     if (mysql_num_rows($query) == 0) { echo "<tr><td>нет новостей.</td></tr>"; }
    12.     echo "</table>";
    13. }
    14.  
    как передать id какой-нить новости? есть вариант передать эту переменную в функцию editnews_editor

    PHP:
    1. <a href=index.php?do=editnews_editor_".$row["id"]."
    Но при переходе ничего не отображается. В индексе пытался прописать

    PHP:
    1. <?php
    2. elseif ($_GET["do"] == "editnews_editor"){ include('admin.php'); editnews_editor($id);}
    Всё глухо! помогите!
     
  24. Caman

    Caman Активный пользователь

    С нами с:
    16 май 2007
    Сообщения:
    46
    Симпатии:
    0
    Задам вопрос по другому!
    есть ссылка
    PHP:
    1. editnews.php?do=$id
    перейду в функцию editnews... а дальше, как там обработать, чтобы функция поняла, что я именно с $idработаю...

    так?

    PHP:
    1. $query = mysql_query("SELECT * FROM news WHERE id=$id");
    но в этом случаем, мне кажется, функция не поймёт, что я ей хочу сказать... значит както из запроса GET нужно вытянуть последнююю цифру? Подскажите, плизззз =)
     
  25. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ну и передай функции в одном из параметров $_GET['id'], а в функции приводишь к int и в запрос вставляешь.
    В чём проблема-то?
     
Статус темы:
Закрыта.