Помогите, не могу понять, как это делается. есть news.php PHP: <?php function news(){ echo "тут новости"; } ?> есть index.php PHP: <?php include("connect.php"); $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1"); $row = mysql_fetch_array($query); if ($row["close"] == 1) {$page = "Извините, портал временно закрыт";} else {header("Location: index.php?do=news");die();} echo $page; ?> Что нужно дописать в index.php, что бы можно было переходить по ссылкам ? www.test1.ru/index.php?do=news www.test1.ru/index.php?do=content www.test1.ru/index.php?do=comment и т.п. Что нужно прописать. Я знаю, что это должно передоваться гетом, но как тута его засунуть и как сказать, что функция лежит именно в файле новости!
Делай так: PHP: <?php include("connect.php"); $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1"); $row = mysql_fetch_array($query); if ($row["close"] == 1) {$page = "Извините, портал временно закрыт";} else {header("Location: index.php?do=news");die();} if (isset($_GET['do']) && $_GET['do'] = 'news'){ include_once('news.php'); news(); } ?>
Код (Text): 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 =(
Попытался немного по другому сделать, но вылазит ошибка Код (Text): 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 чёт ошибка какая-то PHP: <?php include("connect.php"); $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1"); $row = mysql_fetch_array($query); if ($row["close"] == 1) {$page = "Извините, портал временно закрыт";} else { header("Location: index.php?do=news"); } if (isset($_GET["do"])) { if ($_GET["do"] == "news"){ include('news.php'); news();} elseif ($_GET["do"] == "comment"){ include('news.php'); comment();} } else { error_page();} function error_page(){ echo "чёт ошибка какая-то"; } ?>
Или так: PHP: <?php include("connect.php"); $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1"); $row = mysql_fetch_array($query); if ($row["close"] == 1) die("Извините, портал временно закрыт"); define('DS', DIRECTORY_SEPARATOR); $path = dirname(__FILE__).DS.'includes'.DS; if (isset($_GET['do'])) { if (!preg_match("/^[a-zA-Z]+$/", $_GET['do'])) die("Че хакер?"); if (!file_exists($path.$_GET['do'].'.php')) die("Нет такого модуля ".$_GET['do']); include_once($path.$_GET['do'].'.php'); if (function_exists($_GET['do'])) { call_user_func($_GET['do']); } else { die("Функция ".$_GET['do']." не найдена"); } } else { header("Location: index.php?do=news"); die(); } ?>
Попробуй в самое начало поставить вот этот код: PHP: <?php if (headers_sent()) { die('PHP отправил какието хедеры без моего ведома мне нужно посмотреть файл php.ini'); }
Спасибо за помощь. Я взял некоторые советы. PHP: <?php include("connect.php"); $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1"); $row = mysql_fetch_array($query); if ($row["close"] == 1) {echo "Извините, портал временно закрыт";} else { header("Location: index.php?do=news"); } if (isset($_GET["do"])) { if ($_GET["do"] == "news"){ include('news.php'); news();} elseif ($_GET["do"] == "comment"){ include('news.php'); comment();} } ?> этот код мне больше нравится, но не могу понять, почему он не редеректит на index.php?do=news ? Код (Text): 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 , то пишет, что тут новости, но вверхё ошибка та же!
просто в файле php.ini стоит какаято настройка которая перед запускам скрипта посылает хедеры. В примере то я тебе написал, используется папка includes, можешь изменить ее на свою. Создать там необходимые модули и будет тебе счастье! ВНИМАНИЕ!!! В каждом модуле должна быть функция с таким же именем что и модуль только без ‘.php’ или просто удали вот это из моего примера: PHP: <?php if (function_exists($_GET['do'])) { call_user_func($_GET['do']); } else { die("Функция ".$_GET['do']." не найдена"); }
А что поменять в php.ini? Я поставил в начало файла PHP: if (headers_sent()) { die('PHP отправил какието хедеры без моего ведома мне нужно посмотреть файл php.ini'); } и появилось 'PHP отправил какието хедеры без моего ведома мне нужно посмотреть файл php.ini'
просто этот код менее функционален, чем мой второй пример. Если тебе надо добавить какой-то новый модуль в систему придется каждый раз изменять и index.php
просто мне это и нужно, чтобы я сам добавлял каждый модель, я просто учусь и хочу пока научиться писать так, с простого... ну а потом уже и более сложные вещи пробовать. Я выше ещё пост написал.
Caman Эта ошибка весьма распространенная. У Вас начался вывод до отправки заголовков. Все заголовки должны быть отправлены до начала какого-либо вывода.
почитал инфу http://www.phpfaq.ru/headers и понял, что у меня перед <?php стоял пробел. Почистил кеш, убрал пробел, запустил. Теперь пытается с главной сделать редирект на index.php?do=news , я вижу, что пытается, постоянно то пишет, что узел найден, то линк index.php?do=news И ничего не происходит, как буд-то зациклился. Где теперь может быть косяк?
Надо проверять адрес. Попробуйте сделать так: PHP: header("Location: http://{$_SERVER['HTTP_HOST']}/index.php?do=news");die; В принципе, если index.php - главная страница, то можно написать так: PHP: header("Location: http://{$_SERVER['HTTP_HOST']}/?do=news");die;
PHP: <?php if (headers_sent()) { die('PHP отправил какието хедеры без моего ведома мне нужно посмотреть файл php.ini'); exit(); } include("connect.php"); $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1"); $row = mysql_fetch_array($query); if ($row["close"] == 1) {echo "Извините, портал временно закрыт.";} else {header( "Location: index.php?do=news"); } if (isset($_GET["do"])) { if ($_GET["do"] == "news"){ include('news.php'); news();} elseif ($_GET["do"] == "comment"){ include('news.php'); comment();} } else {echo "Извините, возникла ошибка.";} ?> пробовал и так и так, по разному, всё равно долго ищет... очень долго! Что не так? =(
чек вис PHP: <?php include("connect.php"); if (isset($_GET["do"])) { if ($_GET["do"] == "news"){ include('news.php'); news(); } elseif ($_GET["do"] == "comment"){ include('news.php'); comment(); } } else { $query = mysql_query("SELECT * FROM connect WHERE id='1' LIMIT 1"); $row = mysql_fetch_array($query); if ($row["close"] == 1) { echo "Извините, портал временно закрыт."; } else { header( "Location: /index.php?do=news"); die; } } ?>
PHP: <?php if ($row["close"] == 1) {echo "Извините, портал временно закрыт.";} else {header( "Location: .index.php?do=news"); } ?> по этому условию будет вечный редирект
вместо echo лучше использовать die PHP: <?php if ($row["close"] == 1){ die( "Извините, портал временно закрыт." ) } else { header( "Location: /index.php?do=news"); die(); } ИМХО Лучше сначала проверить выключен сайт или нет, а потом обрабатывать $_GET. Чтобы лишний раз не гонять систему.
Спасибо всем большое, ещё раз! Выручили и дали много знаний =) Теперь вот такой вопрос пришёл. Нужно отредактировать новость через $id новости PHP: <?php function editnews() { $query = mysql_query("SELECT * FROM news ORDER BY id DESC"); echo "<table width=\"50%\">"; $count = 1; while ($row = mysql_fetch_array($query)) { if ($count == 1) { echo "<tr><td>".$row["data"]." <a href=\"#\">".$row["title"]."</a></td></tr>\n"; $count = 2; } else { echo "<tr><td>".$row["data"]." <a href=\"#\">".$row["title"]."</a></td></tr>\n"; $count = 1; } } if (mysql_num_rows($query) == 0) { echo "<tr><td>нет новостей.</td></tr>"; } echo "</table>"; } как передать id какой-нить новости? есть вариант передать эту переменную в функцию editnews_editor PHP: <a href=index.php?do=editnews_editor_".$row["id"]." Но при переходе ничего не отображается. В индексе пытался прописать PHP: <?php elseif ($_GET["do"] == "editnews_editor"){ include('admin.php'); editnews_editor($id);} Всё глухо! помогите!
Задам вопрос по другому! есть ссылка PHP: editnews.php?do=$id перейду в функцию editnews... а дальше, как там обработать, чтобы функция поняла, что я именно с $idработаю... так? PHP: $query = mysql_query("SELECT * FROM news WHERE id=$id"); но в этом случаем, мне кажется, функция не поймёт, что я ей хочу сказать... значит както из запроса GET нужно вытянуть последнююю цифру? Подскажите, плизззз =)
ну и передай функции в одном из параметров $_GET['id'], а в функции приводишь к int и в запрос вставляешь. В чём проблема-то?