مشکل با ورود و ثبت نام در قسمت 5
با سلام دوستان من در بخش ۵ فیلم های استاد به یک مشکل خوردم و نمی تونم حل کنم
مشکل اینه که در قسمت فرم ورود نمی تونه بفهمه که این ایمیل هست یا نه و میگه کاربر وجود نداره و در قمت ثبت نام حتی اگه ایمیل هم باشه دوباره همون رو ثبت نام میکنه مثل اینکه کلا دستور SELECT رو انجام نمیده
خیلی خیلی ممنون میشم کسی کمک کنه
کد controller model
<?php
class UserController {
public function __construct(){
}
public function logout(){
session_destroy();
header("location: /framework/user/login");
}
public function profile($p1, $p2, $p3){
echo "profile";
echo "$p1, $p2, $p3";
}
public function login() {
if (isset($_POST['email'])) {
$this->loginCheck();
} else {
$this->loginForm();
}
}
private function loginCheck(){
$email = $_POST['email'];
$password = $_POST['password'];
$record = UserModel::fetch_by_email($email);
if($record == null) {
message('fail', _email_not_registered, true);
} else {
$hashedPassword = encryptPassword($password);
if($hashedPassword == $record['password']) {
$_SESSION['email'] = $record['email'];
$_SESSION['user_id'] = $record['user_id'];
message('success', _login_welcome, true);
} else {
message('fail', _invalid_password , true);
}
}
return;
}
private function loginForm(){
$data['test'] = array();
View::render("user/login.php", $data);
}
public function register(){
if (isset($_POST['email'])) {
$this->registerCheck();
} else {
$this->registerForm();
}
}
private function registerCheck() {
$email = $_POST['email'];
$password1 = $_POST['password1'];
$password2 = $_POST['password2'];
$name = $_POST['name'];
$nickname = $_POST['nickname'];
$time = getCurrentDateTime();
$record = UserModel::fetch_by_email($email);
if($record != null){
message('fail', _already_registered, true);
}
if(strlen($password1)<3 || strlen($password2)<3){
message('fail', _weak_password, true);
}
if($password1 != $password2){
message('fail', _password_not_match, true);
}
$hashedPassword = encryptPassword($password1);
UserModel::insert($email, $name, $nickname, $hashedPassword, $time, $time);
message('success', _successfully_registered);
}
private function registerForm(){
$data['test'] = array();
View::render("user/register.php", $data);
}
}
کد user model
<?php
class UserModel {
public static function insert($email, $name, $nickname, $hashedPassword, $time, $time){
$db = Db::getInstance();
$db->insert("INSERT INTO x_user
( email, fullname, nickname, password, registerTime, lastVisitTime) VALUES
('$email', '$name', '$nickname', '$hashedPassword', '$time', '$time')"
);
}
public static function fetch_by_email($email) {
$db = Db::getInstance();
$record = $db->query("SELECT * FROM x_user WHERE email = '$email'");
return $record;
}
}
فرم لاگین و رجیستر
<?php
if (isset($_SESSION['email'])){
message('fail', _already_logged_in);
exit;
}
?>
<div class="tac">
<img src="<?=baseUrl()?>/image/notes.png" class = "img"><br><br>
<form action="/framework/user/login" method="post">
<input type="text" class="ltr" placeholder="<?=_ph_email?>" name="email"><br>
<br>
<input type="password" class="ltr" placeholder="<?=_ph_password?>" name="password"><br>
<br>
<br>
<button type="submit" class="btn-blue"><?=_btn_login?></button>
</form>
<br>
<br>
<br>
<a href="/framework/user/register" class="link-gray"> <?=_btn_signup?></a>
</div>
____________________________________
<div class="tac">
<img src="<?=baseUrl()?>/image/notes.png" class="img"><br><br>
<form action="/framework/user/register" method="post">
<input type="text" class="ltr" placeholder="<?=_ph_email?>" name="email"><br>
<br>
<input type="password" class="ltr" placeholder="<?=_ph_password?>" name="password1"><br>
<input type="password" class="ltr" placeholder="<?=_ph_confirm_password?>" name="password2"><br>
<br>
<br>
<input type="text" class="ltr" placeholder="<?=_ph_name?>" name="name"><br>
<input type="text" class="ltr" placeholder="<?=_ph_nickname?>" name="nickname"><br>
<br>
<br>
<button type="submit" class="btn-blue"><?=_btn_register?></button>
</form>
</div>
کد های db
<?php
class Db {
private $connection;
private static $db;
public static function getInstance($option = null){
if (self::$db == null){
self::$db = new Db($option);
}
return self::$db;
}
public function __construct($option = null) {
if ($option != null){
$host = $option['host'];
$user = $option['user'];
$pass = $option['pass'];
$name = $option['name'];
} else{
global $config;
$host = $config['db']['host'];
$user = $config['db']['user'];
$pass = $config['db']['pass'];
$name = $config['db']['name'];
}
$this->connection = new mysqli($host, $user, $pass, $name);
if ($this->connection->connect_error) {
echo "Connection failed: " . $this->connection->connect_error;
exit;
}
$this->connection->query("SET NAMES 'utf8'");
}
public function first($sql){
$record = $this->query($sql);
if($record == null){
return null;
}
}
public function modify($sql) {
$result = $this->connection->query($sql);
if (!$result) {
echo "Query: " . $sql . "failed! due to :" . mysqli_error($this->connection);
exit;
}
}
public function insert($sql){
$result = $this->connection->query($sql);
if(!$result){
echo "Query: " . $sql . "failed! due to :" . mysqli_error($this->connection);
exit;
}
return $result;
}
public function query($sql){
$result = $this->connection->query($sql);
if(!$result){
echo "Query: " . $sql . "failed! due to :" . mysqli_error($this->connection);
exit;
}
if($result->num_rows == 0){
return null;
}
while($row = $result->fetch_assoc()){
$records[] = $row;
}
}
public function connection(){
return $this->connection;
}
public function close(){
$this->connection->close();
}
}
توی تابع loginCheck باید این قسمت
if($record == null) {
به
if($record != null) {
تبدیل بشه چون اگه برابر null بود ایمیل ثبت نشده و میتونه ثبت نام کنه و اگر ثبت شده بود دیگه null نیست و باید پیغام خطا بده.
خیلی ممنون از پاسختون loginCheck برای ورود هستش و registerCheck برای ثبت نامه مشکل اینجاس من الان کدم رو که اجرا می کنم اصلا شروط داخل if رو انگار در نظر نمیگیره و یکی یکی if هارو اجرا میکنه
این if داره میگه که اگه ایمیل وجود نداشت بگو شما ثبت نام نکردین ولی متاسفانه ایمیل هم هست ولی نه تو logincheck و نه توی registercheck همه رو null میده
if($record == null) {
message('fail', _email_not_registered, true);
}
درسته حرفتون توی if ها باید return کنید تا بقیه کد اجرا نشود.
private function registerCheck() {
$email = $_POST['email'];
$password1 = $_POST['password1'];
$password2 = $_POST['password2'];
$name = $_POST['name'];
$nickname = $_POST['nickname'];
$time = getCurrentDateTime();
$record = UserModel::fetch_by_email($email);
if($record != null){
message('fail', _already_registered, true);
return;
}
if(strlen($password1)<3 || strlen($password2)<3){
message('fail', _weak_password, true);
return;
}
if($password1 != $password2){
message('fail', _password_not_match, true);
return;
}
$hashedPassword = encryptPassword($password1);
UserModel::insert($email, $name, $nickname, $hashedPassword, $time, $time);
message('success', _successfully_registered);
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .

