مشکل در ذخیره کردن اطلاعات در دیتابیس

php -
5 ماه پیش توسط وصال علی زاده آپدیت شد
آفلاین
user-avatar
heather ( 4448 تجربه )
3 سال پیش
تخصص : برنامه نویس بک اند

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

0

سلام خدمت شما استاد موسوی و کاربران محترم سایت .
اقای موسوی اموزشاتون خیلی عالیه .فقط یک مشکلی واسم پیش اومده .در قسمت 21 شی گرایی در php در کلاس DB .متد create رو ساختم به اون روش شما ولی اطلاعات رو در صفحه ی register.php فقط برای یک بار در table user ذخیره میکنه.حتی منم redirect می کنه به صفحه ی اصلی ولی برای دومین بار که می خوام امتحان کنم دیگه row دیگری اضافه نمیکنه .نمیدونم این مشکل مربوط به کد نویسیه یا در mysql و در table مربوطه.؟اگه میتونید راهنماییم کنین.
وااقعا ممنونم از شما و وقتی که میذارین.

آفلاین
user-avatar
محمد عبدی ( 8555 تجربه )
3 سال پیش
تخصص : Full Stack Developer

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

0

سلام دوست عزیز ، اگه لطف کنید کد هایی که زدید رو اینجا بنویسید ، بیشتر میتونیم کمکتون کنیم

آفلاین
user-avatar
heather ( 4448 تجربه )
3 سال پیش
تخصص : برنامه نویس بک اند

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

0

این کلاس مربوط به ارتباط با دیتابیس از طریق pdo و متد create مربوط به گرفتن اطلاعات و insert کردن و bind کردن(از طریق متد bindvalue())و در نهایت اجرا کردن یا execute کردن این دستور insert است.
class DB
{
protected $pdo;
protected $table;
protected $stmt;
protected $bind = [];
protected $fetchMode = \PDO::FETCH_OBJ;

public function __construct()
{
    $config = require __DIR__ . '/../config.php';
    try {
        $this->pdo = new \PDO("mysql:host=127.0.0.1;dbname={$config['db']['database']}",$config['db']['username'] , $config['db']['password']);
    } catch (\Exception $e) {
        die('Error : ' . $e->getMessage());
    }
}

public function create($data)
{
    $field = join(', ', array_keys($data));
    $param = ':'. join(', :' , array_keys($data));

    $this->stmt = $this->pdo->prepare("INSERT INTO $this->table ($field) VALUES ($param)");

    $this->bind = $data;
    $this->bindValue();

    return $this->stmt->execute();
}

private function bindValue()
{
    foreach ($this->bind as $key => $value) {
        $this->stmt->bindValue(":$key" , $value);
    }
}

}

class UserController extends Controller
{
public function register()
{
if(! request()->isPost())
return;

    $rules = [
        'name' => 'required',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:6|max:20',
        'confirm_password' => 'confirm:password'
    ];

    if(! $this->validation(request()->all() , $rules)) {
        return;
    }

در یک فایل دیگه اومدیم کلاس register رو ساختیم و درون اون کلاس Users رو که از کلاس DB ارث بری کرده رو تبدیل به شی ء کردیم.بامتد create اطلاعات رو از فیلدها گرفتیم البته قبلا ولدیشن رو انجام دادیم ولی اونو ننوشتم چون فکر کنم نیازی نیس چون قبلا تست شده و دقیق کار می کنه.created_at هم مربوط به زمانیه که کاربر register کرده و برای اون پکیج Carbon رو نصب کردیم از طریق composer.و در اخر اگه ذخیره کردن اطلاعات با موفقیت انجام بشه ما رو ریدایرکت می کنه یه صفحه ی اصلی.

    $user = new Users();
    $success = $user->create([
        'name' => request('name'),
        'email' => request('email'),
        'password' => password_hash(request('password') , PASSWORD_BCRYPT , ['cost' => 12]),
        'created_at' => Carbon::now()
    ]);

    if($success) {
           //login....
    }

    $this->flash->success('عضویت شما با موفقیت انجام شد');

    redirect();
    return;
}

و در اخز هم در صفحه ی register.php کلاس register رو تبدیل به شیء کردیم و فراخوانیش کردیم:

$user = new \App\Controller\UserController();
$user->register($_POST);

کدها همگی کار می کنن ولی فقط برای یک بار اطلاعات ذخیره میشه! در اموزش اقای موسوی که دیدم همه چیز عالی پیش رفت ولی من واقعا نمیدونم کجای کار رو اشتباه کردم؟
ممنون از شما من تازه کارم اگه می تونید من رو راهنمایی کنین.

آفلاین
user-avatar
heather ( 4448 تجربه )
3 سال پیش
تخصص : برنامه نویس بک اند

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

0

خواهش می کنم اگه میتونین کمکم کنین این مشکل معمول نیست .تو سایتهای خارجی گشتم ولی چیزی نفهمیدم.کدهام کار میکنه ولی اطلاعات فقط برای یک بار save میشه .

آفلاین
user-avatar
علیرضا بهمئی ( 16631 تجربه )
3 سال پیش
تخصص : برنامه نویس

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

0

از لحاظ منطقی که درسته. هر کاربر باید یه بار ثبت بشه.
ولی اگه میخوای چند بار ثبت بشه باید برا اعتبار سنجی ایمیل unique رو برداری

آفلاین
user-avatar
heather ( 4448 تجربه )
3 سال پیش
تخصص : برنامه نویس بک اند

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

0

با سلام ممنون از جوابتون...ولی من هر بار واسه ی امتحان کردن نام های متفاوت و جیمیلهای متفاوت وارد کردم ولی نتیجه همین بود.
یعنی بازم منطقیه؟
ولیدیشن unique رو هم البته پاک کردم تا ببینم چی میشه ولی نتیجه همون بود.
5 روزه که گیر کردم .هه ی میام کدهامو پاک می کنم دوباره مینویسم .اموزش رو هم که نگا می کنم همونه.ولی واسه من اینجوری هستش .راستش هه ی می خواستم next بزنم ولی نمیتونم تا اینو نفهمیدم چرا اینجوریه بقیشم یاد نمیگیرم!
راستش چون این روش مثل فریمورکهای پیشرفتس واسه این همین روش واسم خوبه چون بعدا میخوام برم سراغ لاراول.
کسی میتونه بهم بگه اگه کجا اشتباه کنم منجر به این میشه؟

آفلاین
user-avatar
heather ( 4448 تجربه )
3 سال پیش
تخصص : برنامه نویس بک اند

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

1

خیلی ممنون ازتون مشکل رو رفع کردم....

آفلاین
user-avatar
heather ( 4448 تجربه )
3 سال پیش
تخصص : برنامه نویس بک اند

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

1

خیلی ممنون ازتون مشکل رو رفع کردم....

آفلاین
user-avatar
heather ( 4448 تجربه )
3 سال پیش
تخصص : برنامه نویس بک اند

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

0

خیلی ممنون ازتون مشکل رو رفع کردم....

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

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

0

سلام چطوری رفع کردین منم این مشکل رو دارم تورو خدا بگین

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

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

0

دوستان برای من هم همین مشکل پیش اومده چطوری درست کنم ؟

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