Benim kod daha iyi bir yapıya ihtiyacımız var

4 Cevap php

Bu benim ön denetleyicisi

$pages = array("matches", "boards", "search", "articles", "interviews", "userlist", "teams", "servers", "awards", "gallery", "qids");

if (!$_SERVER['QUERY_STRING']) include('home_en.php');
elseif (isset($_GET['matchid'])) include('matchid.php');
elseif (isset($_GET['boardid'])) include('boardid.php');
elseif (isset($_GET['articleid'])) include('articleid.php');
elseif (isset($_GET['interviewid'])) include('interviewid.php');
elseif (isset($_GET['userid'])) include('profi.php');
elseif (isset($_GET['teamid'])) include('teamid.php');
elseif (isset($_GET['serverid'])) include('serverid.php');
elseif (isset($_GET['awardid'])) include('awardid.php');
elseif (isset($_GET['galleryid'])) include('galleryid.php');
elseif (isset($_GET['threadid'])) include('threadid.php');
elseif (isset($_GET['blogid'])) include('blogid.php');
..

elseif (in_array($_GET['content'], $pages)) include($_GET['content']);

else echo "File not found =(";

ben nedense çok diziye tanımlayıcıları ekleyebilirsiniz? ama index.php sayfalarını istediğiniz matchid = 9438 ve düzenli sayfaları için:? index.php içeriği = maçlar

Gerçekten bazı fikirler aprricate olur

teşekkürler!

4 Cevap

Benim Öneri, My Comment Gönderen şudur:

O id ne tür kontrol etmek için, iki $_GET parametreleri kullanılmalıdır. Bir tipi (maç, ödül, sunucu, vb), bir kimliği olduğunu. Eğer 500 farklı $_GET parametreleri, 2 sadece değer için kontrol etmek zorunda değilsiniz bu şekilde. Çok daha standardize.

İkinci olarak, kimlik gösteren 1 dosya altında hepsini yapmak istiyorum.

Daha az kod değil yazma ruhla, o Bu verilen tabii ki $ _GET ['type'] vs maç, ödül, takım, eğer dayalı kayıt kapmak için SQL deyimini değiştirmek nispeten kolay olurdu muhtemelen aynı bakacağız. Onlar, bunun yerine her türlü kapmak için yeni bir kod yazma, yerine farklı görüntülemek için kod yazmak istemiyorsanız

All Variables in this code much be validated/sanatized beforehand.

// First Get the Type
$type = $_GET['type'];
// Then the ID
$id = $_GET['id'];

// SANITIZE YOUR DATA. Replace this with your sanitization.
die("SANITIZE YOUR DATA HERE");

// Get Data Here
$sql = "SELECT * FROM table WHERE type=".$type." AND id=".$id;
$data = mysql_query($sql);

// Next, Include a template based on the data.

// Global the variable so it can be used in the file
Global $data;

include($type."-template.php");

I agree with Tom -- you should look into using a framework such as Zend, Cake, Symfony, Kohana, CodeIgniter, ez-Components, or Seagull. The advantage of using a framework is that they have already solved a lot of issues for you, including: 1) How to structure your code 2) How to interpret pretty urls (i.e. /x/1/y/2 instead of ?x=1&y=2) 3) Where to put certain types of code (html, php, configs, etc) 4) How to fix something you can't figure out (because these frameworks have communities) and much much more...

Yani, belki bir çerçeve (bir şey öğrenmek için sizi gerektirir) kullanarak tüm yükünü istemiyorum söyleniyor. Bu durumda, ben Rasmus Lerdorf en "No Framework PHP Framework" öneriyor. Rasmus PHP yaratıcısı, böylece o onun kendi bilir biliyorum.

Son olarak, gerçek soruyu cevaplamak için, burada ben bunu yapacağını nasıl:

could i somehow add the identifiers to the array too? i want the pages as index.php?matchid=9438 and for regular pages: index.php?content=matches

Sure, but yes, as Chacha102 said, you will need 2 parameters: $area (page) and $id. Example: index.php?area=articles&id=2345

Then you can re-organize & simplify your 'front controller' this way: /index.php /areas/articles.php /areas/boards.php etc. Instead of naming the templates articleid.php, just call it articles.php -- this way your area name also tells you which template to use.

$valid_areas = array("matches", "boards", "search", "articles", 
                     "interviews", "userlist", "teams", "servers", 
                     "awards", "gallery", "qids");

$area = strtolower(trim($_REQUEST['area'])); //if you are not posting any forms, use $_GET instead
$id   = (int)$_REQUEST['id']; //if you are not posting any forms, use $_GET instead

if(!$id)
{
   include('home_en.php');
}

if(!in_array($area), $valid_areas))
{
   echo 'Sorry, the area you have requested does not exist: '.$area; 
   exit();
}
else
{
   $template = '/templates/'.$area.'.php';

   if(!file_exists($template))
   {
      echo 'Sorry, the file you have requested does not exist: '.$area.' '.$id);
   }
   else
   {
      include($template);
   }
}

Bu devam edin ve böyle Zend gibi bir çerçeve kullanmak yardımcı olabilir:

http://framework.zend.com/

Bunu yapabilirdi:

<?php
    $controllerDefault = 'home';

    function sanitize($str)
    {
    	return str_replace(array('.', '/', '\\'), '', $str);
    }
    //Prevent of Remote File Inclusion
    $controller = sanitize($_GET['controller']);
    $id = intval($_GET['id']);

    if (empty($controller))
    {
    	$controller = $controllerDefault;
    }

    if (!empty($id))
    {
    	$controller .= 'id';
    }

    $controllerFile = $controller . '.php';

    if (!file_exists($controllerFile) 
           || $controller == 'index') //for not recursive index.php include :)
    {
    	exit('Controller "'.$controllerFile.'" not exists');
    }
    include($controllerFile);

?>

Bu kodu kullanarak gibi uygulamayı kullanabilirsiniz:

http://yoursite.com/index.php //include('home.php')
http://yoursite.com/index.php?id=285230 //include('homeid.php')
http://yoursite.com/index.php?controller=matches //include('matches.php')
http://yoursite.com/index.php?controller=matches&id=28410 //include('matchesid.php')
http://yoursite.com/index.php?controller=notexists //ERROR! Controller "notexists" not exists
http://yoursite.com/index.php?controller=../../etc/passwd //ERROR! Controller "etcpasswd" not exists

Ben bunu gibi umut

PD: kodu test ettik, ama benim fikrim yakalamak umut değil