2009-08-08 5 views
2

Как вы можете передать переменную, такую ​​как ask_question, в URL-адрес, чтобы изменить внешний вид вашего index.php по заданным правилам?Передача данных по адресу

Я имею ссылку на мой index.php

<a href="index.php?ask_question">Ask question</a> 

который, однако, не работает, так как я не знаю, как вы можете обратиться к ASK_QUESTION -переменную в URL. Если бы я знал это, я мог бы прочитать его, а затем настроить свой index.php в соответствии с именем в URL-адресе.

Я мог бы также сделать следующую ссылку, но это заставит меня иметь много повторяющихся данных, таких как PHP-код для login -form.

<a href="ask_question.php">Ask question</a> 

Мой ask_question.php -форма

<form method="post" action="handlers/handler_question.php"> 
    <p>Title: 
     <input name="title" type="text" cols="92" /> 
    </p> 
    <p>Question: 
     <div id="wmd-container" class="resizable-textarea"> 
       <textarea id="input" class="textarea" tabindex="101" rows="15" cols="92" name="body" /></textarea>                      
     </div> 
    </p> 

    <p>Tags: 
     <input name="tags" type="text" cols="92" /> 
    </p> 

    <input type="submit" value="OK" /> 
</form> 
+2

Что касается дублирования данных, вы можете хранить вещи, как в форму авторизации в отдельном файле, а затем поместить их в любой file using include() –

+0

Спасибо за ответы! –

ответ

3
if(isset($_GET['ask_question')) { 
...do something... 

} 

еще лучше, так как $ _GET суперглобальный массив:

if(array_key_exists('ask_question',$_GET)) { 
    ...do something... 
} 

Кроме того, руководство говорит это об использовании array_key_exists VS. isset:

isset() не возвращает TRUE для массива ключей, которые соответствуют значению NULL, whi le a rray_key_exists() ...

Однако, вы не можете передать нулевое значение, он просто будет отображаться в PHP как пустую строку, так как isset и array_key_exists сделать то же самое в этом контексте.

Read Предопределенные переменные:

http://www.php.net/variables.predefined

и посмотреть функции isset и array_key_exists

+1

Почему 'array_key_exists' лучше, чем' isset'. Я вижу только одно отличие, и для массива '$ _GET' это кажется несущественным. – SilentGhost

+1

@SilentGhost - потому что GET - это массив, он более понятен, чтобы использовать функцию, которая явно проверяет ее на определенный ключ - хотя, возможно, обе делают то же самое для этой цели. – karim79

+1

@SilentGhost - см. Мое редактирование, пожалуйста. – karim79

1

Все ПОЛУЧИТЬ переменные (те, в URL) в конечном итоге в массиве с именем $ _GET. С помощью isset() вы можете проверить, была ли указана конкретная переменная в URL-адресе.

if (isset($_GET['ask_question'])) { 
    // go... 
} 
1

Параметры запроса сохраняются в объекте $ _GET. Вы можете проверить существование параметра с помощью IsSet:

if(isset($_GET['ask_question'])){ 
} 

Если вы хотите тэ свободы передачи переменных или как GET или POST, вы можете использовать $ _REQUEST суперглобальный:

if(isset($_REQUEST['ask_question'])){ 
} 
1

Вы можете получить доступ к с суперглобальным $ _GET.

В этом случае (так как вы не определяя значение для ASK_QUESTION), вы можете сделать:

if (array_key_exists('ask_question', $_GET) === true) 
{ 
    // do stuff 
} 
+1

isset() все еще работает для этого использования, хотя его чрезвычайно полезно знать все функции массива. –

1

Использование isset($_GET['NAME_IN_URL']). Это вернет true или false, которые вы можете оценить с помощью простого оператора if else.

Пример:

if (isset($_GET['ask_question']) { 
    //Echo your form... 
    } 
else { 
    //Echo the normal index.php 
    } 

Также обратите внимание, что при переходе по ссылке на строку запроса, вы можете просто сделать , таким образом он все еще работает, если файл будет переименован.

1

Почему бы не сделать что-то вроде

<a href="index.php?query= ask_question"/> 

в вашем HTML-код?

Затем в index.php сценарий, вы можете проверить, является ли query это ask_question следующими командами:

if($_GET['query']=='ask_question') 
    // change the layout as you wish 
else 
    // proceed with not changing the layout