Отладка скрипта проверки PHP - PullRequest
2 голосов
/ 24 февраля 2012

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

Существует форма, которая дважды запрашивает у пользователя пароль. Я не являюсь нацистским паролем, и единственное требование - пароль должен быть длиннее 5 символов. При отправке данные формы добавляются в массив $ _POST и отправляются в функцию setPass в моем скрипте функции php для всего сайта.

Функция

function setPass(){
    $link= connectDB();

    $query= "select * from People where Username='" . $_SESSION['name'] . "' Limit 1";
    $result= $link->query($query);

    if ($result->num_rows==0){
        $_SESSION['status']= 'invaliduser';
        header("location: ../index.php");
    } else {
        $first = $_POST['firstPass'];
        $second = $_POST['secondPass'];

        if (($first == $second) && (strlen($first) > 5)){
            $password = sha1($first);
        }
    }
}

Я опускаю код вставки базы данных в этом примере.

Моя проблема в том, что этот скрипт echo $_SESSION['name'] . " and password: " . $first;, включенный в тело страницы, печатает имя пользователя, но возвращает предупреждение unidentified variable: first. Это также происходит, когда я пытаюсь получить доступ к переменной $password.

Предыдущее тестирование показало, что первое условное условие истинно, поскольку страница не перенаправлена.

Так, что вызывает сбой выполнения в блоке else?

Ответы [ 3 ]

4 голосов
/ 24 февраля 2012

Поскольку вы устанавливаете $first и $password внутри функции setPass, они недоступны вне тела.

Вы должны использовать ключевое слово global или, возможно, лучше, вернутьзначения из функции, если вы хотите использовать их снаружи.

Эта концепция называется scoping переменных.Эти переменные имеют область действия local внутри функции.См. здесь для полного описания области видимости в PHP.

2 голосов
/ 24 февраля 2012

Вы говорите, что эхо в теле сценария?Вы определили переменную внутри функции, поэтому, если вы не установите ее как глобальную (обычно это не очень хорошая идея, см. PHP global в функциях ), $ first действительно не существует.

1 голос
/ 24 февраля 2012

Это выглядит как проблема с областями видимости.Возможно, вы захотите использовать сессионные или, более предпочтительно, глобальные переменные.

Проверьте это для получения дополнительной информации: http://php.net/manual/en/language.variables.scope.php

[EDIT]

Или даже лучше, сначала верните $ из функции, как предложил Бореалид.

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