код isset не выполняется PHP - PullRequest
0 голосов
/ 18 июля 2010

Мне было интересно, если мой код ниже, даже правильный, у меня были многочисленные ошибки с этим, но я не уверен, существует ли проблема действительно здесь. Код ниже:

Пользователь нажмет «Выйти из группы».

<p class="logout"><a id="exit" name="logout" href="#">Exit Group</a></p>

Код, который должен выполняться при нажатии «Выход из группы», приведен ниже:

if(isset($_GET['logout'])){ 

    //CODE TO BE EXECUTED        
                            } 

Однако код, который я пытаюсь выполнить, когда пользователь нажимает «Выход из группы», даже не выполняется. Нет ничего плохого в коде в фигурных скобках, так как многие проверяли его. Но мне было интересно, может ли моя проблема заключаться в коде выше? Спасибо.

Ответы [ 6 ]

5 голосов
/ 18 июля 2010

Если щелкнуть ссылку, ничего не произойдет, поскольку URL содержит только идентификатор фрагмента #. Не , даже будет выдан запрос GET.

Обычно вы используете этот вид ссылки для перехода к элементу внутри страницы (например, <a href="#top">Top</a> для перехода к элементу с идентификатором top). Это полностью обрабатывается в браузере .

И если вы поместите туда только идентификатор фрагмента, просто ничего не произойдет. Это очень часто используется, если ссылка должна выполнять какой-то JavaScript и фактически не должна ссылаться на что-то еще.


Вы тестируете массив $_POST на стороне сервера. Но этот массив содержит только элементы, если вы инициируете запрос POST формой. Это означает, что вам нужно создать форму с кнопкой отправки, например ::1010

<form action="" method="POST">
    <input type="submit" name="logout" value="Exit Group" />
</form>

Здесь в игру вступает атрибут name, который будет ключом в массиве $_POST. Но назначение этого для обычной ссылки не будет иметь никакого эффекта.


Вы можете сделать это также по ссылке, но с помощью запроса GET следующим образом:

<a id="exit" href="?logout=1">Exit Group</a>
<!--                 ^-- parameter must be part of the URL, name has no effect    -->

и

if(isset($_GET['logout'])){    
    //CODE TO BE EXECUTED        
} 

Обратите внимание, что вам нужно передать параметр logout здесь.


Кажется, вы перепутали GET и POST запросов. Если у вас есть форма , name с элементов формы будут переданы на сервер в качестве параметров. Это означает, что с учетом этой формы:

<form method="POST">
    <input type="text" name="foo" value="" />
    <input type="text" name="bar" value="" />
    <input type="submit" name="send" value="Send" />
</form>

если пользователь нажимает кнопку отправки, массив $_POST на стороне сервера будет иметь ключи:

$_POST['foo']
$_POST['bar']
$_POST['send']

Это не работает со ссылками, хотя. Щелчок по ссылке создаст обычный запрос GET, и здесь параметры должны быть частью URL, добавлены после знака вопроса ? и разделены амперсандом &:

<a href="somePage.php?foo=1&bar=1&andMore=0"> Link </a>

приведет к

$_GET['foo']
$_GET['bar']
$_GET['andMore']

Возможно, вам следует прочитать о протоколе HTTP .

3 голосов
/ 18 июля 2010

a не является элементом управления формой. оно должно быть input или select, если оно находится внутри формы.

Для ручного связывания выполните href="/page?logout"

3 голосов
/ 18 июля 2010

Вы используете обычную гиперссылку, форма не будет опубликована. для этого вам нужна какая-то кнопка отправки в форме с method="post". обычные ссылки просто приводят к GET-запросам, и ничего не будет опубликовано таким образом.

edit: добавлен простой пример:

<code><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
    <head>
        <title>Form test</title>
    </head>
    <body>
<?if ($_SERVER['REQUEST_METHOD'] == 'POST'):?>
        <pre><? print_r($_POST)?>
<? // $ _SERVER ['REQUEST_URI'] содержит текущий URL, поэтому мы знаем это?> <? // мы вернемся обратно в этот файл при отправке формы. ?> "> " />
1 голос
/ 18 июля 2010

$_POST будет заполнено только при использовании формы с method=post.

0 голосов
/ 18 июля 2010

Это <a id="exit" name="logout" href="#"> должно быть <a id="exit" href="?logoff=true#">.

Тогда logoff будет в массиве $_GET.

0 голосов
/ 18 июля 2010

Да. POST и GET - это две разные вещи;)

if(isset($_GET['logout']))
...