سؤال في استعادة البيانات من MYSQL بدون تكرار بيانات

asma • منذ 8 سنوات

السلام عليكم 

أحتاج لمساعدة بسيطة في مشروع online Test

أستخدم php-Mysql 

عندي مشكلة انه الأسئلة تتكرر لعدة خيارات وهو المفترض سؤال واحد ل 3 خيارات 

ماأريد أغير الداتا بيس ...أريد كونيشن عشان يتحكم في عدم تكرار السؤال..

مثل الصور اللي رفعتها 

أتمنى أحصل الحل منكم 

ولكم جزيل الشكر...

الكوودات::

cod1.png

 

الناتج

output.png

db-answer.png

db-q.png

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

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

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

الإجابات (2)

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

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

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

انا قمت بإنشاء قاعدة بيانات بسيطة فيها نفس فكرة السؤال ثم قمت بالاتصال بقاعدة البيانات لجلب البيانات وبعدها رتبت البيانات داخل مصفوفة ثم قمت بطباعتها للمتصفح 

هنا أوامر إنشاء قاعدة البيانات بجدولين questions و answers 


-- Create syntax for TABLE 'answers'
CREATE TABLE `answers` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `answer` varchar(250) DEFAULT NULL,
  `question_id` int(11) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- Create syntax for TABLE 'questions'
CREATE TABLE `questions` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `question` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

بعدها قمت بإنشاء ملف يتصل بقاعدة البيانات ويجلب لي جميع الأسئلة وكل الإجابات المرتبطة ثم ترتيبها داخل مصفوفة بإسم data ليتم طباعتها للصفحة 


<?php
//Create Connection
$mysqli = mysqli_connect("localhost", "root", "root", "3alampro-help");

// Check connection if there is error give it to me
if (!$mysqli) {
    die("Connection failed: " . mysqli_connect_error());
}

//Make SQL 
$sql = "SELECT q.id, q.question, a.answer FROM questions q LEFT JOIN answers a ON q.id = a.question_id";

//Query the database
$query = mysqli_query($mysqli, $sql);

//Fetch the Records and arrange them in new organized array
while($row = mysqli_fetch_assoc($query)){
	$data[$row['id']]['question'] = $row['question'];
	$data[$row['id']]['answer'][] = $row['answer'];
}

/* free query set */
mysqli_free_result($query);

/* close connection */
mysqli_close($mysqli);

echo "<pre>";
print_r($data);

الكود بالأعلى سيقوم بطباعة المصفوفة للمتصفح بهذا الشكل


Array
(
    [1] => Array
        (
            [question] => question number 1 what is what?
            [answer] => Array
                (
                    [0] => yes
                    [1] => no
                    [2] => mmm
                )

        )

    [2] => Array
        (
            [question] => the next question is ?
            [answer] => Array
                (
                    [0] => do my best
                )

        )

    [3] => Array
        (
            [question] => is 3alampro.com nice?
            [answer] => Array
                (
                    [0] => 
                )

        )

)

بإمكانك إستخدام foreach لطباعة النتائج بشكل مرتب ومنسق لماتحتاجين فمثلا لو اردنا طباعة السابق كل سؤال بسطر وتحته إجاباته نقوم بإستبدال بالكود السابق


echo "<pre>";
print_r($data);

بهذا الكود

foreach ($data as $value) 
{
	echo $value['question'] . '<hr>';
	foreach ($value['answer'] as $key => $val) {
		if(!empty($val))
		{
			echo $key . ' ' . $val . '<br/>';
		}
		else
		{
			echo 'no answer yet';
		}
	}
}

وهذا مجرد مثال فقط لطريقة عرض والتعامل مع البيانات بشكل مرتب 

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

أنا بالمثال السابق إستخدمت دوال المكتبة mysqli وهي النسخة الأحدث من mysqlحيث تم الإستغناء عن هذه المكتبة بالإصدارات الحديثة ولن تعمل وتم إضافة الكثير من المميزات لمكتبة mysqli  وهنا شرح كامل للمكتبة وطريقة عملها 

وايضا لاحظت إستخدام NotePad لتصفح ملفات php انصحك باستخدام محرر نصوص متخصص بالبرمجة مثل SublimeText انا هنا وضعت قائمة بافضل المحررات 

https://3alam.pro/series/php/php-basics/install-php/

أتمنى تفيدك بعملك

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

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