我正在尝试使用php mvc创建登录页面并注册,但不使用框架。 在 View / LoginSignup.php 文件中,我有两种形式的html代码:
这两个文件是这样制作的:
公开/ indexLogin.php
$controller = new LoginController();
$view = $controller->invoke();
$view->render();
和 public / indexRegister.php
$controller = new RegisterController();
$view = $controller->invoke();
$view->render();
在 public / indexLogin.php 中调用的invoke()方法执行此操作:
public function invoke() {
$view = $this->check();
return $view;
}
其中check()方法是:
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;
}
}
在 public / indexRegister.php 中调用的invoke()方法执行此操作:
public function invoke() {
$view = $this->check();
return $view;
}
其中check()方法是:
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;
}
}
render()方法位于 View / View.php 中并执行此操作:
public function render(){
extract($this->data);
ob_start();
require $this->path;
ob_end_flush();
}
View / View.php 还包含setData($ name,$ value)方法:
public function setData($name, $value) {
$this->data[$name] = $value;
}
$ data是一个开头定义的数组。
User类( Model / User.php )表示一个用户(字段为username,password,first_name ...),并定义方法get()和set()。 它还包含方法load()和save()。 save()在数据库中插入$ this用户。
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));
}
}
用于登录的HTML
<form action="../public/indexLogin.php" method="post" onSubmit="return validateLog(this);">
<table>
<tr>
<td>Username:</td>
<td>
<input type="text" name="username" id="lu"/>
</td>
</tr>
<tr>
<td>Password:</td>
<td>
<input type="password" name="password" id="lp"/>
</td>
</tr>
<tr>
<td>
<input type="submit" value="Login" name="submitL"/>
</td>
</tr>
</table>
</form>
注册用HTML
<form action="../public/indexRegister.php" method="post" onSubmit="return validateReg(this);">
<table>
<tr>
<td>Username:</td>
<td colspan="2">
<input type="text" name="username" id="ru"/>
</td>
</tr>
<tr>
<td>Password:</td>
<td colspan="2">
<input type="password" name="password" id="rp" />
</td>
</tr>
<tr>
<td>E-mail:</td>
<td colspan="2">
<input type="text" name="email" id="re" />
</td>
</tr>
<tr>
<td align="center">
<input type="submit" value="Sign up" name="submitR"/>
</td>
</tr>
</table>
</form>
我对此代码有两个问题:
<p><?php echo "Hi".$user->getUsername();?>
,应显示消息“嗨Josh”,如果Josh是此时登录的用户。
而只显示“嗨”。有人会知道帮帮我吗?谢谢!
JAVASCRIPT功能
function validateLog(form) {
var username = document.getElementById("lu").value;
var password = document.getElementById("lp").value;
var errors = [];
var ck_username = /^[A-Za-z0-9_]{2,10}$/;
var ck_password = /^[A-Za-z0-9!@#$%^&*()_]{2,20}$/;
if(!ck_username.test(username)) {
errors[errors.length] = "Incorretc.";
}
if(!ck_password.test(password)) {
errors[errors.length] = "Incorrect.";
}
if(errors.length > 0) {
reportErrors(errors);
return false;
}
return true;
}
function validateReg(form) {
var username = document.getElementById("ru").value;
var password = document.getElementById("rp").value;
var email = document.getElementById("re").value;
var errors = [];
var ck_username = /^[A-Za-z0-9_]{2,10}$/;
var ck_password = /^[A-Za-z0-9!@#$%^&*()_]{2,20}$/;
var ck_email = /^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$/;
if(!ck_username.test(username)) {
errors[errors.length] = "Incorrect.";
}
if(!ck_password.test(password)) {
errors[errors.length] = "Incorrect.";
}
if(!ck_email.test(email)) {
errors[errors.length] = "Incorretc.";
}
if(errors.length > 0) {
reportErrors(errors);
return false;
}
return true;
}