آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل با ورود و ثبت نام در قسمت 5

128962  8 سال پیش  8 سال پیش
+1 0

با سلام دوستان من در بخش ۵ فیلم های استاد به یک مشکل خوردم و نمی تونم حل کنم 

مشکل اینه که در قسمت فرم ورود نمی تونه بفهمه که این ایمیل هست یا نه و میگه کاربر وجود نداره و در قمت ثبت نام حتی اگه ایمیل هم باشه دوباره همون رو ثبت نام میکنه مثل اینکه کلا دستور 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();
}

}


 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
سجاد عباسی  8 سال پیش
+1 0

توی تابع loginCheck باید این قسمت

 if($record == null) {

به

 if($record != null) {

تبدیل بشه چون اگه برابر null بود ایمیل ثبت نشده و میتونه ثبت نام کنه و اگر ثبت شده بود دیگه null نیست و باید پیغام خطا بده.

پاسخ به سوال 
128962  8 سال پیش
+1 0

خیلی ممنون از پاسختون loginCheck برای ورود هستش و registerCheck برای ثبت نامه مشکل اینجاس من الان کدم رو که اجرا می کنم اصلا شروط داخل if رو انگار در نظر نمیگیره و یکی یکی if هارو اجرا میکنه

این if داره میگه که اگه ایمیل وجود نداشت بگو شما ثبت نام نکردین ولی متاسفانه ایمیل هم هست ولی نه تو logincheck و نه توی registercheck همه رو null میده

if($record == null) {
message('fail', _email_not_registered, true);
}
پاسخ به سوال 
سجاد عباسی  8 سال پیش
+1 0

درسته حرفتون توی 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);
}
پاسخ به سوال 
مهدی  8 سال پیش
+1 0

سلام داداش برو داخل دیتا بیس ببین فیلد ها اینطور هست ؟ یا نه قطعا دیتا بیست مشکل داره درست کن اکی میشه

پاسخ به سوال 
128962  8 سال پیش
0 0

خیلی ممنون از پاسخ های شما هر دو راه کار را امتحان کردم حتی برای اطمینان جدول رو از اول ساختم متاسفانه هنوز دستور insert کار میکنه ولی select کار نمیکنه و null خارج میکنه

اینم عکس جدولم 

0 0
توی این خط بهتون null برمیگردونه message('success', _login_welcome, true); } else { message('fail', _invalid_password , true); (8 سال پیش)
0 0
کلا به اون خط نمی رسه در if اول null میگیره و میگه این ایمیل وجود نداره در حالتی که ایمیل در دیتابیس هست (8 سال پیش)
0 0
داداش شما یک چاپ بزن قبل از شرط ببین شاید اونجا خالی بر میگردونه (8 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .