2016-05-09 8 views
2

Я пытаюсь создать сообщение об ошибке «flash», которое появляется, когда пользователь успешно изменяет свой пароль. Но, он не работает, как бы мне хотелось.Сообщение об успешном эхо-сигнале после PHP

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

Я пробовал искать, но я не могу найти никаких скриптов, которые действительно будут работать так, как я бы хотел их.

Это моя PHP функция, в настоящее время:

function updatePassword($conn, $newpwd, $username){ 
    $newpwd = hash('md5', $newpwd); 
    mysqli_query($conn, "UPDATE users SET password = '$newpwd' WHERE username = '$username'"); 
} 

Приветствия.

+0

Вы действительно не должны использовать [хэширование пароля MD5] (http://security.stackexchange.com/questions/19906/is-md5-considered-insecure), и вы действительно должны использовать встроенные функции PHP (http://jayblanchard.net/proper_password_hashing_with_PHP.html) для защиты паролей. Убедитесь, что вы [не избегаете паролей] (http://stackoverflow.com/q/36628418/1011527) или используйте какой-либо другой механизм очистки для них перед хэшированием. Выполнение этого * изменяет * пароль и вызывает ненужное дополнительное кодирование. –

ответ

2

Позвольте мне объяснить вам псевдологию.

Шаги:

1) Когда изменение пароля выполняется успешно, назначьте сообщение об успешном переменной сеанса.

$_SESSION['message'] = 'Password changed successfully.';

2) На странице перенаправлены успеха, эхо этого.

if (isset($_SESSION['message'])) { 
echo $_SESSION['message']; 
unset($_SESSION['message']); 
} 

Кроме того, unset() это, так что он не будет отображаться в другой раз снова.

+0

ура! работал как шарм :) –

2

Я недавно создал что-то, но код, возможно, был бы лучше, но он работает.

function flash_message($message, $type = 'success') { 
    switch($type) { 
    case 'success': 
     $class = "success"; 
     break; 
    case 'info': 
     $class = "info"; 
     break; 
    case 'error': 
     $class = "error"; 
     break; 
    } 

    $_SESSION['flash_message'] = "<p class='flash_message ".$class."'>".$message."</p>"; 
} 

function show_flash_message() { 
    if (isset($_SESSION['flash_message'])) { 
    $message = $_SESSION['flash_message']; 
    unset($_SESSION['flash_message']); 
    return $message; 
    } 
    return NULL; 
} 

используется show_flash_message() на странице, где вы хотите, чтобы отобразить его. Если сообщение отсутствует, оно ничего не отображает.

Вы назвали бы его сделать это:

function updatePassword($conn, $newpwd, $username){ 
    $newpwd = hash('md5', $newpwd); 
    mysqli_query($conn, "UPDATE users SET password = '$newpwd' WHERE username = '$username'"); 
flash_message('Successfully changed your password'); 
} 

Различные классы, если вы хотите, чтобы изменить отображение сообщения. (Неверное имя пользователя/пароль - это ошибка, отправленная электронная почта может быть информация/успех и т. Д.)

+0

приветствие помощника! Я проверю это! :) –

+0

@Albzi, хороший ответ. В 10 раз лучше, чем у меня. – Pupil

Смежные вопросы