درج و فراخوانی از دیتابیس

tinya

Member
وقتی کاربر لاگین میکنه، به صفحه ای دسترسی پیدا می کنه که داخل اون چندتا فیلد داره و با تکمیل کردنشون، اونها در دیتابیس ثبت میشن (تا اینجاش درسته)

ولی در جدول دیتابیسم یه فیلد از نوع date درج کردم که وقتی کاربر اون صفحه رو ارسال می کنه، خودش اتوماتیک در دیتابیس تاریخ همون روز رو بهش اختصاص بده، اما در فیلد date نوشته 00-00-0000
چکار کنم که تاریخ خودش در اون سطر درج بشه؟

حالا می خوام به این قسمت یه لینک هم اختصاص بیابد (نمی دونم درست گفتم یا نه)
ولی به این صورت که هر کسی که اون پارامترها رو در دیتابیس ارسال می کنه، دیگران مقدار اون ارسال ها رو در قالب یک صفحه ببینند (یعنی برای هر سطری از داده هایی که یک کاربر ارسال کرده، یه لینکی ساخته بشه)

و یکی هم اینکه مثلا ما در دیتابیس دوتا جدول داریم، که یکیش مربوط به اطلاعات رجیستر کاربران هست و دیگری مربوط به اطلاعات این صفحه ای که کاربران ثبت می کنند. حالا وقتی کاربران در این جدول دوم اطلاعات رو ارسال می کنند، چطور بفهمیم که هر سطر از این اطلاعات رو کدوم کاربر ارسال کرده؟

فکر کنم زیاد شد. عذز خواهی می کنم
ممنون می شم کمک کنید...
 

Masoud1365

مدیر انجمن
ولی در جدول دیتابیسم یه فیلد از نوع date درج کردم که وقتی کاربر اون صفحه رو ارسال می کنه، خودش اتوماتیک در دیتابیس تاریخ همون روز رو بهش اختصاص بده، اما در فیلد date نوشته 00-00-0000
چکار کنم که تاریخ خودش در اون سطر درج بشه؟
خب حتما تاریخ رو timestamp ایجاد کردید !
ولی به این صورت که هر کسی که اون پارامترها رو در دیتابیس ارسال می کنه، دیگران مقدار اون ارسال ها رو در قالب یک صفحه ببینند (یعنی برای هر سطری از داده هایی که یک کاربر ارسال کرده، یه لینکی ساخته بشه)
id اون رکورد رو در url بزارید و وقتی کاربر اون آدرس رو وارد کرد با همون id رکورد رو پیدا کنید ! مثلا
PHP:
site.com/news.php?id=1
و یکی هم اینکه مثلا ما در دیتابیس دوتا جدول داریم، که یکیش مربوط به اطلاعات رجیستر کاربران هست و دیگری مربوط به اطلاعات این صفحه ای که کاربران ثبت می کنند. حالا وقتی کاربران در این جدول دوم اطلاعات رو ارسال می کنند، چطور بفهمیم که هر سطر از این اطلاعات رو کدوم کاربر ارسال کرده؟
با استفاده از کلید خارجی !
 

tinya

Member
مسعود جان...

نوع تاریخ رو date گذاشتم که بصورت 00-00-0000 در دیتابیس ثبت می کرد، ولی اگر روی timestamp بگذارم، درست میشه. یعنی تاریخ ثبت میشه ولی ساعت رو هم ثبت میکنه
حالا رو چی بگذارم که فقط تاریخ رو ثبت کنه؟ اگر بخوام به تاریخ شمسی ثبت بشه چطور؟

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

با تشکر
 

Masoud1365

مدیر انجمن
عرض کردم که شما حتما به صورت timestamp میفرستید که این جوری میشه !
کلا timestamp بهتر است ! همه چیز رو ثبت میکنه شما هر جور که میخوایی نمایشش بده ! با استفاده jdate هم می تونی شمسی نمایشش بدی !
در مورد کلید خارجی میشه لطفا بگی چطور باید انجامش بدم؟ زیاد آشنا نیستم
اینم یه سرچ تو انجمن بزن اگر که متوجه نشدی بگو تا یه آموزش بزارم
 

tinya

Member
قبلا روی timestamp نبود و همه رو 0 نشون می داد
حالا که روی timestamp گذاشتم درست شده ولی تاریخ رو با ساعت ثبت می کنه که نمی خوام ساعت ثبت بشه
از کد تقویم جلالی هم استفاده می کنم. البته وقتی می خوام در صفحات تاریخ رو نشون بدم استفاده می شه
در دیتابیس چجوری تاریخ رو شمسی ثبت کنم؟ که موقع فراخوانی از دیتابیس هم شمسی نشان داده بشه؟

کلید خارجی و هم سرچ زدم فقط این بود
http://forum.majidonline.com/showthread.php?t=154986&highlight=%DA%A9%D9%84%DB%8C%D8%AF+%D8%AE%D8%A7%D8%B1%D8%AC%DB%8C
اگر یه منبع یا توضیح بگذاری ممنون میشم
با تشکر
 

farik

Well-Known Member
با سلام..
شما باید یک فیلد به اسم id یا هر چیزی مثل این رو باید مشخص کنین..بعد وقتی میخواین ببینین که تو تیبل دیگه هم همچین چیزی با همچین ایدی هست یا نه..برای ایینکه این ایدی یککتا باشه هم باید index باشه...که تو تاپیکی که لینک دادین هم گفتن..
موفق باشید..
 

Masoud1365

مدیر انجمن
توی دیتا بیس نباید شمسی ذخیره کنید ! همون timestamp ذخیره کنید و با استفاده از jdate هر جا که خواستید تاریخ رو نمایش بدید به صورت شمسی نمایش بدید اگر نخواستید که ساعت و اینا باشه هم میتونید ساعت و اینا رو نمایش ندید !
 

tinya

Member
میشه یه نمونه از ساختار دیتابیسی که در اون دو تا جدول با کلید خارجی به هم وصل شدن بگذارید؟

یا نحوه تعریف کلید خارجی رو توضیح بدید؟

با تشکر
 

tinya

Member
ممنون از لینک هایی که زحمت کشیدید
دیتابیس رو ایجاد کردم و می خواستم بفرمائید که آیا ساختار این چنینی صحیح هست یا خیر

کد:
CREATE TABLE `members` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `fname` varchar(100) NOT NULL,
  `lname` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  `login` varchar(100) NOT NULL,
  `password` varchar(32) NOT NULL,
  `vcode` varchar(100) NOT NULL,
  `active` bit(1) NOT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
