Как правильно использовать GET в php? - PullRequest
0 голосов
/ 06 августа 2020

Я пытался найти решение своей проблемы в течение 2 часов, но я не знаю, почему мой код не работает.

У меня результат sql выглядит так:

function output(){
    while($row = $this->statement->fetch()) {
        $id = $row["id"];
        echo '
            <tr>
                <td>'.$row["comname"].'</td>
                <td>'.$row["district"].'</td>
                <td>'.$row["industry"].'</td>
                <td>"<a href="?details=' . $id . '">Details</a>"</td>
            </tr> 
            <br>
            ';
    }
                

Если кто-то нажмет на ссылку «Подробности», я хочу предоставить дополнительную информацию об этой c компании. Поэтому я сохраняю идентификатор в URL-адресе, чтобы определить, какая компания была нажата. Чтобы проверить, была ли нажата ссылка «Подробности», я написал следующее:

Изменить: просто добавил «$ id = $ _GET ['details']» после ваших подсказок, теперь это выглядит так:

    if (isset($_GET['details'])){
        $id = $_GET['details'];
        echo $id;
    }
}

Когда я нажимаю ссылку «Подробности», URL-адрес изменяется правильно, но идентификатор не выводится. (Я не просто хочу распечатать идентификатор, я просто делаю это, чтобы проверить работоспособность.) Почему мой код не работает? Есть ли второй "$ GET", который мне нужно использовать? Я действительно не знаю, что происходит.

Edit: Код php заканчивается здесь, я ничего не делаю после этого.

Edit2: Я пробовал print_r($_GET), и он похоже, идентификатора нет даже в массиве $ GET-Array. Также не выполняется инструкция if (isset($_GET['details'])).

Спасибо!

Ответы [ 2 ]

1 голос
/ 06 августа 2020

$_GET[] - это просто массив всех параметров GET в URL-адресе. Вы видите их, например, на https://www.google.com?q=stack+overflow, где для параметра q установлено значение stack+overflow. Поэтому, если вы выведете $_GET["q"] на этом URL-адресе, вы получите stack+overflow. Вы можете сохранить его в переменной, такой как $ id, и повторить его, но вам нужно сначала установить его, например, $id = $_GET["details"];

РЕДАКТИРОВАТЬ: Я только что понял, что код, который у вас сейчас есть, уязвим для атаки под названием XSS или HTML Инъекция. Поскольку мы можем указать $_GET["details"] и, таким образом, $id, которые отражаются эхом, злоумышленник может поместить туда код HTML или тег <script>, чтобы выполнить опасный код JavaScript для всех, кто обращается к URL-адресу.

К счастью, есть простое решение: просто поместите функцию htmlspecialchars() вокруг любого пользовательского ввода echo. echo здесь будет echo htmlspecialchars($id);

1 голос
/ 06 августа 2020

Вы должны распечатать $_GET['details']:

if (isset($_GET['details'])){
    echo $_GET['details'];
}

Или поместить его в переменную:

if (isset($_GET['details'])){
    $id = $_GET['details'];
    echo $id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...