منع تعاضات بين مواد php

جواهر • منذ 6 سنوات

else{
$v1=mysqli_query($conn,"select  student_id from student_subject where subject_id='$subject_id'");

$result=mysqli_query($conn,"select distinct subject_id from exam_day where day='$day'");
for($i=;$row=mysqli_fetch_row($result),$i<mysqli_num_rows($result);$i++)
{
echo $row[];
		$v3=mysqli_query($conn,"select distinct student_id from student_subject where subject_id='$row[$i]'");

for($m=;$row3=mysqli_fetch_row($v3), $m<mysqli_num_rows($v3);$m++)
	{
			for($n=;$row4=mysqli_fetch_row($v1),$n<mysqli_num_rows($v1);$n++)

			{if($row3[$m]==$row4[$n]){
		$flag=1;
	
	}
	if($flag==1)
			break;}
}
if($flag==1)
		break;
}

	if($flag==) {
mysqli_query($conn,"insert into exam_day  values ('','$subject_id','$day')");

}
else echo'A conflict occured';


}
}

السلام عليكم ,, لدي مشروع تخرج يقوم على منع تعارضات بين المواد اشرح فكره هو يحل مشكلة تعارض المواد لطلاب في فترة الاختبارات بحيث يمنع وضع مادتين لطالب بنفس  اليوم 

جدول يكون فيه الطلاب وموادهم مثلا الطالب 11 يدخل 5 مرات ل 5 مواد مختلفه  وهكذا لباقي طلبه 

في جدول الثاني يعمل تحقق قبل اضافه بالجدول يجلب رقم الطالب في (جدول المواد وطلاب) ويتحقق هل الماده المضافه بالجدول  نفس الطلاب الماده التي سوف تضاف  

اذا طلاب ماده مضافه والماده التي ستضاف لو طالب واحد ع الاقل يظهر مسج ان هناك تعارض 

اذا طلاب ماده مضافه والماده التي ستضاف يختلفون يضيفهم بنفس تاريخ لان لا يوجد تعارض 

انا عملت كود وضبط والله الحمد لكن اصبح لا يضيف التاريخ نفسه مرتين :(

 

كلمات دليلية:

ساعد بالإجابة

"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."

الإجابات (4)

Ali Majrashi • منذ 6 سنوات

وعليكم السلام ورحمة الله وبركاته 

اتمنى منك اتباع قوانين كتابة الاسئلة ليسهل مساعدتك بحل المشكلة ولتكون مرجع للبقية عند البحث عن المشكلة

  1. كتابة عنوان يدل على محتوى المشكلة 
  2. ومشاركة الأكواد المسببة للمشكلة ليسهل مراجعتها واقتراح حلول او تحسينات ممكن استخدام زر اضافة الاكواد بالمحرر لاضافة الاكواد كل ملف لحاله

وشكرا

Ali Majrashi • منذ 6 سنوات

شكرا لك على تحديث السؤال يعطيك العافية 

بالنسبة للكود في بدايته else فقط فهو ناقص وراح يسبب خطأ عندي ولا راح يعمل ياريت تكملة باقي الكود 

بالنسبة للمطلوب ياريت تصحيح فهمي اذا غلط مطلوب جدول لجدولة اختبار الطلاب ومايكون فيه تعارض بحيث لايمكن ادخال مادتين لطالب بنفس اليوم صح مادة وحدة كحد اقصى في اليوم للطالب ؟

جواهر • منذ 6 سنوات

اييه هذا فهم ان مثلا في يوم20/3 يكون لطالب اختبار واحد فقط وعادي يكون اكثر من ماده اختبارها 20/3 بس بشرط ان طلاب كل ماده يختلفون 

تبي كود صفحة كلها قصدك?? 

Ali Majrashi • منذ 6 سنوات

مايحتاج كل هالكود للتحقق اذا كان فيه تعارض او لا ممكن تحقيق المطلوب بطريقة بناء قاعدة البيانات باضافة UNIQUE Constraint تقدرين تستفيدن من هالجواب لفهم الطريقة والعمل 

https://3alam.pro/forums/topic/50-%D9%85%D9%82%D8%A7%D8%B1%D9%86%D8%A9-%D9%82%D9%8A%D9%85-%D8%B9%D9%85%D9%88%D8%AF-%D9%81%D9%8A-%D9%82%D8%A7%D8%B9%D8%AF%D8%A9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A8%D9%82%D9%8A%D9%85%D8%A9-%D9%85%D8%AF%D8%AE%D9%84%D8%A9-%D9%85%D9%86-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85/

افضل طريقة هي جعل MySQL التي تتحقق من وجود تعارض او لا بدل التحقق بواسطة php 

قمت بانشاء جدول بسيط باسم exams وبداخله قمت بإنشاء ٤ حقول 

  • id
  • student
  • subject
  • date

وقمت بتعيين UNIQUE Constraint للحقول student و subject و date عند محاولة ادخال اي record جديد لقاعدة البيانات راح يحقق منهم كلهم اذا فيه قيم مخزنه مسبقة راح يعطيك خطأ ولاراح يضيف اي record 

وهنا كود انشاء الجدول وتعيين UNIQUE للحقول بواسطة امر SQL ممكن تنفيذه بقاعدة البيانات لانشاء الجدول بالحقول


CREATE TABLE `exams` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `student` varchar(250) DEFAULT NULL,
  `subject` varchar(250) DEFAULT NULL,
  `date` date DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `student` (`student`,`subject`,`date`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

اذا كنتي ترغبين فقط باضافة UNIQUE Constraint للحقول فقط بعد انشاء الجدول وحقوله ممكن بواسطة تنفيذ كود SQL بقاعدة البيانات


ALTER TABLE `exams` ADD UNIQUE( `student`, `subject`, `date`);

هذا الأمر راح يعدل على جدول exams ويضيف UNIQUE Constraint للحقول المطلوبة التحقق منها قبل اضافة record لقاعدة البيانات 

اذا كنتي ماتعرفين التعامل مع قواعد البيانات وطريقة تنفيذ اكواد SQL ممكن اضافة UNIQUE Constraint بواسطة phpMyAdmin هنا الخطوات

  1. حددي قاعدة البيانات 
  2. حددي الجدول بالضغط على اسمه
  3. في القائمة اضغطي على  Structure لعرض تركيبة الجدول والحقول 
  4. حددي الحقول المراد اضافة UNIQUE Constraint لها بوضع علامة صح امامها
  5. اضغطي على زر UNIQUE لتعديل الحقول 

زي ماهو موضح بالصوره

1.png

بعدها ممكن اضافة اي record بواسطة INSERT واذا فيه تعارض راح تعطيك MySQL خطا Duplicate entry للمحقل student مباشرة ولا راح ينضاف اي record جديد

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !