💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ امیر ابوئی
بررسی تکراری نبودن اطلاعات ثبت نام
محسن موحد حل شده توسط محسن موحد

سلام

ببخشید من تو تابع رجیستر،ابتداش این کدو زدم که بررسی کنه کاربر اگر با این ایمیل قبلا ثبت نام کنه نذاره ثبت نامی انجام بشه، ولی نمیدونم چرا هر داده ای که ورودی میدم، میگه که این تو دیتابیس هست، جایی رو بد داره بررسی میکنه؟؟

function register($userData){
    global $pdo;
    $pass = password_hash($userData['password'], PASSWORD_BCRYPT);
    $checkExistQuery = "SELECT id FROM users WHERE email LIKE :enterEmail";
    $Checkstmt = $pdo->prepare($checkExistQuery);
    $isExist = $Checkstmt->execute([':enterEmail' => $userData['email']]);
    if($isExist){
        echo "You have already registered with this email!";
        return false;   
    }
   else{   
    $sql = "INSERT INTO users (name, email, password) VALUES (:name, :email, :pass);";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':name' => $userData['name'], ':email' => $userData['email'], ':pass' => $pass]);
    return $stmt->rowCount() ? true : false;
    }
}

 و یه سوال دیگه ای که داشتم اینه که توی PHP اگر بخواهیم همراه return محتوایی رو چاپ کنیم امکانش هست یا نه ؟

چون من توی صفحه اصلی، درصورت خطا توی ثبت نام، مقداری که از تابع رجیستر برمیگرده رو همراه پیام ارور ثابت، چاپ میکنم، حالا میخوام ببینم اینجور کاری میشه کرد؟؟

message("Registration Error!<br><br>" . $result, "success");

 

سلام.

متد execute در صورتی که عملیات رو انجام بده true برمیگردونه و ربطی به کوئری شما نداره.

باید از متد rowCount استفاده کنید:

$checkExistQuery = "SELECT id FROM users WHERE email LIKE :enterEmail";
$Checkstmt = $conn->prepare($checkExistQuery);
$Checkstmt->execute([':enterEmail' => $userData['email']]);
$count = $Checkstmt->rowCount();
if($count){
    echo "You have already registered with this email!";
    return false;   
}

return کارش برگردوندن خروجیه داخل تابع، اگر هم در خارج از تابع استفاده کنید برنامه exit میشه. عمل echo رو انجام نمیده. میتونید از تابع die استفاده کنید تا هم خروجی چاپ کنه و هم exit کنه.

die('Good BYE!');

 

بهترین پاسخ
محسن موحد ۱۹ اسفند ۱۳۹۹، ۱۲:۰۵