Problema nella pagina di registrazione e login

stefano862

Nuovo Utente
5 Dic 2013
26
0
0
Ciao, sto cercando di fare una pagina di login e registrazione con php mvc ma senza usare framework.
Nel file View/LoginSignup.php ho del codice html con due form:
- uno per il login con l'action = public/indexLogin.php
- e un altro fomr per la registrazione con l'action = public/indexRegister.php.

Questi due file sono fatti in questo modo:

public/indexLogin.php

Codice:
$controller = new LoginController();
		$view = $controller->invoke();
		$view->render();

e public/indexRegister.php

Codice:
$controller = new RegisterController();
		$view = $controller->invoke();
		$view->render();

Il metodo invoke() chiamato in public/indexLogin.php fa questo:
Codice:
public function invoke() {
		    $view = $this->check();
		    return $view;
		}
dove check() è:
Codice:
 public function check() {
	       if(isset($_POST['submitL'])) {
	         if(isset($_POST['username']) && isset($_POST['password'])) {
	            $username = $_POST['username'];
	            $password = $_POST['password'];
	            if($this->checkData($username, $password)) {
	               $_SESSION['logged_in'] = 1;
	               $_SESSION['username'] = $username;
	               $usersRepo = new UserRepository();
	               $user = $usersRepo->findByUsername($username);
	               $view = new View('Home');
	               $view->setData('user', $this->user);
	               return $view;
	            }
	         }
	         else {
	            $view = new View('LoginSignup');
	            $view->setData('errorsL', $this->errorsL);
	            return $view;
	         }
	      }
	      else {
	         $view = new View('LoginSignup');
	         return $view;
	      }
	   }

Il metodo invoke() chiamato invece in public/indexRegister.php fa questo:
Codice:
public function invoke() {
			$view = $this->check();
			return $view;
		}
dove check() è:
Codice:
public function check() {
      if(isset($_POST['submitR'])) {
         if(isset($_POST['username']) && isset($_POST['password']) && isset($_POST['email'])) {
            $username = $_POST['username'];
            $password = $_POST['password'];
            $email = $_POST['email'];
            if($this->checkData($username, $password, $email)) {
               $usersRepo = new UserRepository();
               $user = new User();
               $user->setUsername($username);
               $user->setEmail($email);
               $user->setPassword($password);
               $user->saveRegister();
               $successesR['completed'] = "Registration completed successfully";
               $view = new View('LoginSignup');
               $view->setData('successesR', $this->successesR);
               return $view;
            }
            else {
               $view = new View('LoginSignup');
               $view->setData('errorsR', $this->errorsR);
               return $view;
            }
         }
         else {
            $view = new View('LoginSignup');
            $view->setData('errorsR', $this->errorsR);
            return $view;
         }
      }
      else {
         $view = new View('LoginSignup');
         return $view;
      }
   }

Il metodo render() si trova in View/View.php e fa questo:
Codice:
public function render(){
		extract($this->data);
		ob_start();
		require $this->path;
		ob_end_flush();
	}
Sempre in View/View.php si trova il metodo setData($name, $value) che è fatto in questo modo:
Codice:
public function setData($name, $value) {
		$this->data[$name] = $value;
	}
Dove $data è un array definito all'inizio.

La classe User (Model/User.php) rappresenta un utente (con i campi username, password, first_name...) e definisce i metodi get e set.
Inoltre contiene i metodi load() e save().
save() inserisce l'utente $this nel database.

Ho due problemi con questo codice:
1. Quando inserisco i dati corretti nel form della registrazione non viene inserito nessun nuovo utente nel database
2. Una volta fatto il login, entro nella pagina della home dove (View/Home.php) ho
Codice:
<p><?php echo "Hi ".$user->getUsername(); ?>
quindi dovrebbe visualizzare la scritta "Hi Josh" se Josh è l'utente loggato in questo momento.
Invece visualizza solo "Hi".

Qualcuno saprebbe aiutarmi? Grazie!
 
Il metodo save() fa questo:

PHP:
public function save() {
    $new = is_null($this->id);
    $db = Database::getInstance();
    if($new) {
        $sql = "INSERT INTO 'users' ('username', 'password', 'email', 'first_name', 'last_name') "
        . "VALUES (?, ?, ?, ?, ?)";
        $stmt = $db->prepare($sql);
        $stmt->execute(array($this->getUsername(), $this->password, $this->getEmail(), $this->getFirstName(), $this->getLastName());
        $this->id = $db->lastInsertedId();
    }
    else {
        $sql = "UPDATE 'users' SET 'username' = ?, 'password' = ?, 'email' = ?, 'first_name' = ?, 'last_name' = ? WHERE 'id' = ?";
        $stmt = $db->prepare($sql);
        $stmt->execute(array($this->getUsername(), $this->password, $this->getEmail(), $this->getFirstName(), $this->getLastName(), $this->id));
    }
}
 

Discussioni simili