PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Linne
Отправлено: 21 Января, 2018 - 20:15:23
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Здравствуйте, товарищи! Улыбка

Есть такой код для обновления пароля:

PHP:
скопировать код в буфер обмена
  1. if(isset($_POST['submit'])){
  2.  
  3.     if(empty($_POST['password'])){
  4.         header('Refresh: 3; URL = /admin/newpass');
  5.         echo '<p class="error">Введите новый пароль!</p>';
  6.     }
  7.     /* elseif (!preg_match('/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$/u', $password)) {
  8.         header('Refresh: 3; URL = /admin/newpass');
  9.         echo '<p class="error">Пароль может состоять только из цифр и букв латинского алфавита!</p>';
  10.     } */
  11.  
  12.     else{
  13.  
  14.         $doc =newDOMDocument('1.0','UTF-8');
  15.         $doc->formatOutput =true;
  16.         $doc->load('xml/admin.xml');
  17.         $root = $doc->documentElement;
  18.  
  19.         if(isset($_POST['password'])){
  20.             $password = $_POST['password'];
  21.  
  22.             $pass = $root->getElementsByTagName('password');
  23.  
  24.             if(isset($password['password'])and trim($password['password'])!=''){
  25.  
  26.                 $pass = $pass->item(0);
  27.                 $pass->nodeValue = crypt($password['password']);
  28.             }
  29.  
  30.         }
  31.  
  32.         $doc->save('xml/admin.xml');
  33.  
  34.         header('Refresh: 3; URL = /admin');
  35.         echo '<p class="valid">Пароль обновлён</p>';
  36.  
  37.         }
  38.  
  39. }


Этот код работает отлично, но, пропускает пустое поле. Т. е., если ничего не ввести и отправить на сервер, то всё равно выводится «Пароль обновлён», при этом, конечно, записи в файл не происходит.

Вроде бы всё логично: есть условие, что поле должно быть заполнено и если всё ОК, то пропускаем на перезапись в файл. Вообще не могу понять в чём может быть проблема.
 
 Top
Sail
Отправлено: 21 Января, 2018 - 21:05:56
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Linne, чудес ведь не бывает.
Возможно, выполняется вовсе не этот участок кода.
Ну и результат var_dump($_POST); можно посмотреть. В самом начале скрипта...
 
 Top
Linne
Отправлено: 21 Января, 2018 - 21:16:32
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Sail пишет:
Linne, чудес ведь не бывает.
Возможно, выполняется вовсе не этот участок кода.
Ну и результат var_dump($_POST); можно посмотреть. В самом начале скрипта...


Вывод var_dump($_POST):

PHP:
скопировать код в буфер обмена
  1. array(2) { ["password"]=> array(1) { ["password"]=> string(0) "" } ["submit"]=> string(16) "Изменить" }


Это при отправке пустого поля.

А это вывод, при вводе 14-значного пароля:

PHP:
скопировать код в буфер обмена
  1. array(2) { ["password"]=> array(1) { ["password"]=> string(14) "12345678901234" } ["submit"]=> string(16) "Изменить" }

(Отредактировано автором: 21 Января, 2018 - 21:25:10)

 
 Top
Sail
Отправлено: 21 Января, 2018 - 21:40:00
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Linne, то есть, в 3-й строчке проверяется: "А не пуст ли массив?"
А массив не пуст. Потому что в нем есть элемент ["password"]=> string(0) ""
Вероятно, в форме name='password[]'?
 
 Top
Linne
Отправлено: 21 Января, 2018 - 21:41:19
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Sail пишет:
Linne, то есть, в 3-й строчке проверяется: "А не пуст ли массив?"
А массив не пуст. Потому что в нем есть элемент ["password"]=> string(0) ""
Вероятно, в форме name='password[]'?


А что же мне с этим можно сделать? Однако

Вот форма:

PHP:
скопировать код в буфер обмена
  1.        
  2. echo '
  3.   <fieldset>
  4.         <legend>Смена пароля администратора</legend>
  5.         <form name="newpass" action="addnewpass" method="POST">
  6.                 <p><label for="password">Введите новый пароль: </label></p>
  7.                 <p><input type="password" name="password[password]" /></p>
  8.                 <p><input type="submit" name="submit" value="Изменить" />
  9.                 <input type="button" onclick="window.location=\'/admin\';" value="Отмена" /></p>
  10.         </form>
  11.   </fieldset>
  12. ';

(Отредактировано автором: 21 Января, 2018 - 21:47:25)

 
 Top
Sail
Отправлено: 21 Января, 2018 - 21:49:42
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Linne, на Ваше усмотрение (ну, или требования системы): либо сделать, чтобы значение пароля передавалось не в массив (name='password'), либо проверять isset($_POST['password'] && empty($_POST['password']['password']))
 
 Top
Linne
Отправлено: 21 Января, 2018 - 21:56:55
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Sail пишет:
Linne, на Ваше усмотрение (ну, или требования системы): либо сделать, чтобы значение пароля передавалось не в массив (name='password'), либо проверять isset($_POST['password'] && empty($_POST['password']['password']))


Вот спасибо-то! Улыбка

Я использовал второй вариант, с проверкой:

PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['password']) && empty($_POST['password']['password']))
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB