PDA

View Full Version : ثبت id کاربر در جدول دیگر برای ارتباط دو جدول



theboy
پنج شنبه 30 آذر 1391, 12:13 عصر
سلام.
همونطور که تو تاپیک قبلی گفتم من دارم یه اسکریپت وبلاگ دهی مینویسم.
الان فرم ثبت نام کامل شده ولی یه مشکلی هست.

من دو تا قسمت در دیتابیس ساختم:
user
blog

در قسمت user یه تیبل دارم به نام id که یه عددی رو به ترتیب به شخص ثبت نام کننده میده(مثلا دهمین کسی که ثبت نام کرد عددش 10 هست!)
حالا می خوام یه کاری کنم که این عدد در بخش blog در تیبل uid ذخیره بشه!(همونطور که احتمالا متوجه منظورم شدید میخوام برای هماهنگی وبلاگ و کاربر ازش استفاده کنم)

چطوری این کارو کنم؟

thacker
پنج شنبه 30 آذر 1391, 12:46 عصر
فکر کنم باید از دستور left join استفاده کنی !!

http://www.w3schools.com/sql/sql_join_left.asp

Unique
پنج شنبه 30 آذر 1391, 14:02 عصر
دوست عزیز هر کاربر وقتی میتونه توی blog مطلب بگذاره که لاگین کرده باشه و وقتی با username و password لاگین کنه شما میتونین مثلا id شخص را بدست بیارین (از طریق همون username و password) . توی session بگذارین ! حالا هر وقت میخواین یک مطلب را توی blog ثبت کنید (insert کنین) از همون id توی session استفاده میکنید.

theboy
پنج شنبه 30 آذر 1391, 14:08 عصر
دوست عزیز هر کاربر وقتی میتونه توی blog مطلب بگذاره که لاگین کرده باشه و وقتی با username و password لاگین کنه شما میتونین مثلا id شخص را بدست بیارین (از طریق همون username و password) . توی session بگذارین ! حالا هر وقت میخواین یک مطلب را توی blog ثبت کنید (insert کنین) از همون id توی session استفاده میکنید.
نه مشکل این نیست!
شما فرض کن ما 5 تا وبلاگ داریم و یه کاربر لوگین کرده. وقتی کاربر مطلب ارسال می کنه باید بره تو یکی از وبلاگ ها دیگه! راه حلی که به ذهن من رسیده هماهنگی دو ID هست بین وبلاگ و کاربر! اگر راه دیگه ای مد نظر دارید بگید.

theboy
پنج شنبه 30 آذر 1391, 14:22 عصر
فکر کنم باید از دستور left join استفاده کنی !!

http://www.w3schools.com/sql/sql_join_left.asp
ممنون از شما.
دیدم ولی نه این به دردم نمی خوره.

من هر دو ستون رو در هردو قسمت دارم.
فقط می خوام دقیقا عدد یکیشون به اونیکی هم اضافه بشه!

matrixhassan
پنج شنبه 30 آذر 1391, 14:36 عصر
با سلام

به نظر من شما هنگام ثبت نام کاربر بعد از عمل insert میری و تو این جدوا فیلد id آخرین نفر ثبت نام کنندرو میگیری و بعد همونجا به اون یکی یعنی به blog وصل میشی و انجا یه فیلدی مثلا userid درست میکنی و این کدو تو اون قسمت میزنی

theboy
پنج شنبه 30 آذر 1391, 14:54 عصر
با سلام

به نظر من شما هنگام ثبت نام کاربر بعد از عمل insert میری و تو این جدوا فیلد id آخرین نفر ثبت نام کنندرو میگیری و بعد همونجا به اون یکی یعنی به blog وصل میشی و انجا یه فیلدی مثلا userid درست میکنی و این کدو تو اون قسمت میزنی
میشه واضح تر بگید؟ متوجه نشدم