CREATE TABLE `details` (
  `did` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(100) NOT NULL,
  `auth` varchar(100) NOT NULL,
  `draft` varchar(100) NOT NULL,
  `mess` varchar(100) NOT NULL,
  `date` timestamp NOT NULL,
  `code` varchar(100) NOT NULL,
  `members_uid` INT NOT NULL,
  INDEX (`members_uid`),
  FOREIGN KEY (`members_uid`)
  REFERENCES `members`(`uid`)
  ON DELETE CASCADE ON UPDATE CASCADE,
  PRIMARY KEY (`did`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

برای جدول دوم از یه کوئری استفاده می کردم که اطلاعات ارسالی کاربر رو در دیتابیس ثبت می کرد
اما الان که یه فیلد در این جدول اضافه شده (کلید خارجی members_uid) کوئری خطا می ده. آیا باید مقداری هم برای این در نظر بگیرم؟ چگونه...

لطفا راهمایی بفرمائید / با تشکر
 
آخرین ویرایش:

tinya

Member
دوستان خیلی به این بخش نیاز دارم...

ممکنه لطفا یه بررسی بفرمائید؟
 

masima

Member
برای جدول دوم از یه کوئری استفاده می کردم که اطلاعات ارسالی کاربر رو در دیتابیس ثبت می کرد
اما الان که یه فیلد در این جدول اضافه شده (کلید خارجی members_uid) کوئری خطا می ده. آیا باید مقداری هم برای این در نظر بگیرم؟ چگونه...
به نظر میرسه کوئری که استفاده میکنید درست نباشه!
کوئری و خطایی که نشون میده رو بگذارید تا دوستان بهتر شما رو راهنمایی کنند.
 

tinya

Member
کد:
CREATE TABLE `members` (
  `mid` int(11) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(100) NOT NULL,
  `lastname` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  `username` varchar(100) NOT NULL,
  `password` varchar(32) NOT NULL,
  `verifycode` varchar(100) NOT NULL,
  `active` bit(1) NOT NULL,
  PRIMARY KEY (`mid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `subjects` (
  `bid` int(11) NOT NULL AUTO_INCREMENT,
  `sub` varchar(100) NOT NULL,
  `draft` varchar(100) NOT NULL,
  `place` varchar(100) NOT NULL,
  `message` varchar(100) NOT NULL,
  `date` timestamp NOT NULL,
  `sid` varchar(100) NOT NULL,
  `members_mid` INT NOT NULL,
  INDEX (`members_mid`),
  FOREIGN KEY (`members_mid`)
  REFERENCES `members`(`mid`)
  ON DELETE CASCADE ON UPDATE CASCADE,
  PRIMARY KEY (`bid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

دوست عزیز این ساختار دیتابیس از نظر اجرا و اختصاص کلید خارجی صحیح هست؟

PHP:
$qry = "INSERT INTO books(sub, draft, place, message, sid) VALUES('$sub','$draft','$place','$message','$sid')";

کاربر بعد از لاگین به صفحه ای دسترسی پیدا می کنه که در اون فیلدهایی مرتبط با جدول subjects ایجاد شده
و با تکمیل و ارسال اون فیلدها، اطلاعات در جدول subjects ثبت می شوند
حالا می خوام ببینم هر سطر از اطلاعات در جدول subjects توسط کدام کاربران ارسال شده اند...

با تشکر و سپاس
 

Masoud1365

مدیر انجمن
خب باید با یه کوئری اطلاعات رو بگیرید !
فرض میکنیم id کاربر 1 هست !
مثال :
PHP:
$user_id = 1;// farz mikonim ke id karbare ma dar db 1 hast !
$sql = "SELECT * FROM `subject` WHERE `members_mid` = '$user_id' ORDER BY `id`";
 

tinya

Member
مسعود جان الان کاربر وقتی فیلدها رو تکمیل می کنه که ارسال کنه، کوئری خطا می ده
در پست های اول شما کلید خارجی رو پیشنهاد دادید و سعی کردم این کار رو انجام بدم
ولی نمی دونم صحیح انجام دادم یا نه و اشکال کجاست

پیش از اینکه کلید خارجی اختصاص بدم کاربر اطلاعات رو می تونست درج کنه ولی وقتی دیتابیس رو می دیدم، مشخص نمی شد که هر سطری رو کدام کاربر ارسال کرده
 

tinya

Member
به این صورت ایجاد کردم ولی باز هم نشد

PHP:
$members_mid = clean($_POST['mid']);
 
$qry = "INSERT INTO books(sub, draft, place, message, sid, members_mid) VALUES('$sub','$draft','$place','$message','$sid','$mid')";
 

masima

Member
$members_mid = clean($_POST['mid']);

$qry = "INSERT INTO books(sub, draft, place, message, sid, members_mid) VALUES('$sub','$draft','$place','$message','$sid','$mid')";
خوب دوست عزیزم $mid این چی هست؟
شما مقدار آیدی رو به روش خودتون ریختید توی
$members_mid و ازش استفاده نکردید!
خوب باید همین رو بریزید توی جدولتون دیگه!


بعدشم این چه دستوری هست میشه توضیح بدین من نمیدونم اینو؟
clean?
اگه خطا میده متن خطا رو بنویسید بی زحمت

 

tinya

Member
درواقع مقدار members-mid رو معادل mid که همون مقدار id کاربر هست قرار دادم
بعدهم در کوئری گذاشتم که در جدول ثبت کنه

خطایی براش تعریف نشده که نشون داده بشه ولی اطلاعاتی رو در جدول ثبت نمی کنه

PLEASE HELP ME...
 

جدیدترین ارسال ها

بالا