سلام دوستان وقت بخیر
من با php یک صفحه ثبت نام طراحی کرده ام که اطلاعات وارد شده رو میگیره و در دیتابیس سایت ذخیره میکنه ولی وقتی خودم برای اشکال زدایی صفحه رو رفرش میکنم یک مقدار پیشفرضی به دیتابیس ارسال و در اونجا ذخیره میشه کسی میتونه راهنماییم کنه که از این کار جلوگیری کنم؟ چون اگر کاربر هم این صفحه رو به هردلیلی توی مرورگرش رفرش کنه به دیتابیس محتوای فرم هارو میفرسته و عملا این کار درست نیست.
بخش PHP کدم رو میزارم که اگر اشکالی در کد بود راهنماییم کنید
<?php
include 'mdb.php';
if(isset($_POST['sub'])){
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$email = $_POST['email'];
$uname = $_POST['uname'];
$pword = $_POST['pword'];
$bdate = $_POST['bdate'];
$gnder = $_POST['gnder'];
$sender = $connect->prepare("INSERT INTO users SET firstname=?, lastname=?, email=?, username=?, password=?, birthdate=?, gender=?");
$sender->bindValue(1, $fname);
$sender->bindValue(2, $lname);
$sender->bindValue(3, $email);
$sender->bindValue(4, $uname);
$sender->bindValue(5, $pword);
$sender->bindValue(6, $bdate);
$sender->bindValue(7, $gnder);
$sender->execute();
}
?>
در کل نمیشه پاسخ مشخص داد. چون اطلاعات دقیقی از صفحات و کاری که میخواهید انجام بدید ندادید و با این شرایط احتمالا بهترین پیشنهاد یادگیری بهتر PHP هست. ولی اگر صرفا دنبال حل کردن این موضوع خاصتون هستید کدهای زیر رو جایگزین کدهایی که خودتون ارسال کردید، بکنید و مجدد تست کنید:
<?php
include 'mdb.php';
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['sub'])){
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$email = $_POST['email'];
$uname = $_POST['uname'];
$pword = $_POST['pword'];
$bdate = $_POST['bdate'];
$gnder = $_POST['gnder'];
$sender = $connect->prepare("INSERT INTO users SET firstname=?, lastname=?, email=?, username=?, password=?, birthdate=?, gender=?");
$sender->bindValue(1, $fname);
$sender->bindValue(2, $lname);
$sender->bindValue(3, $email);
$sender->bindValue(4, $uname);
$sender->bindValue(5, $pword);
$sender->bindValue(6, $bdate);
$sender->bindValue(7, $gnder);
$sender->execute();
}
?>
همچنین دقت کنید که این کدها رو داخل همون صفحه فرمتون بذارید و بعد مقدار action المنت form تون رو هم همون صفحه تنظیم کنید یا اینکه خالی بگذارید تا پیشفرض همون صفحه تنظیم بشه.
منظورتون از اینکه یک مقدار پیش فرض ذخیره میشه چیه...؟ داده اش از کجا میاد؟!
به طور کلی اگر این اطلاعات از طریق submit کردن فرم هست یکی از راه هاش اینه که باید مطمئن بشید تکه کد بالایی که ارسال کردید فقط در شرایطی اجرا بشه که کاربر فرم رو با متد POST سابمیت کرده. یعنی یک http ریکوئست با متد POST ارسال شده باشه. (اینجوری دیگه رفرش صفحه درباره اش صدق نمیکنه و اصلا اجرا نمی شه)
مثلا با کد زیر میتونید از این قضیه مطمئن بشید:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
//Request is POST!
}
شرط بالا رو میتونید با شرط خودتون و یا کد آقای پارسیان که بالاتر نوشتند ترکیب کنید تا به نتیجه مورد نظرتون برسید.
@mhyeganeh
یعنی یکسری داده ک قبلا وارد کرده بودم رو به دیتابیس ارسال میکنه اون هم در حالی که تکست اینپوت ها خالی هستن :/
مقدار action رو برای المنت form آدرس همون صفحه فرم قرار بدید. و یا اینکه بعد از انجام عملیات ذخیره در دیتابیس کاربر رو به یک صفحه دیگر ریدایرکت کنید.
مواردی که دوستان گفتند رو بررسی کن
میتونی با یه کوئری چک کنی و اگر داده ها تکراری هستند واردشون نکنی
مثلا اگر این ایمیل از قبل داخل دیتابیس باشه
نباید اطلاعات تکراری وارد کنی
SELECT EXISTS(SELECT * FROM users WHERE email=`john@example.com`)
کوئری بالا true/false برمیگردونه
همچنین میتونی در سطح دیتابیس چک کنی
و مثلا فیلد ایمیل رو UNIQUE در نظر بگیری
خیلی ممنون @ali.bayat
مشکل اینه که در باب PHP هیچی بلد نیستم فقط بلدم متغیر تعریف کنم😶 و دوتا کد بالایی که دوستان عرض کردند رو خواستم امتحان کنم ولی فک کنم اشتباه توی کدم وارد میکردم💔. واقعیتش فقط از css و html سردرمیارم و ازطریق یک آموزش ویدیوی این مبحث رو دنبال میکنم توی اون هم این مشکل رو برطرف نکردن من هم موندم که خب چیکار کنم دیتابیسم با موارد تکراری پر نشه.
در کل نمیشه پاسخ مشخص داد. چون اطلاعات دقیقی از صفحات و کاری که میخواهید انجام بدید ندادید و با این شرایط احتمالا بهترین پیشنهاد یادگیری بهتر PHP هست. ولی اگر صرفا دنبال حل کردن این موضوع خاصتون هستید کدهای زیر رو جایگزین کدهایی که خودتون ارسال کردید، بکنید و مجدد تست کنید:
<?php
include 'mdb.php';
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['sub'])){
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$email = $_POST['email'];
$uname = $_POST['uname'];
$pword = $_POST['pword'];
$bdate = $_POST['bdate'];
$gnder = $_POST['gnder'];
$sender = $connect->prepare("INSERT INTO users SET firstname=?, lastname=?, email=?, username=?, password=?, birthdate=?, gender=?");
$sender->bindValue(1, $fname);
$sender->bindValue(2, $lname);
$sender->bindValue(3, $email);
$sender->bindValue(4, $uname);
$sender->bindValue(5, $pword);
$sender->bindValue(6, $bdate);
$sender->bindValue(7, $gnder);
$sender->execute();
}
?>
همچنین دقت کنید که این کدها رو داخل همون صفحه فرمتون بذارید و بعد مقدار action المنت form تون رو هم همون صفحه تنظیم کنید یا اینکه خالی بگذارید تا پیشفرض همون صفحه تنظیم بشه.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