matrixhassan
پنج شنبه 30 آذر 1391, 15:08 عصر
اگه بخوای که آی دی کاربرو تو uid ذخیره کنی به شکل بالاست

یعنی هنگام ثبت نام میای و اطلاعاتو تو صفحه مثلا insertuser چک میکنی و اگه مشکلی نداشت تو جدول user ثبت میکنی و میتونی بعد با دستور



SELECT id FROM `user`ORDER BY `id` DESC LIMIT 1

id آخرین کاربر که همون کاربر در حال ثبت نام رو میگیری بعد میری تو جدول uid یه فیلدی درست میکنی مثلا userid و این شماره رو میزنی اونجا و و بقیه اطلاعات مربوط به این کاربرو تو uid بر اساس این فیلد تنظیم میکنی

theboy
پنج شنبه 30 آذر 1391, 15:30 عصر
اگه بخوای که آی دی کاربرو تو uid ذخیره کنی به شکل بالاست

یعنی هنگام ثبت نام میای و اطلاعاتو تو صفحه مثلا insertuser چک میکنی و اگه مشکلی نداشت تو جدول user ثبت میکنی و میتونی بعد با دستور



SELECT id FROM `user`ORDER BY `id` DESC LIMIT 1

id آخرین کاربر که همون کاربر در حال ثبت نام رو میگیری بعد میری تو جدول uid یه فیلدی درست میکنی مثلا userid و این شماره رو میزنی اونجا و و بقیه اطلاعات مربوط به این کاربرو تو uid بر اساس این فیلد تنظیم میکنی

منم اول کاری شبیه به این کردم:

در فایل signup.php اطلاعات رو گرفتم.
$username
$id
$pass
و...
بعد با INSERT ریختمش توی جدول USER.

بعد خواستم این کارو بکنم:


$uid = mysql_query("SELECT `id` FROM `user` WHERE `username`='$username'");
mysql_query("INSERT INTO `blog` SET `uid`='$uid'")
ولی مشکل اینجاست که حتی متقیر $uid هم به وجود نمیاد! یعنی انگار باید بعد از ساخته شده کاربر صفحه ریلود بشه بعد بشه اطلاعاتش رو خوند!

matrixhassan
پنج شنبه 30 آذر 1391, 15:41 عصر
بعد از اجرای دستور mysql_query باید یه واکشی هم بکنی این کارو انجام میدی ؟

مثلام با ستور mysql_fetch_assoc.

theboy
پنج شنبه 30 آذر 1391, 16:11 عصر
بعد از اجرای دستور mysql_query باید یه واکشی هم بکنی این کارو انجام میدی ؟

مثلام با ستور mysql_fetch_assoc.
نه!
اصلا نمی دونم چی هست؟ :d
میشه بیشتر توضیح بدی؟

matrixhassan
پنج شنبه 30 آذر 1391, 16:26 عصر
http://php.net/manual/en/function.mysql-fetch-assoc.php

theboy
پنج شنبه 30 آذر 1391, 16:47 عصر
http://php.net/manual/en/function.mysql-fetch-assoc.php
خوب این چیکار میکنه؟
چه ربطی به کار من داره؟

MRmoon
پنج شنبه 30 آذر 1391, 16:58 عصر
ببخشید!

شما که تا اینجا یاد نگرفتید بهتر نیست اول رو پروژه های کوچیک کار کنید تا اینکه یه دفعه برید سراغ وبلاگدهی؟

theboy
پنج شنبه 30 آذر 1391, 17:44 عصر
ببخشید!

شما که تا اینجا یاد نگرفتید بهتر نیست اول رو پروژه های کوچیک کار کنید تا اینکه یه دفعه برید سراغ وبلاگدهی؟
تجربه به من ثابت کرده برای خوب یاد گرفتن هر کاری باید برم سراغ سخت ترین ها!(از همین راه هم به HTML و CSS مسلط شدم و این قضیه حداقل راجب من صدق می کنه)

