Въпрос към знаещите програмисти

mvmrik

Well-Known Member
Понеже не разбирам много от PHP, знам някои дребни неща, та искам да ви питам дали мога да направя едно нещо.

Имам един файл news.php , в който има доста неща, но искам да вмъкна и новините вътре. Работата е там, че тоя файл е така направен и трябва да си седи там и да не се мести, а трябва да показва и различни новини.

Та идеята ми е ако си направя една папка с файлове 1.php, 2.php, 3.php и така нататък и всеки файл да е отделна новина. Това лесно, но тези новини трябва да се показват в news.php.

Мислех си за include ('news/1.php'); - така ще ми изкара първата новина със сигурност, но аз искам и в url адреса да е различен за всяка новина.

Може ли да се направи така, че като се въведе news.php?1 например да инклудва 1.php, ако се въведе горе в адреса news.php?2 да инклудва 2.php и т.н. Ако става така кажете, ако е нещо сложно няма да се занимавам сега а ще търся друг начин.
 
Това, дето искаш, ми се струва леко нелогично, но ето ти решението - слагаш в news.php един switch и си готов:

PHP:
<?php
    switch ($_GET['page']) {
        case 'novina1':
            include '1.php';
        break;
    
        case 'kakvoto-poiskash-zaglavie':
            include '2.php';
        break;

        case 'zaglavie-novina-3':
            include '3.php';
        break;

        case 'novina4':
            include '4.php';
        break;
    }
?>
После URL-то ти е www.example.com?page=zaglavie
 
От: Въпрос към знаещите програмисти

Да, точно това е което искам, ама като незнам как се прави :)

Само ме притеснява малко факта, че всяка новина ще трябва да я добавям в кода, това няма ли да забавя зареждането? Защото в началото ще е лесно, ама ако станат 1000 новините тогава какво правим? Не може ли например ако горе заглавието е 1 и да инклудва 1.php, да е нещо като запитване. Ако горе е 2, да инклудва 2.php и т.н.
 
Може:

PHP:
<?php
if(!empty($_GET['page'])){
  $page = intval($_GET['page']);
  if(file_exists($page.'.php')){
    include $page.'.php';
  }
}
?>

По принцип такова инклудване изобщо не е препоръчително да се прави, най-добре е с база да си го направиш както си трябва.
 
От: Въпрос към знаещите програмисти

ОК, мерси много. Сега го тествах и работи. :)
 
Може:

PHP:
<?php
if(!empty($_GET['page'])){
  $page = intval($_GET['page']);
  if(file_exists($page.'.php')){
    include $page.'.php';
  }
}
?>

което е изключително ГРЕШНО !!!
използвай is_file() !!!
За нецитираната част съм съгласен.
 
Предполагам, че ще споделиш със нас защо е чак пък толкова изключително грешно? Така си прочел в в уебтуриста?

btw писането с главни букви е признак на изключително лошо възпитание.
 
Предполагам, че ще споделиш със нас защо е чак пък толкова изключително грешно? Така си прочел в в уебтуриста?

btw писането с главни букви е признак на изключително лошо възпитание.

Предположих че няма да сте (не визирам само теб) толкова мързеливи и сами ще си погледнете документацията.Както и да е, да предположим че сте(не визирам само теб) я погледнали и не сте видели ОЧЕВИДНОТО.
Ето жокер:
PHP:
 Description
bool file_exists ( string $filename )

Checks whether a file or directory exists.

втори жокер:

Не съм го прочел в туриста. Въпреки че този сайт не го посещавам повече от година, все още има хора които го посещават и знаят много.
 
Тъй тъй, и според теб колко процента е шанса там да съществува например директорията 1.php ? Аз мисля, че някъде към минус безкрайност. И дори да допуснем, че я има какво ще се случи? Ще свърши света може би? И за това трябваше да се направиш на много знаещ и разбиращ? И да ми пишеш с фонтове 40 пиксела? Тука заприлича на детска градина дева, от къде се навъдихте толкова? Това, че си прочел описанието на 2-3 функции и знаеш да пишеш прости скриптове съвсем не те прави разбирач. Все пак евала, че знаеш къде се намира документацията на php, повечето и това не знаят.

Всъщност да не би приятелят ти да не ти е пуснал тази вечер и сега да се чудиш на кой да си го изкараш?

Първо си погледни колко ти е неграмотен първия пост и после ми поправяй грешките.
 
Тъй тъй, и според теб колко процента е шанса там да съществува например директорията 1.php ? Аз мисля, че някъде към минус безкрайност. И дори да допуснем, че я има какво ще се случи? Ще свърши света може би? И за това трябваше да се направиш на много знаещ и разбиращ? И да ми пишеш с фонтове 40 пиксела? Тука заприлича на детска градина дева, от къде се навъдихте толкова? Това, че си прочел описанието на 2-3 функции и знаеш да пишеш прости скриптове съвсем не те прави разбирач. Все пак евала, че знаеш къде се намира документацията на php, повечето и това не знаят.

Всъщност да не би приятелят ти да не ти е пуснал тази вечер и сега да се чудиш на кой да си го изкараш?

Първо си погледни колко ти е неграмотен първия пост и после ми поправяй грешките.

Защо да ползваме колани, след като шанса да умрем в катастрофа е 1/100 при 50 години каране....
 
Защо да ползваме колани, след като шанса да умрем в катастрофа е 1/100 при 50 години каране....

Браво, това ли измисли, след като забеляза, че не си съвсем прав? А можеш ли да сметнеш колко повече е шанса да умреш в катастрофа от шанса да си направиш там директория 1.php и да не я видиш после, когато тестваш (да ти напомня - той е -безкрайност). Сравнението ти е меко казано неуместно.

В конкретния случай е въпрос на лично предпочитание как ще се направи. Някои биха го направили дори и така:

PHP:
@ include intval($_GET['page']).'.php';

Всичко останало са празни приказки на човек, който явно е имал лош ден.
 
От: Re: Въпрос към знаещите програмисти

Може:

PHP:
<?php
if(!empty($_GET['page'])){
  $page = intval($_GET['page']);
  if(file_exists($page.'.php')){
    include $page.'.php';
  }
}
?>
По принцип такова инклудване изобщо не е препоръчително да се прави, най-добре е с база да си го направиш както си трябва.
Може да се защити с две функции.
Една за SQL команди:
PHP:
<?php  
function mysqlesc($input) { 
$input = str_ireplace('\'', '', $input); 
$input = str_ireplace('"', '', $input); 
$input = str_ireplace('UNION', '', $input); 
$input = str_ireplace('--', '', $input); 
$input = str_ireplace('/**/', '', $input); 
$input = str_ireplace('/*', '', $input); 
return $input; 
} 
?>
Друга за remote PHP includes:
PHP:
<?php
$page = $_GET['page']; 
if(preg_match('/http/i', $page) || preg_match('/ftp/i', $page)) 
{
 die("Not Today"); 
}
?>
...това примерно.
 
...това примерно.
Много важно допълнение, че иначе някой веднага ще те овика за нещо ... :):)

Ако ще е както mvmrik го искаше първоначално [0-9]+.php с intval мисля, че му е съвсем добре - intval('SELECT secret FROM table ...') . '.php' ще стане 0.php. Ако иска да си направи красиви seo url-и ще трябва нещо като твоя вариант. Само и проверка за локален файл трябва, за такива случаи: /news.php?page=../../../config/database_passwords например.

Както и да се направи ще е по-добре от switch и 1000 case-а вътре.
 

Горе