Убрать GET из URL

1 234
S
На сайте с 30.09.2016
Offline
469
#31
barabash:
Удалил article.php и обрабатываю все в index.php

Так не делается. "Все" в index.php обрабатывать не следует. Следует подключать нужные для обработки файлы. Индексный файл должен быть максимально лаконичным, а вся "механика" переносится в отдельные файлы.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
barabash
На сайте с 30.04.2011
Offline
71
#32

Решил свою проблему таким образом:

Фал index.php


<?
$dmp= explode("/", $_SERVER['REQUEST_URI']); // разбиваем с разделителем "/"
$link = explode(".", $dmp[2]); // Разбиваю с разделителем "." что бы отделить "html", В переменную попадает только часть котрая отвечает за название страницы.
?>
<?php if(!$link[0]){ //если пустая переменная $link[0] - выводим вест список статей
include "articles.php";
} elseif ($link[0]){ //если в переменной $link[0] что-то есть - выводим шаблон полной статьи
include "article.php";
}?>

Файл article.php:


<?php
include "adm/connect.php";
$sql = mysql_query("SELECT * FROM blog WHERE seo_link = '".$link[0]."'") or die(mysql_error()); // Выполняю азвпрос к базе где WHERE = переменной (в столбце "seo_link" хранится seo url ля каждой статьи)
$newsData = array();
$result = mysql_fetch_array($sql, MYSQL_ASSOC);
?>
<? if($link[0] == $result['seo_link']){ //Если данные в переменной $link[0] совпадают с данными из запроса - значит статья существует - выводим ее?>
<article>
<p><?=$result['title'];?></p>
<p><?=$result['keywords'];?></p>
<p><?=$result['description'];?></p>
<p><?=$result['seo_link'];?></p>
<p><a href="<?=$result['seo_link'];?>.html"><?=$result['title_h1'];?></a></p>
<p><?=$result['text'];?></p>
<p><?=$result['date'];?></p>
<p><?=$result['autor'];?></p>
<p><?=$result['raiting'];?></p>
</article>
<?php } else { // Если в запросе не содержится данных - выводим 404 ошибку
header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");
header("Location: 404.html");
} ?>

Всем большое спасибо за советы, я изначально не правильно понял принцип действия формирования ЧПУ

tommy-gung
На сайте с 22.11.2006
Offline
300
#33


<?php if(!$link[0]){ //если пустая переменная $link[0] - выводим вест список статей
include "articles.php";
} elseif ($link[0]){ //если в переменной $link[0] что-то есть - выводим шаблон полной статьи
include "article.php";
}?>

ох и жесть..

Здесь не могла быть ваша реклама
E
На сайте с 22.06.2016
Offline
45
#34

Это еще мелочи, вы дальше посмотрите.

barabash, чередовать взаимодействие с БД и вывод разметки не следует. В народе это называется быдлокодингом. Профессионалы так не делают. В концовке вашего кода вывод заголовков тоже работать не будет, т.к. заголовки отправляются клиенту до начала вывода содержимого страницы. И вы уж определитесь, 404-ый статус вы выставляете или делаете перенаправление. Вместо последнего заголовка можете написать такой код:


readfile($_SERVER['DOCUMENT_ROOT'].'/404.html');
exit;

Функции с приставкой mysql официально считаются устаревшими. Результат большинства подобных функций нужно проверять. Вдруг у вас в результате выполнения запроса не было получено ни одной строки. Все входящие данные, включая элементы пути нужно строго фильтровать, прежде чем их использовать в запросах.

В $_SERVER['REQUEST_URI'] передается полный адрес, а вы судя по всему пытаетесь сделать разбор пути. Лучше отделите сначала строку параметров.

barabash
На сайте с 30.04.2011
Offline
71
#35

На звание профессионала в php я не претендую, во всяком случае пока только начал. Благодарю всех за помощь, тему можно закрывать.

E
На сайте с 22.06.2016
Offline
45
#36

Вот эта проверка бессмысленная:

if($link[0] == $result['seo_link'])

Вы еще в запросе попросили выдать вам запись с нужным значением $link[0]. Если соответствующее поле содержит уникальные значения, у вас в результате будет получена либо одна интересующая вас запись, либо ни одной. Замените подобную проверку на такую:

if ($result)

Можно даже прямо в условии написать так:

if ($result=mysqli_fetch_assoc($sql))

Семантика имен переменных немного странная. Чаще $sql обозначают текст запроса, а не его результат. Результат же обозначают $result. А то что вы получили в последней функции, это лишь одна запись из результата запроса, поэтому и название следовало бы подобрать подходящее.

---------- Добавлено 28.10.2016 в 15:46 ----------

barabash:
На звание профессионала в php я не претендую...
Это понятно, но в Web-программировании так делать не принято. Если с самого начала так будете писать, потом будет труднее переучиваться. Учитесь все с самого начала делать правильно. Всего хорошего.
S
На сайте с 30.09.2016
Offline
469
#37
barabash:
тему можно закрывать.

Да зачем же? У нас впереди ещё куча работы: надо сделать шаблон, меню, ещё что-то может понадобиться.

1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий