لام من تا قسمت 26 دیدم
و یک چیزیو فهمیدم
من دوبار با یک مشخصات ثبت نام کردم
و دوتاش توی دیتابیس ثبت شد
چی کار کنیم که بگه این نام کاربری یا مثلا این ایمیل از قبل وجود دارد؟
میشه توی یک ویدیو توضیح بدید؟
باید ابتدا ورودی های کاربر رو در دیتابیس سرچ کنید
$user = SELECT * FROM user WHERE email=?
(توجه کنید که کد بالا خلاصه شده هست. شما باید به شکل pdo بسازید, ابتدا $conn->prepare و بعد bindValue و execute رو انجام بدید)
بعد میاید چک میکنید آیا کاربری با این مشخصات توی دیتابیس هست یا نه؟ اگر کاربر وجود داشت بهش بگید کاربری با این مشخصات وجود دارد. اما اگر وجود نداشت کد های مربوط به ثبت نام کاربر جدید رو مینویسید
if ($user->rowCount() >= 1){
echo 'کاربری با این مشخصات قبلا ثبت نام کرده';
}else{
// کد های مربوط به بخش ثبت نام
}
Notice: Undefined index: username in C:\xampp\htdocs\c\register\index.php on line 3
لاین 3 که مشکلی نداره!
کد ها رو درست گذاشتم؟
کل کد های من
<?php
include '../db/db.php';
$name = $_POST['username'];
$user = $conn->prepare("SELECT * FROM user WHERE username=?;");
$user->bindValue(1,$name);
$user->execute();
if ($user->rowCount() >= 1){
echo 'کاربری با این مشخصات قبلا ثبت نام کرده';
}else{
$sm = null;
if(isset($_POST['sub'])){
$name = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$result = $conn->prepare("INSERT INTO user SET username=? , email=? , psw=?");
$result->bindValue(1 ,$name);
$result->bindValue(2 ,$email);
$result->bindValue(3 ,$password);
$result->execute();
$sm = true;
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ثبت نام</title>
<link href="../image/icon.png" rel="icon" type="png">
<script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4" crossorigin="anonymous"></script>
<style>
.bd-placeholder-img {
font-size: 1.125rem;
text-anchor: middle;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
@media (min-width: 768px) {
.bd-placeholder-img-lg {
font-size: 3.5rem;
}
}
html,
body {
height: 100%;
direction: rtl;
}
body {
background-color: #f5f5f5;
}
.form-signin {
width: 100%;
max-width: 330px;
padding: 15px;
margin: auto;
}
.form-signin .checkbox {
font-weight: 400;
}
.form-signin .form-floating:focus-within {
z-index: 2;
}
.form-signin input[type="email"] {
margin-bottom: -1px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.form-signin input[type="password"] {
margin-bottom: 10px;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
</style>
</head>
<body>
<br><br>
<main class="form-signin text-center">
<form action="" method="POST">
<h2 class="h3 mb-3 fw-normal">لطفا ثبت نام کنید.</h2>
<br>
<div class="form-floating">
<input type="text" class="form-control" id="floatingInput" placeholder="user name" name="username" required>
<label for="floatingInput">نام کاربری</label>
</div>
<br>
<div class="form-floating">
<input type="email" class="form-control" id="floatingemail" placeholder="ایمیل" name="email" required>
<label for="floatingemail">ایمیل شما</label>
</div>
<br>
<div class="form-floating">
<input type="password" class="form-control" id="floatingPassword" placeholder="رمز عبور" name="password" required>
<label for="floatingPassword">رمز عبور</label>
</div>
<br>
<button name="sub" class="w-100 btn btn-lg btn-primary" type="submit">ثبت نام</button>
</form>
</main>
<center>
<a style="text-decoration: none;color:blue;font-size:15px;" href="../login/index.php">ورود</a>
</center>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js" integrity="sha384-Atwg2Pkwv9vp0ygtn1JAojH0nYbwNJLPhwyoVbhoPwBhjQPR5VtM2+xf0Uwh9KtT" crossorigin="anonymous"></script>
<?php if($sm){ ?>
<script>
Swal.fire({
position: 'center',
icon: 'success',
title: 'ثبت نام انجام شد.',
showConfirmButton: false,
timer: 2000
})
</script>
<?php } ?>
</body>
</html>
استاد اگه میشه جواب بدید
مشکل کد اینجاست که دستورات PHP باید زمانی اجرا بشه که کاربر روی دکمه ثبت نام کلیک کنه
اما شما این مورد رو ننوشتید, کد باید به این شکل باشه
if(isset($_POST['sub'])){
$name = $_POST['username'];
$user = $conn->prepare("SELECT * FROM user WHERE username=?;");
$user->bindValue(1,$name);
$user->execute();
if ($user->rowCount() >= 1){
echo 'کاربری با این مشخصات قبلا ثبت نام کرده';
}else{
$sm = null;
if(isset($_POST['sub'])){
$name = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$result = $conn->prepare("INSERT INTO user SET username=? , email=? , psw=?");
$result->bindValue(1 ,$name);
$result->bindValue(2 ,$email);
$result->bindValue(3 ,$password);
$result->execute();
$sm = true;
}
}
}
درضمت میتونید توی کوئری موجود بودن چند پایامتر رو چک کنید, به این شکل
SELECT * FROM user WHERE username=? OR email=?
نیازی به گذاشتن سمی کالن (;) در پایان کوئری نیست
موفق باشید