ایجاد دیتابیس تکراری در هنگام رفرش شدن صفحه

php -
1 ماه پیش توسط علی ولی‌نژاد آپدیت شد
آفلاین
user-avatar
علی ولی‌نژاد ( 41983 تجربه )
1 ماه پیش
تخصص : طراح گرافیک و برنامه نویس

لینک کوتاه اشتراک گذاری

3

سلام دوستان وقت بخیر
من با 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();
}
?>

@ali.bayat @mhyeganeh @milad @Rp76 @hesammousavi

بهترین پاسخ
آفلاین
user-avatar
محمدحسن یگانه
1 ماه پیش

در کل نمیشه پاسخ مشخص داد. چون اطلاعات دقیقی از صفحات و کاری که میخواهید انجام بدید ندادید و با این شرایط احتمالا بهترین پیشنهاد یادگیری بهتر 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 تون رو هم همون صفحه تنظیم کنید یا اینکه خالی بگذارید تا پیشفرض همون صفحه تنظیم بشه.

آفلاین
user-avatar
رضا پارسیان ( 35666 تجربه )
1 ماه پیش
تخصص : توسعه دهنده C# , Php

لینک کوتاه اشتراک گذاری

2

سلام

if(isset($_POST['sub'] && !empty($_POST['sub'])){

}
آفلاین
user-avatar
محمدحسن یگانه ( 96119 تجربه )
1 ماه پیش
تخصص : Full-Stack Web Developer Freelancer

لینک کوتاه اشتراک گذاری

3

منظورتون از اینکه یک مقدار پیش فرض ذخیره میشه چیه...؟ داده اش از کجا میاد؟!

به طور کلی اگر این اطلاعات از طریق submit کردن فرم هست یکی از راه هاش اینه که باید مطمئن بشید تکه کد بالایی که ارسال کردید فقط در شرایطی اجرا بشه که کاربر فرم رو با متد POST سابمیت کرده. یعنی یک http ریکوئست با متد POST ارسال شده باشه. (اینجوری دیگه رفرش صفحه درباره اش صدق نمی‌کنه و اصلا اجرا نمی شه)

مثلا با کد زیر می‌تونید از این قضیه مطمئن بشید:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    //Request is POST!
}

شرط بالا رو می‌تونید با شرط خودتون و یا کد آقای پارسیان که بالاتر نوشتند ترکیب کنید تا به نتیجه مورد نظرتون برسید.

آفلاین
user-avatar
علی ولی‌نژاد ( 41983 تجربه )
1 ماه پیش
تخصص : طراح گرافیک و برنامه نویس

لینک کوتاه اشتراک گذاری

3

@mhyeganeh
یعنی یکسری داده ک قبلا وارد کرده بودم رو به دیتابیس ارسال میکنه اون هم در حالی که تکست اینپوت ها خالی هستن :/

آفلاین
user-avatar
محمدحسن یگانه ( 96119 تجربه )
1 ماه پیش
تخصص : Full-Stack Web Developer Freelancer

لینک کوتاه اشتراک گذاری

1

مقدار action رو برای المنت form آدرس همون صفحه فرم قرار بدید. و یا اینکه بعد از انجام عملیات ذخیره در دیتابیس کاربر رو به یک صفحه دیگر ریدایرکت کنید.

آفلاین
user-avatar
علی بیات ( 419779 تجربه )
1 ماه پیش
تخصص : توسعه دهنده ارشد وب

لینک کوتاه اشتراک گذاری

0

مواردی که دوستان گفتند رو بررسی کن

میتونی با یه کوئری چک کنی و اگر داده ها تکراری هستند واردشون نکنی
مثلا اگر این ایمیل از قبل داخل دیتابیس باشه
نباید اطلاعات تکراری وارد کنی

SELECT EXISTS(SELECT * FROM users WHERE email=`[email protected]`)

کوئری بالا true/false برمیگردونه

همچنین میتونی در سطح دیتابیس چک کنی
و مثلا فیلد ایمیل رو UNIQUE در نظر بگیری

آفلاین
user-avatar
علی ولی‌نژاد ( 41983 تجربه )
1 ماه پیش
تخصص : طراح گرافیک و برنامه نویس

لینک کوتاه اشتراک گذاری

3

خیلی ممنون @ali.bayat
مشکل اینه که در باب PHP هیچی بلد نیستم فقط بلدم متغیر تعریف کنم😶 و دوتا کد بالایی که دوستان عرض کردند رو خواستم امتحان کنم ولی فک کنم اشتباه توی کدم وارد میکردم💔. واقعیتش فقط از css و html سردرمیارم و ازطریق یک آموزش ویدیوی این مبحث رو دنبال میکنم توی اون هم این مشکل رو برطرف نکردن من هم موندم که خب چیکار کنم دیتابیسم با موارد تکراری پر نشه.

آفلاین
user-avatar
محمدحسن یگانه ( 96119 تجربه )
1 ماه پیش
تخصص : Full-Stack Web Developer Freelancer

لینک کوتاه اشتراک گذاری

2

در کل نمیشه پاسخ مشخص داد. چون اطلاعات دقیقی از صفحات و کاری که میخواهید انجام بدید ندادید و با این شرایط احتمالا بهترین پیشنهاد یادگیری بهتر 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 تون رو هم همون صفحه تنظیم کنید یا اینکه خالی بگذارید تا پیشفرض همون صفحه تنظیم بشه.

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.