PHPرو هم خیلی تازه کار نیستم. شما تمام کدهای موجود برای PHP رو با فایده و کاربردشون حفظ هستی؟ یعنی بخوای یه سیستم بنویسی اصلا به PHP.NETو... سر نمیزنی؟


درضمن اگر شما تا اینجاش رو بلدید بهتر بود جواب سوال رو می دادید! اگرم بلد نیستید که اصلا نباید میزان بلد بودن منو می سنجیدید!

matrixhassan
پنج شنبه 30 آذر 1391, 21:22 عصر
$userid = mysql_query("SELECT id FROM `user`ORDER BY `id` DESC LIMIT 1");
$resultuser = mysql_fetch_assoc($userid);
mysql_query("INSERT INTO `blog` SET `uid`=".$resultuser["code"]);


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

theboy
پنج شنبه 30 آذر 1391, 22:10 عصر
$userid = mysql_query("SELECT id FROM `user`ORDER BY `id` DESC LIMIT 1");
$resultuser = mysql_fetch_assoc($userid);
mysql_query("INSERT INTO `blog` SET `uid`=".$resultuser["code"]);


این کد شاید کمکت کنه فقط شاید نیاز باشه یه جور دیگه بنوسی بقیشو خودت حل میکنی
خیلی ممنون از زحمتی که میکشی ولی نشد :(

theboy
پنج شنبه 30 آذر 1391, 22:29 عصر
الان یه کاری کردم که بهم ثابت شد مشکل نمایش اشتباه id به خاطر ریلود صفحه نیست! (یه سیشن ساختم و بعد از ساخته شدن دیتابیس فرستادم به یه صفحه ی دیگه که id رو نمایش بده ولی بازم عدد3 رو نشون داد!!)

به نظرتون دلیلش چیه؟

فقط عدد 3 رو نشون میده!

Unique
جمعه 01 دی 1391, 02:26 صبح
خیلی دوست دارم بهتون کمک کنم اما متاسفانه شما دقیقا نمیگید چیکار میخواین بکنین ! و یکم هم عجیب صحبت میکنید ! مثلا :


در قسمت user یه تیبل دارم به نام id
یعنی چی !؟ میخواین بگین یه table دارین به نام user که یک فیلدی به نام id داره ؟


حالا می خوام یه کاری کنم که این عدد در بخش blog در تیبل uid ذخیره بشه!
یعنی چی ؟ باز هم منظورتون اینه یک table دارین به نام blog که توش یک فیلد داره به نام uid که به فیلد خارجی هست و به جدول user و فیلد id اشاره میکنه !؟

حالا اصلا وقتی کاربری ثبت نام میکنه قراره براش چیکار کنین ؟ یک رکورد به جدول blog اضافه کنین ؟!


شما فرض کن ما 5 تا وبلاگ داریم و یه کاربر لوگین کرده. وقتی کاربر مطلب ارسال می کنه باید بره تو یکی از وبلاگ ها دیگه!
ببینم مگ هر کاربر توی blog خودش مطلب ارسال نمیکنه ؟! منظورتون اینه هر کاربر میتونه 5 تا blog داشته باشه !؟

ببینید شما تا نیاین دقیق و درست سوالتون را نپرسین به جواب نمیرسین ، خیلی از بچه ها تا میبینن پرسش کننده خودش نمیدونه چی میخواد رغبتی به جواب هم پیدا نمیکنند!
شرمنده یکم سر راست گفتم اما خوب دوست خوب اونه که دوستش را در مسیر درست قرار بده ! ;)

theboy
جمعه 01 دی 1391, 02:45 صبح
خیلی دوست دارم بهتون کمک کنم اما متاسفانه شما دقیقا نمیگید چیکار میخواین بکنین ! و یکم هم عجیب صحبت میکنید ! مثلا :


یعنی چی !؟ میخواین بگین یه table دارین به نام user که یک فیلدی به نام id داره ؟


