2014-02-10 3 views
1

Как я могу исправить/упростить это и поместить его в массив?Как передать эту переменную и проверить, соответствует ли она?

Ссылка проходит: somelink.php ш = а (или б, в, г)

Хочу страницу (somelink.php), чтобы определить, если «ш» установлен, и если он установлен и совпадения var, включают указанную страницу.

<?php 
if(isset($_GET['w'])&&($GET['w'] == "a")){include("1.htm");} 
if(isset($_GET['w'])&&($GET['w'] == "b")){include("2.htm");} 
if(isset($_GET['w'])&&($GET['w'] == "c")){include("3.htm");} 
if(isset($_GET['w'])&&($GET['w'] == "d")){include("4.htm");} 
else{include("1.htm");} 
?> 
+0

В основном, это используется для динамического количества ссылок с «ш» переменная отличаясь для каждого (а, б, в, х, у, z и т.д.) и соответствующие на другую страницу (a.htm, b.htm, c.htm, x.htm, y.htm, z.htm и т. д.) в боковой панели навигации, чтобы сообщить странице контейнера о включении соответствующего содержимого. Прошу прощения, если я не понимаю смысла. Я дислексичен, и это только делает мою голову, но я стараюсь. – AdamRoper

+0

, если вы добираетесь до Z, я бы остановил этот подход и начал смотреть на CMS, используя db. Ваш текущий подход подходит для небольшого количества файлов, но отстой для большого количества –

+0

количество ссылок меньше 10, но может измениться. – AdamRoper

ответ

1

попробуйте использовать:

$w = $_GET['w']; 
if(isset($w)) { 
    switch(strtolower($w)) { 
     case "a": 
      include("1.htm"); 
     break; 
     case "b": 
      include("2.htm"); 
     break; 
     case "c": 
      include("3.htm"); 
     break; 
     case "d": 
      include("4.htm"); 
     break; 
     default: 
      include("not-found.htm"); 
     break; 
    } 
} 
+0

Это создаст 'Примечание: неопределенная переменная w', когда' w' не задано. – Sean

+1

Отредактировано, должно работать сейчас. Спасибо Sean –

+0

он работает .. вроде .. но только потянул по умолчанию (not-found.htm) каждый раз, а не какие-либо другие ссылки. несмотря на переменную в URI. (page.htm? w = a) – AdamRoper

1

Используйте переключатель заявление:

if(isset($_GET['w'])) 
{ 
    switch($_GET['w']) 
    { 
     case 'a': include("1.html"); break; 
     case 'b': include("2.html"); break; 
     case 'c': include("3.html"); break; 
     case 'd': include("4.html"); break; 
     default:  include("1.html"); break; 
    } 
} else { 
    include("1.html"); 
} 
+0

Отлично! Спасибо! Я предполагаю, что мне нужно будет также отключать переменную каждый раз? – AdamRoper

+0

Не нужно ничего не делать :) Это зависит от вас, делаете вы или нет. –

+1

@AdamRoper какой var вы хотите отменить? и почему? –

1

как о простом массиве

$x=array('a'=>'1.html','b'=>'2.html'); 

затем

include $x[$GET['w']]; 
+1

Это не сработает, если 'w' не задано, или если значение' w' не находится в массиве. – Sean

+0

yup Я знаю, это не полный ответ, только мой предпочтительный подход –

0

Вы можете сделать несколько вещей, давайте взглянем на некоторые из них.

<?php 
$webpage = ''; 
if(isset($_GET['w'])) 
    $webpage = strtolower($_GET['w']); 

switch($webpage) 
{ 
    case 'b': 
    include '2.html'; 
    break; 
    case 'c': 
    include '3.html'; 
    break; 
    case 'd': 
    include '4.html'; 
    break; 
    default: 
    include '1.html'; 
    break; 
} 

Или мы могли бы использовать массивы

<?php 
$webpage = ''; 
if(isset($_GET['w'])) 
    $webpage = strtolower($_GET['w']); 

$included_pages = array(
    'a' => '1.htm', 
    'b' => '2.htm', 
    'c' => '3.htm', 
    'd' => '4.htm', 
); 

// Check inside our array 
if(array_key_exists($webpage, $includes)) 
{ 
    include $included_pages[$webpage]; 
} 
else 
{ 
    // Couldn't find the site 
    include '1.htm'; 
} 
1

Как это:

if(isset($_GET['w'])){ 
    switch($_GET['w']){ 
     case "a": 
      include("1.htm"); 
     break; 
     case "b": 
      include("2.htm"); 
     break; 
     case "c": 
      include("3.htm"); 
     break; 
     case "d": 
      include("4.htm"); 
     break; 
    } 
} 

Но я бы не сделать это таким образом. Я бы сделал так, чтобы имя страницы соответствовало значению, полученному из переменной $ _GET. Таким образом, вы можете сделать что-то подобное.

if(!empty($_GET['w'])){ 
    include($_GET['w'] . ".htm"); 
} 

Конечно, вы хотите немного фильтрования $ _GET вар тоже, чтобы убедиться, что не получит то, что вы не хотите есть. Может быть, так.

$acceptable_values = array("some","acceptable","values"); 
if(!empty($_GET['w']) && in_array($_GET['w'],$acceptable_values)){ 
    include($_GET['w'] . ".htm"); 
} 

Я уверен, что вы знаете, передавая переменные непосредственно в включает заявление или запросы к базе данных является СТРАШНОЙ идеей. См. Здесь, почему в этом случае.

http://websec.wordpress.com/2010/02/22/exploiting-php-file-inclusion-overview/

+1

, если вы собираетесь сделать $ приемлемый_values ​​массив, вы можете также отобразить его напрямую. Я еще один отправил. –

+0

Да, но с массивом допустимых значений он не позволит кому-либо использовать уязвимости, присутствующие в функции включения PHP. –

+1

Я не понимаю, мои списки идей также разрешают файлы, но, похоже, проще управлять –

Смежные вопросы