PDA

View Full Version : سوال: دسترسی به بخشی از دیتابیس



hamed-php
دوشنبه 04 بهمن 1389, 11:21 صبح
سلام به دوستان

چطوری میشه به بخشی از دیتابیس دسترسی داشت؟
مثلاً دانشجو با یوزر و پسورد خود وارد سایت میشه و بتونه در یک صفحه فقط اطلاعات و نمره های خودش رو ملاحظه کنه. بعد اگه خواست انتخاب واحد کنه و بتونه بعضی از واحد ها رو حذف یا اصلاح کنه.
آخر هم لیست نهایی انتخاب واحد رو تایید کنه و بفرسته برای مدیر گروه آموزش.

binyaft
دوشنبه 04 بهمن 1389, 12:29 عصر
بوسیله id برای هر رکورد میشه این کار هارو کرد!

hamed-php
دوشنبه 04 بهمن 1389, 14:02 عصر
ممنون
اگه برای هر رکورد یک ID در نظر گرفته بشه، چک کردن این همه ID با چه دستوری امکانپذیر میشود.
ما به فرد یوزر و پسورد بدهیم یا خودش اونارو انتخاب بکنه آیا تفاوتی نداره؟
میشه یه مثال ساده برای اینکه دو کاربر که خودشون تو سایت ثبت نام کنند و اتوماتیک سیستم نام ایمیلشون رو برای یوزرنیم در نظر بگیره بزنید؛
و اونوقت پس از ورودشون، برای یکیشون تو صفحه نمره مثلاً ریاضی باشه 10 و برای اون یکی باشه 18 .
البته نمره هاشون رو مثلاً معلم وارد دیتابیس کرده تا ببینند.

ghasemweb
دوشنبه 04 بهمن 1389, 15:44 عصر
خاصیت فیلد ID باید auto number باشه یعنی خود افزاست و نیازی نیست شما مقدار بدید و این کار رو خود بانک اس کیو ال انجام میده .
خب میتونی صفحه ثبت نام بذاری یا این کار توسط معلم یا انجام بشه بعدش هم میتونی به راحتی اطلاعات رو از بانک بخونی و نمایش بدی

binyaft
دوشنبه 04 بهمن 1389, 17:18 عصر
شما اول mysql رو یاد بگیر ، بعد این سیستم رو بساز :تشویق:

alonemm
دوشنبه 04 بهمن 1389, 19:35 عصر
البته پس از طراحي بانك براي نگه داري ID هم از سشن ها متونيد استفاده كنيد.
(كمي دربارش جستجو كنيد)

hamed-php
چهارشنبه 06 بهمن 1389, 09:43 صبح
ممنون
آیا یک نمونه ساده دارید برای مطالعه بیشتر!

MMSHFE
چهارشنبه 06 بهمن 1389, 11:18 صبح
با سلام، دوست گرامي، شما بايد توي بانك اطلاعاتي براي جداولي كه اطلاعات همه كاربران توش ذخيره ميشه (مثل نمرات و...) يك فيلد ID دانشجو هم اضافه كنيد (مثلاً SID) تا از طريق اون بتونيد متوجه بشيد كه هر نمره مال چه كسي هست و موقع خوندن اطلاعات از بانك اطلاعاتي، توسط شرط where فقط اطلاعات همون دانشجو كه لاگين كرده رو استخراج كنيد. براي مثال، وقتي كه كاربر لاگين كرد يك Session ايجاد كنيد كه ID فرد توي اون ذخيره شده و موقع استخراج اطلاعات، به اين شكل عمل كنيد:


$result = mysql_query('select * from `grades` where (sid='.$_SESSION['id'].')');

اينطوري فقط اطلاعات مربوط به همون كاربر از جدول استخراج ميشه.
اگه باز هم توضيح بيشتري خواستيد، در خدمتم.
موفق و مؤيد باشيد.

hamed-php
چهارشنبه 06 بهمن 1389, 12:02 عصر
ممنون از راهنمایی شما
تلاش میکنم تا درست بشه!

حتماً ادامه خواهد داشت...

hamed-php
پنج شنبه 07 بهمن 1389, 10:00 صبح
سلام
من کد شما رو اجرا کردم.
وقتی result$ رو echo کردم پاسخ زیر چاپ شد:
resource id #5
این ناشی از چیه؟ در حالیکه من همه سطر مربوط به ID رو فراخوانی کرده بودم!

MMSHFE
پنج شنبه 07 بهمن 1389, 10:43 صبح
با سلام، دوست گرامي بايد دقت كنيد كه result$ يك متغير هست كه درحقيقت نقش اشاره گر به جدول بدست اومده از خروجي دستور select رو ايفا ميكنه. بنابراين، اگه ميخواين همه مقادير بدست اومده رو نمايش بديد، به روش زير عمل كنيد:


<?PHP
$result = mysql_query('select * from `grades` where (sid='.$_SESSION['id'].')');
if(mysql_num_rows($result)>0)
{
echo('<TABLE>');
while($row=mysql_fetch_row($result))
{
echo('<TR>');
for($i=0;$i<mysql_num_fields($result);$i++)
{
echo('<TD>'.$row[$i].'</TD>');
}
echo('</TR>');
}
echo('</TABLE>');
}
?>

اميدوارم روش كار رو به راحتي متوجه بشين. در غير اينصورت بفرماييد تا بيشتر توضيح بدم. موفق و مؤيد باشيد.

hamed-php
پنج شنبه 07 بهمن 1389, 11:13 صبح
خیلی ممنون
تمام سطر مربوط به ID چاپ شد.
حالا اگه بخواهیم فقط یک یا چند ستون مشخص از ردیف ID رو چاپ کنم چه تغییراتی ناز هست؟
مثلا ستون چهارم نمره های ریاضی هست و ستون هفتم نمره فیزیک. و میخواهیم فقط همین دو نمره که اعلام شده رو دانش آموز ببینه.
راستی اگه تو جدول بخواهیم چاپ شه چطوریه

ghasemweb
پنج شنبه 07 بهمن 1389, 12:14 عصر
شما باید تو کد دوستمون که گذاشتن به جای حلقه for خودت به دلخواه اون فیلدهایی که میخوای رو نمایش بدی :


<?PHP
$result = mysql_query('select * from `grades` where (sid='.$_SESSION['id'].')');
if(mysql_num_rows($result)>0)
{
echo('<TABLE>');
while($row=mysql_fetch_row($result))
{
echo('<TR>');

echo('<TD>'.$row[2].'</TD>'); // عدد 2 برای نمایش محتوای فیلد سوم تو جدول بانک هست

echo('</TR>');
}
echo('</TABLE>');
}
?>

خب این کد که دوستمون گذاشتن برای نمایش داخل جدول هست .

hamed-php
شنبه 09 بهمن 1389, 10:30 صبح
ممنون
حالا یه سوال دیگه پیش اومد!
اگر از یک فرم که مثلاً 5 تا input داره هر بار یک سری اطلاعات جدید برای دانش آموزی که خودمون لینک فرم رو مشخص کردیم و یک ID تو دیتا بیس به وی اختصاص دادیم بفرستیم ، اولاً اطلاعات تو چه tablei (تیبلی) از دیتابیس باید بره که دانش آموز بتونه همه رکوردها رو وقتی ورود داشت به پنلش ببینه؟ یعنی میخوام بدونم اطلاعات جدید میره تو جدولی که با جدول یوزر و پسورد و آی دی دانش آموز جدا هست یا خیر؟
دوماً اگه بهش چند تا فرم لینک بشه اونوقت چطور میتونه اطلاعات ورودی این فرمها در دیتابیس ذخیره بشه؟ و به محض ورود دانش آموز اطلاعات هر کدوم از این فرمها رو مدیریت کنه!
مثلاً یه فرم مخصوص تکالیف ، یه فرم مخصوص نمره های مستمر و ...

MMSHFE
شنبه 09 بهمن 1389, 12:27 عصر
با سلام، دوست گرامي بايد منظورتون رو دقيق تر توضيح بدين ولي در حالت كلي جداول جداگانه هستن و يك فيلد كليد خارجي دارن كه با كليد اصلي جدول دانش آموزان در ارتباطه (مثلاً فيلد sid هر جدول با فيلد id جدول دانش آموزان مرتبط هست). حالا توي هر جدول وقتي خواستين اطلاعات مرتبط با دانش آموزي كه در حال حاضر لاگين كرده رو استخراج كنيد، كافيه طبق روشي كه گفتم، برحسب مقدار Session جاري دانش آموز، فقط مقادير مربوط به اون رو استخراج كنيد. اگه باز هم سؤالي بود در خدمتم.
موفق و مؤيد باشيد.

hamed-php
شنبه 09 بهمن 1389, 13:13 عصر
سلام

