PHP setcookie добавляет знаки процента - PullRequest
0 голосов
/ 30 июня 2011

Итак, у меня есть простой скрипт, который позволяет вам выбирать между любыми вашими «названиями команд». Когда вы выбираете sumbit и выбираете его, предполагается, что он сделает php setcookie со значением selection, которое является хешированной версией названия команды.

Вот соответствующий код:

<?php
include 'include/db.php';

    if(isset($_POST['submitteam'])) {
        $team_hash = $_POST['teams'];
        setcookie('ver_aet', $team_hash, time()+2592000);
        header('Location: index.php');
    }

    $email = $_COOKIE['ver_ame'];


        //Find the User Id from the Email Hash
        $sql_finduid = "SELECT * FROM users_sensitive WHERE email_hash = '$email'";
        $sql_finduid_result = mysql_query($sql_finduid);
        while ($row = mysql_fetch_array($sql_finduid_result)) {
            $user_id = $row['user_id']; 
        } //End Find User Id
        /*
        $sql_finduid = mysql_query("SELECT user_id FROM users WHERE email = '$email'");
        $user_id = mysql_result($sql_finduid) or die(mysql_error());
        */

        //Find the Team Id from the User Id above
        $sql_findteams = "SELECT * FROM team_members WHERE user_id = '$user_id'";
        $sql_findteams_result = mysql_query($sql_findteams);
        if(mysql_num_rows($sql_findteams_result) < 1){
                header('Location: registerteam.php?ver_ame=' . $email);
            } else {

        while ($row = mysql_fetch_array($sql_findteams_result)) {
            $team_id = $row['team_id'];
            /*
            $sql_finduid = mysql_query("SELECT user_id FROM users WHERE email = '$email'");
            $user_id = mysql_result($sql_finduid) or die(mysql_error());
            */



            if((mysql_num_rows($sql_findteams_result)) <= 1) {

                $sql_findteamname = "SELECT * FROM teams WHERE team_id = '$team_id'";
                $sql_findteamname_result = mysql_query($sql_findteamname);
                while ($row = mysql_fetch_array($sql_findteamname_result)) {
                    $team_name = $row['team_name'];
                    $team_hash = $row['team_name_hash'];
                }

                setcookie('ver_aet', $team_hash, time()+2592000);
                header('Location: index.php');

            } else {

    //setcookie('ver_ame', $teamname_hash, time()+2592000);
    //setcookie('ver_aet', $email, time()+2592000);
    //header('Location: index.php'); ?>

и HTML

Select the team you would like to view: <br />
            <form method="post" action="<?PHP echo  $_SERVER['PHP_SELF']; ?>">
                <select name="teams">
                    <?PHP           
                    $sql_findteams = "SELECT * FROM team_members WHERE user_id = '$user_id'";
                    $sql_findteams_result = mysql_query($sql_findteams);
                    while ($row = mysql_fetch_array($sql_findteams_result)) {
                        $team_id = $row['team_id'];
                        /*
                        $sql_finduid = mysql_query("SELECT user_id FROM users WHERE email = '$email'");
                        $user_id = mysql_result($sql_finduid) or die(mysql_error());
                        */

                        $sql_findteamname = "SELECT * FROM teams WHERE team_id = '$team_id'";
                        $sql_findteamname_result = mysql_query($sql_findteamname);
                        while ($row = mysql_fetch_array($sql_findteamname_result)) {
                            $team_name = $row['team_name'] . "&nbsp;";
                            $team_hash = $row['team_name_hash'] . "<br />"; 
                        ?>
                        <option value="<?= $team_hash; ?>"><?= $team_name . $team_hash; ?></option>
                <?PHP
                        } 
                    } 
                ?>
                </select>
                <input type="submit" name="submitteam" value="Submit" />
            </form>
        </div>
    </div>
</div>

в основном, "если нажата кнопка отправки, установите cookie для имени команды. Если не нажали, продолжите. Найдите cookie своей электронной почты, выясните, к каким командам вы принадлежите, если есть одна команда Создайте файл cookie своей команды и продолжайте, если нет, покажите все доступные команды и разрешите пользователю выбрать одну из них. loop "

В настоящее время у меня эхом $ team_hash, чтобы показать, что он вытягивает правильный хэш-номер (и он есть). Когда я нажимаю «Отправить», он переходит в начало страницы и выполняет оператор setcookie. Он устанавливает cookie, но, похоже, что файл cookie в конечном итоге имеет случайные знаки процента после его установки.

Что нужно установить: d2fea5c982b6cb3f5bffc4998d96cbe5 Что на самом деле установлено: d2fea5c982b6cb3f5bffc4998d96cbe5% 3Cbr +% 2F% 3E

Откуда эти дополнительные вещи?

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Проблема в том, что вы добавляете <br /> в конце хэша, когда вы делаете $team_hash = $row['team_name_hash'] . "<br />";, и когда вы устанавливаете значение параметра, вы используете $team_hash, который содержит <br />. Когда вы делаете set cookie, <br /> получает закодированный URL, поэтому он находится в конце вашего cookie.

Просто измените строку на:

$team_hash = $row['team_name_hash'];
0 голосов
/ 30 июня 2011

Как-то там у вас есть
, а PHP это URL, кодирующий его.

Прямо здесь

$team_hash = $row['team_name_hash'] . "<br />"; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...