2017-02-23 179 views
1

Переменных кажется пустым, если заявление, но не может быть пустымПеременные кажется пустым, если утверждение, но оно не пусто

Эй, ребята, я новичок в PHP, и я пытаюсь сделать простой сайт, где Я могу войти в систему, выйти из системы и изменить свой пароль. Код работает, но у меня есть некоторые проблемы с отображением сообщений об ошибках пользователям.

На сайте для смены пароля у меня есть форма с 3 полями ввода, первая для вставки старого пароля, вторая для вставки нового и последнего - для подтверждения нового пароля.

Код:

<form action="changepw.php" method="post"> 
    <input id="oldPassword" type="password" class="form-control" name="oldPassword" placeholder="Aktuelles Passwort" required=""> 
    <input id="password" type="password" name="password" class="form-control" placeholder="Neues Passwort" pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}" required=""> 
    <input id="password2" type="password" name="password2" class="form-control" placeholder="Passwort wiederholen" required=""> 
    <button type="submit" class="btn btn-info c-btn">Passwort wechseln</button> 
</form> 

Мой PHP код начинается со следующим:

$error = ''; 
session_start(); 
if(isset($_SESSION['loggedin'])){ 
    changepassword(); 
} 
else { 
    header('Location: index.php'); 
} 

В функции changepassword(), я проверяю, если форма была отправлена, и если да, то я иду вперед с паролем изменение. Если ввод из поля ввода oldPassword не совпадает с паролем в базе данных, переменная $error будет установлена ​​на «Неверный пароль» (это работает правильно, я тестировал его с помощью echo).

Позже в HTML, я поместить этот кусок кода, чтобы напечатать сообщение об ошибке, если оно не пусто:

<?php 
if(!empty($error)){ 
    echo "<div class='alert alert-danger' role='alert'>$error</div>"; 
} 
?> 

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

Странная вещь, я использую этот подход по той же самой причине в своем файле входа, чтобы проверить, правильно ли пароль, и его работа без проблем.

+2

Похоже, что проблема с областью действия, вы изменяете значение ошибки $ внутри функции, но в глобальной области она все еще пуста. – JrmC

ответ

2

Это выглядит так, как будто вы определяете новую переменную $error в сфере вашей changepassword() функции, а не изменяя который вы установили в начале вашего скрипта.

Вы можете использовать $error переменную внутри функции путем добавления global $error; к началу функции, так что становится:

function changepassword() { 
    global $error; 
    // other code here... 
} 

Следует отметить, что использование глобальных переменных не рекомендуется, так лучшее решение будет чтобы вернуть сообщение об ошибке с вашей changepassword() функции следующим образом:

function changepassword() { 
    // other code here... 
    return $error; 
} 

// call like this: 
$error = changepassword(); 

Более подробная информации о видимости переменной доступна here.

+0

Это сделало это для меня! Я использовал путь с возвратом в конце функции.Просто нужно добавить '$ error =" "' в начале функции, потому что она печатает уведомление на сайте о том, что $ error не определяется, когда он возвращается, прежде чем я отправлю форму. Но теперь это работает, спасибо :) – TeemoBiceps

+0

Рад, что я мог помочь :) – Gondrup

0

Это должно быть

echo "<div class='alert alert-danger' role='alert'>".$error."</div>"; 

(смотреть котировки и точки вокруг переменного)

+1

Нет, вы можете использовать переменные в двойных кавычках без точек. Если бы я использовал одиночные кавычки, это не сработало бы так, но с двойными кавычками. – TeemoBiceps