یعنی چی ؟ باز هم منظورتون اینه یک table دارین به نام blog که توش یک فیلد داره به نام uid که به فیلد خارجی هست و به جدول user و فیلد id اشاره میکنه !؟

حالا اصلا وقتی کاربری ثبت نام میکنه قراره براش چیکار کنین ؟ یک رکورد به جدول blog اضافه کنین ؟!


ببینم مگ هر کاربر توی blog خودش مطلب ارسال نمیکنه ؟! منظورتون اینه هر کاربر میتونه 5 تا blog داشته باشه !؟

ببینید شما تا نیاین دقیق و درست سوالتون را نپرسین به جواب نمیرسین ، خیلی از بچه ها تا میبینن پرسش کننده خودش نمیدونه چی میخواد رغبتی به جواب هم پیدا نمیکنند!
شرمنده یکم سر راست گفتم اما خوب دوست خوب اونه که دوستش را در مسیر درست قرار بده ! ;)


ببینید دو تا table دارم : user و blog

userبرای کاربرا هست و یه فیلد id داره که به این شکل ایجاد شده:


`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,

یعنی هر کاربری که ثبت میشه به طور اتوماتیک یه شماره بهش تعلق بگیره.

حالا من می خوام این شماره تو table بلاگ هم در فیلد uid باشه!(یعنی مثلا ما 5 تا وبلاگ داریم. شما میای ثبت نام می کنی و ششمین وبلاگ رو ثبت می کنی. نام کاربری شما در table یوزر و وبلاگ شما در table بلاگ ثبت خواهد شد. خوب حالا کدوم یکی از 6 تا وبلاگ متعلق به شماست؟ جواب: اونی که id شما رو داره.(uid=id))

حالا من موندم چطوری id کاربر رو که در table یوزر هست و اتوماتیک ساخته میشه، در table بلاگ هم ذخیره کنم؟(با عنوان uid)

MRmoon
جمعه 01 دی 1391, 07:55 صبح
الان
شما خودت آیدی میدی؟ یعنی میگی آخرین آیدی رو پیدا کنه +1 کنه؟

یا نه؟

اگه اینو جواب بدین من میگم بهتون

MRmoon
جمعه 01 دی 1391, 08:06 صبح
عزیز نگا شما وبلاگ ششم رو ثبت میکنی در همون لحظه یه دستور mysql_query میدی که جدول یوزر آخریش رو پیدا کنه مثل این:



$res=mysql_query("SELECT * FROM `users` ORDER BY `id` DESC LIMIT 1");
$row=mysql_feth_assoc($res);
$uid=$row['id'];
$Xres=mysql_query("INSERT INTO `blogs` (`id` ,`name` ,`uid`)
VALUES('$motagheiershoma','$motagheiershoma','$uid ')");

یا اگه این نشد یعنی uid ثبت نشد یا اشتب شد آیدی رو از تیبل یوزرز با دستور وایل هم میشه پیدا کرد

theboy
جمعه 01 دی 1391, 12:13 عصر
الان
شما خودت آیدی میدی؟ یعنی میگی آخرین آیدی رو پیدا کنه +1 کنه؟

یا نه؟

اگه اینو جواب بدین من میگم بهتون
بله آخرین آیدی پیدا میشه و +1 میشه. مثلا الان اگه هیچ عضوی نداشته باشه و من و شما به ترتیب ثبت نام کنیم من میشم 1 شما میشی 2.

theboy
جمعه 01 دی 1391, 12:16 عصر
عزیز نگا شما وبلاگ ششم رو ثبت میکنی در همون لحظه یه دستور mysql_query میدی که جدول یوزر آخریش رو پیدا کنه مثل این:



$res=mysql_query("SELECT * FROM `users` ORDER BY `id` DESC LIMIT 1");
$row=mysql_feth_assoc($res);
$uid=$row['id'];
$Xres=mysql_query("INSERT INTO `blogs` (`id` ,`name` ,`uid`)
VALUES('$motagheiershoma','$motagheiershoma','$uid ')");

یا اگه این نشد یعنی uid ثبت نشد یا اشتب شد آیدی رو از تیبل یوزرز با دستور وایل هم میشه پیدا کرد

اگه مثلا 5 تا وبلاگ همزمان ثبت بشن مشکلی پیش نمیاد؟

MRmoon
جمعه 01 دی 1391, 13:31 عصر
فک نکنم!

شما کل کدت بذار اینجا

Unique
جمعه 01 دی 1391, 14:55 عصر
دوست عزیز برای این کار دو راه وجود داره که راه اول را دوستان اشاره کردند و راه حل خوبی نیست و راه دوم هم خودم اشاره میکنم :

راه اول : ID را از autoincrement خارج نکنی و زمانی که insert را توی جدول user انجام میدی بیای select کنی بر اساس ترتیب نزولی ID و آخری را بیگیری یا اینکه ID را از autoincrement خارج کنی و قبل از insert آخرین ایدی را (با همون ترتیب نزولی) بگیری و +1 کنی و خودت id را توی جدول user ثبت کنی ! اما این روش خوب نیست چون ممکنه دو تا کاربر همزمان ثبت نام کنند و شما برای یکیشون خطا بگیری چون id قبلا برای کسی ثبت شده باشه.

راه دوم : شما به محض اینکه insert را انجام بدی میتونی با تابع mysql_insert_id مقدار id که به صورت autoincrement ذخیره شده بدست بیاری ! این راه حل درسته !

theboy
جمعه 01 دی 1391, 16:38 عصر
دوست عزیز برای این کار دو راه وجود داره که راه اول را دوستان اشاره کردند و راه حل خوبی نیست و راه دوم هم خودم اشاره میکنم :

راه اول : ID را از autoincrement خارج نکنی و زمانی که insert را توی جدول user انجام میدی بیای select کنی بر اساس ترتیب نزولی ID و آخری را بیگیری یا اینکه ID را از autoincrement خارج کنی و قبل از insert آخرین ایدی را (با همون ترتیب نزولی) بگیری و +1 کنی و خودت id را توی جدول user ثبت کنی ! اما این روش خوب نیست چون ممکنه دو تا کاربر همزمان ثبت نام کنند و شما برای یکیشون خطا بگیری چون id قبلا برای کسی ثبت شده باشه.

راه دوم : شما به محض اینکه insert را انجام بدی میتونی با تابع mysql_insert_id مقدار id که به صورت autoincrement ذخیره شده بدست بیاری ! این راه حل درسته !

خوب من به اینم شک دارم!
شما فرض کن ثبت نام می کنی، بالافاصله بعد از شما(در حد میلی ثانیه) یک کاربر دیگه هم ثبت نام می کنه. بعد آخرین id میشه آیدیه اون نه شما! این اتفاق ممکنه بیفته؟

سیستم های بزرگ مثل وردپرس و... هم از این راه استفاده می کنند؟

Unique
شنبه 02 دی 1391, 01:58 صبح
دوست عزیز ! چرا پست ها را کامل نمیخونین !؟ شما id را بزارین روی autoincerement و بعد از insert آخرین شماره id را با تابع mysql_insert_id بخونین و در این صورت تحت هیچ شرایطی مشکلی پیش نمیاد.

theboy
شنبه 02 دی 1391, 09:38 صبح
دوست عزیز ! چرا پست ها را کامل نمیخونین !؟ شما id را بزارین روی autoincerement و بعد از insert آخرین شماره id را با تابع mysql_insert_id بخونین و در این صورت تحت هیچ شرایطی مشکلی پیش نمیاد.
خیلی ممنونم از شما. جواب سوالم رو گرفتم.

از همه ی دوستان عزیزی که کمک کردن تشکر می کنم.