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 :: Версия для печати :: ООП и MVC (не могу передать данные из Модели в Контроллер)
Форумы портала PHP.SU » » Объектно-ориентированное программирование » ООП и MVC (не могу передать данные из Модели в Контроллер)

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

1. Yan9 - 09 Октября, 2015 - 18:25:30 - перейти к сообщению
Добрый день!
Есть три файла:
index.php (View)
signup.php (Controller)
classsignlog.php (Model)
Делаю элементарную регистрацию, но с этим паттерном первый раз.
Я вначале сделал в Контроллере проверку, но она не работала, потом решил просто вывести строку с уже введенным логином из БД, но не могу это сделать через Контроллер.
P.S. Есть еще класс DB, который находит в файле classcreatedb.php, там я просто подключаюсь к БД с помощью метода connect(), который вызываю в Модели и там же есть метод, который создает таблицу.
P.P.S Если в методе signcheck() Модели написать print_r($row), то строка из БД прекрасно выводится, но эти данные почему-то не могу передать в Контроллер, чтобы там их обработать.
Спасибо за помощь!

VIEW:
CODE (htmlphp):
скопировать код в буфер обмена
  1. ...
  2. <body>
  3.         <?php
  4.            include_once('signup.php');
  5.            if(isset($_REQUEST['send'])){
  6.                $name=htmlspecialchars(trim($_REQUEST['name']));
  7.                $password=htmlspecialchars(trim($_REQUEST['password']));
  8.                $g=new Controller($name, $password);
  9.                $g->signhandler();
  10.            }else{
  11.        ?>
  12.  
  13.         <form action="index.php" method="post">
  14.             <table>
  15.                 <tr>
  16.                     <td><label for="name">Name: </label></td>
  17.                     <td><input type="text" name="name" id="name"></td>
  18.                 </tr>
  19.                 <tr>
  20.                     <td><label for="pass">Password: </label></td>
  21.                     <td><input type="password" name="password" id="pass"></td>
  22.                 </tr>
  23.                 <tr>
  24.                     <td></td>
  25.                     <td><input type="submit" name="send"></td>
  26.                 </tr>
  27.             </table>
  28.         </form>
  29.  
  30.         <?php
  31.            }
  32.        ?>
  33. </body>
  34. ...


CONTROLLER:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2.  
  3. include_once('classsignlog.php');
  4.  
  5. class Controller
  6. {
  7.    private $name;
  8.    private $password;
  9.  
  10.    function __construct ($name, $password){
  11.        $this->name=$name;
  12.        $this->password=$password;
  13.    }
  14.  
  15.    function signhandler(){
  16.        $x=new User($this->name, $this->password);
  17.        $x->signcheck();
  18.        global $row;
  19.        print_r($row);
  20.    }
  21. }
  22. ?>


MODEL:
CODE (htmlphp):
скопировать код в буфер обмена
  1. include_once('classcreatedb.php');
  2.  
  3. class User extends DB
  4. {
  5.     public $name;
  6.     public $password;
  7.  
  8.     function __construct ($name, $password){
  9.         $this->name=$name;
  10.         $this->password=$password;
  11.     }
  12.  
  13.     function signcheck(){
  14.         $this->connect();
  15.         $sel=mysql_query("SELECT * FROM user WHERE name='$this->name'") ;
  16.         $row=mysql_fetch_array($sel,MYSQL_NUM);
  17.     }
  18. }
  19. ?>
2. andrewkard - 09 Октября, 2015 - 18:33:41 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. function signcheck(){
  3.         $this->connect();
  4.         $sel=mysql_query("SELECT * FROM user WHERE name='$this->name'") ;
  5.         $row=mysql_fetch_array($sel,MYSQL_NUM);
  6.         return $row;
  7.     }
  8.  


PHP:
скопировать код в буфер обмена
  1.  
  2.    function signhandler(){
  3.        $x=new User($this->name, $this->password);
  4.        $x->signcheck();
  5.        print_r($x);
  6.    }
  7.  
3. Yan9 - 09 Октября, 2015 - 18:40:27 - перейти к сообщению
andrewkard пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. function signcheck(){
  3.         $this->connect();
  4.         $sel=mysql_query("SELECT * FROM user WHERE name='$this->name'") ;
  5.         $row=mysql_fetch_array($sel,MYSQL_NUM);
  6.         return $row;
  7.     }
  8.  


PHP:
скопировать код в буфер обмена
  1.  
  2.    function signhandler(){
  3.        $x=new User($this->name, $this->password);
  4.        $x->signcheck();
  5.        print_r($x);
  6.    }
  7.  


Спасибо большое! Все работает, еще и неверно выводил метод)
Объясните, пожалуйста, зачем в модели нужен return, с вызовом метода очевидно где ошибка, а вот с return не понял)
4. andrewkard - 09 Октября, 2015 - 18:52:15 - перейти к сообщению
Yan9 пишет:
с вызовом метода очевидно где ошибка

по моему нет ошибки тут
Yan9 пишет:
зачем в модели нужен return

возврат значения, почитайте про функции
5. Viper - 09 Октября, 2015 - 18:57:12 - перейти к сообщению
Yan9 пишет:
Объясните, пожалуйста, зачем в модели нужен return, с вызовом метода очевидно где ошибка, а вот с return не понял)

http://php.net/manual/en/function.return.php
http://php.net/manual/en/functio...rning-values.php
6. Yan9 - 09 Октября, 2015 - 18:58:16 - перейти к сообщению
Цитата:
по моему нет ошибки тут

Я имел ввиду то, что я писал print_r($row), а надо было как Вы написали, ну или что-то типа такого
CODE (text):
скопировать код в буфер обмена
  1. $g=$x->signcheck();
  2. print_r($g);

Цитата:
возврат значения, почитайте про функции

Ок, спасибо, как-то упустил это и не вник.
(Добавление)
Viper пишет:
Yan9 пишет:
Объясните, пожалуйста, зачем в модели нужен return, с вызовом метода очевидно где ошибка, а вот с return не понял)

http://php.net/manual/en/function.return.php
http://php.net/manual/en/functions.returning-values.php


Спасибо, обязательно прочту!)
7. andrewkard - 09 Октября, 2015 - 20:06:22 - перейти к сообщению
Yan9 пишет:
с вызовом метода очевидно где ошибка

да, точно Улыбка Что то я не увидел.

 

Powered by ExBB FM 1.0 RC1