مثلاً من قبلاً نمره ها رو تو دیتابیس بترتیب جلو آی دی - اسم - پسورد میگذاشتم. یعنی همه تو یک table. و همه تو یک ردیف جدول. که وقتی با یوزر و پسورد وارد میشدم بترتیب از ستون چهارم فقط چاپ میکرد با دستور echo - تا هرجا که میخواستم همونطور که فرمودید.
حالا دیگه نمیخوام نمره ها تو همون ردیف باشند. یعنی تو یه جدول دیگه از دیتابیسم باشند. این ارتباطی که شما اشاره کردید چطوریه ؟ تو یه جدول فقط sid - username - password و تو جدول دیگه اطلاعات ارسالی از فرمهای صفحات javascript .
یه چیزی مثل اینباکس که بیایم ببینیم چی برامون اومده ولی تو اینباکس فقط یه متن نامه میاد اینجا از فرم ورودی چند تا اطلاعات میاد مثلاً 5 تا ورودی مثل پیام تبریک، تلفن ایمیل و... که مجزاست بعد اگه دانش آموز خواست بتونه از پنلش اون اطلاعات رو ویرایش هم کنه!

sattaryekta
شنبه 09 بهمن 1389, 14:12 عصر
سلام

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

این سه جدول بوسیله ID درس و ID شخص به هم مرتبط میشن.
در مورد دستور Join در MySql هم توی گوگل جستجو کن تا بتونی این سه جدول را مرتبط کنی.

hamed-php
شنبه 09 بهمن 1389, 16:42 عصر
ممنونم از راهنمایی

مثال ساده دارید لطفاً ؟

shahriyar3
شنبه 09 بهمن 1389, 17:22 عصر
يك تيبل تعريف ميكنيد يوزر و پس و يا هر چي ديگه فقط مقدار id رو برابر auto_incerement قرار ميديد حالا يك جدول ديگه درست ميكنيد توش نمره هاي درسي ميريزيد اولش مقدار آيدي تيبل اول رو به اين تيبل اضافه ميكنيد. مقدار id توي هر 2 تيبل يكسانه با يك select براحتي جواب كوئري مورد نظرت بدست مياد


$sql = "CREATE TABLE `test`.`test` (`id` INT NOT NULL AUTO_INCREMENT, `username` INT NOT NULL, `pass` INT NOT NULL, PRIMARY KEY (`id`)) ENGINE = MyISAM;";




$sql = "CREATE TABLE `test`.`test1` (`id` INT NOT NULL AUTO_INCREMENT, `user_id` INT NOT NULL, `Physics` INT NOT NULL, `math` INT NOT NULL, PRIMARY KEY (`id`)) ENGINE = MyISAM;";

اين ساختار 2 تا جدول

MMSHFE
یک شنبه 10 بهمن 1389, 07:44 صبح
با سلام، يك راه اتصال جداول كه ساده تر از بقيه است و به Natural Join معروفه، استفاده از شرط WHERE هست.
فرض كنيد جداول شما بدين ترتيب هستن:
1- جدول students با فيلدهاي id و user و pass
2- جدول lessons با فيلدهاي id و name
3- جدول scores با فيلدهاي id و lid و sid و score
حالا با فرض اينكه ميدونيم id دانشجو چي هست (موقع لاگين كردن id دانشجو رو بدست آورديم)، براي اينكه نمرات اون دانشجو رو بدست بياريم و برحسب نام دانشجو و نام درس نمايش بديم:


$query='';
$query.='select `students`.`name`,`lessons`.`name`,`score`';
$query.='from `students`,`lessons`,`scores`';
$query.='where (`students`.`id`=`scores`.`sid`';
$query.='and `lessons`.`id`=`scores`.`lid`';
$query.="and `students`.`id`='$id')";
$result=mysql_query($query);
توضيح: دو شرط اول در قسمت where مربوط به ادغام طبيعي جداول هست.
اگه توضيح بيشتري خواستيد، در خدمتم.
موفق و مؤيد باشيد.

hamed-php
یک شنبه 10 بهمن 1389, 15:34 عصر
سلام
خیلی ممنون از راهنمایی شما.
حالا یه سوال داشتم : در هنگام نمایش چگونه میشه جدول ما خوشگل و با نظم خاص باشه.
مثلاً بالای نمایش رکوردها مشخص باشه که اسمشون چیه (یعنی title هم داشته باشیم).
و یه سوال دیگه اینکه دانش آموز بتونه مشخصاتی که براش چاپ شده رو ویرایش کنه و دوباره بفرسته تو یه دیتابیس دیگه که برای معلمشه.

sattaryekta
دوشنبه 11 بهمن 1389, 10:51 صبح
میخوای یه قلیون هم کنارش چاق کنیم بکشی؟

ghasemweb
دوشنبه 11 بهمن 1389, 11:05 صبح
جسارتا منم برم چایی رو ردیف کنم !:لبخندساده:

hamed-php
دوشنبه 11 بهمن 1389, 12:32 عصر
حواسم نبود!