Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Форма редактирования в админ панели
Форумы портала PHP.SU » » Если скрипт не работает » Форма редактирования в админ панели

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

1. Jilling - 25 Января, 2012 - 11:04:36 - перейти к сообщению
Доброго времени суток. Проблема собственно в том, что НОВЫЕ данные после редактирования не ставятся в ячейки формы, а остаются старые, которые были видны при входе в систему. Помогите разобраться.
login.php
PHP:
скопировать код в буфер обмена
  1. function login() //функция авторизации пользователей
  2. {      
  3.         session_start();
  4.         $res = $this->registry['users']->all($_POST['login']);
  5.         $row = mysql_fetch_assoc($res);                        
  6.         $_SESSION = $row;
  7.                        
  8.         if(!$_POST)
  9.         {
  10.                 header('Location: http://work/');
  11.                 die('empty form');
  12.         }
  13.                        
  14.         $form = ($this->empty_form($_POST));
  15.         if($form == true)
  16.         {      
  17.                 $this->registry['template']->show('index');            
  18.                 die("empty form");
  19.         }
  20.                                
  21.         $_POST = $this->clean_space($_POST);                                   
  22.         $res = $this->registry['users']->login($_POST['login']);
  23.         $login = mysql_fetch_assoc($res);
  24.         $pwd = md5($_POST['pwd']);
  25.                        
  26.         if (($login['login'] == $_POST['login'])&&($pwd == $login['pwd']))
  27.         {      
  28.                 if($_SESSION['privilege'] == 1)
  29.                 {
  30.                         header('Location: http://work/admin/admin');
  31.                         }else{
  32.                         header('Location: http://work/change/change');
  33.                 }
  34.         } else {                                       
  35.                 header('Refresh: 2; URL=http://work/');
  36.                 die("pass or login");
  37.         }
  38. }

change.php
PHP:
скопировать код в буфер обмена
  1. function change() //главная функция изменения данных юзеров.
  2. {
  3. $this->registry['template']->show('change');   
  4. //валидация перед отправкой данных в базу данных
  5. if ($_POST['edit'])
  6. {      
  7.         $_POST = $this->clean_space($_POST);                           
  8.         $form = ($this->empty_form($_POST));
  9.         if($form == true)
  10. {      
  11.                 $this->registry['template']->show('change');                   
  12.                 die("empty form");
  13.         }
  14.                                        
  15.         $email = ($this->email($_POST['mail'])) ;
  16.         if($email == false)
  17.         {      
  18.                 $this->registry['template']->show('change');
  19.                 die("error mail");
  20.         }
  21.                                        
  22. $login = ($this->registry['users']->log_log($_POST['login'], $_SESSION['id']));
  23.         if($login == false)
  24.         {      
  25.                 $this->registry['template']->show('change');
  26.                 die("repeat login");                   
  27.         }
  28. $mail = ($this->registry['users']->log_mail($_POST['mail'], $_SESSION['id']));
  29.         if($mail == false)
  30.         {
  31.                 $this->registry['template']->show('change');
  32.                 die("repeat mail");
  33.         }
  34.         $_POST['pwd'] = md5($_POST['pwd']);
  35.                        
  36.         $b = $this->registry['users']->update($_POST, $_SESSION['id']);
  37.         if($b = 1)
  38.         {              
  39.                 echo ("Данные изменены");                                      
  40.         }else
  41.         {
  42.                 echo "Возникла ошибка";
  43.         }
  44.         }                                                              
  45. }

change.php(шаблон)
PHP:
скопировать код в буфер обмена
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  5. <title>Change</title>
  6. </head>
  7. <body>
  8. <!--Форма изменения данных вошедшего юзера-->
  9. Начальные данные пользователя:
  10. <form  action="<?PHP echo (DIRSEP.'change/change');?>" method="post">
  11. login: <input type="text" name="login" value="<?PHP echo ($_SESSION['login']);?>"/><br/>
  12. new password: <input type="password" name="pwd"/><br/>
  13. email: <input type="text" name="mail" value="<?PHP echo ($_SESSION['mail']);?>"/> <br/>
  14. first name: <input type="text" name="first_name" value="<?PHP echo ($_SESSION['first_name']);?>"/><br/>
  15. last name: <input type="text" name="last_name" value="<?PHP echo ($_SESSION['last_name']);?>"/><br/>
  16. <input type="submit" name="edit" value="Изменить"/><br/>
  17. </form>
  18. <form action="logout" method="post">
  19. <input type="submit" name="out" value="Выход"/>
  20. </form>
  21. <br/>
  22. </body>
  23. </html>
2. Zuldek - 25 Января, 2012 - 11:13:18 - перейти к сообщению
У вас в шаблоне формы, который вызывается в скрипте change.php до обработки параметров пишутся в поля данные из сессии. Поставьте проверки, если есть значения в POST, то выводите их из массива $_POST, либо сначала обрабатывайте данные, переписывайте их в сессии а потом уже вызывайте шаблон с формой.
3. Jilling - 25 Января, 2012 - 11:22:56 - перейти к сообщению
так мы же эти данные взяли из базы данных в скрипте login.php.
вопрос: что не так сделано, что бы новые данные, которые мы отредактировали, вывелись вместо старых в той же форме?
4. Zuldek - 25 Января, 2012 - 11:30:50 - перейти к сообщению
Jilling пишет:
так мы же эти данные взяли из базы данных в скрипте login.php.
вопрос: что не так сделано, что бы новые данные, которые мы отредактировали, вывелись вместо старых в той же форме?


ваш шаблон ничего не знает о данных базы в скрипте Login.php, он берет их из сессии.
в скрипте change.php
у вас если пришли данные из формы, идет вызов шаблона, вероятно тут:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $this->registry['template']->show('change');  

ниже идут проверки и запись данных в базу.
однако, должен признать что вопрос не совсем корректен поскольку я не вижу реализаций используемых в скрипте методов и только догадываюсь что они делают.
5. Jilling - 25 Января, 2012 - 11:44:03 - перейти к сообщению
В сессию они заносятся именно в login.php после проверки подлинности юзера. Далее скрипт ссылается на контроллер change. В контроллере происходит вывод формы с данными, которые мы записали в сессию.
Как вывести отредактированные данные обратно в форму?
6. Zuldek - 25 Января, 2012 - 14:04:30 - перейти к сообщению
Jilling пишет:
В сессию они заносятся именно в login.php после проверки подлинности юзера. Далее скрипт ссылается на контроллер change. В контроллере происходит вывод формы с данными, которые мы записали в сессию.
Как вывести отредактированные данные обратно в форму?

Учитывая то, что я не вижу половины реализации, вот вам 100% решение в лоб - при вызове формы после того как проработал change.php, делайте запрос на извлечение данных из бд и выводите данные в поля прямо оттуда а не из сессии Улыбка. Тогда точно данные будут свежими, то есть пряма <input value='<?=$request_reselt['login']?>'>

 

Powered by ExBB FM 1.0 RC1