الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الى الخبراء php ارجو الدخول المشكله في ال radio

مغلق
بدأه ayadsat في 11 مايو 2005 · 10 رد · 984 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

عملت مشروع امتحانات على النت ولكن المشكله في ال option بحيث الاستاذ غير محدد بعدد الاسئله

واعمل لكل سوال 4 اجوبه مختلفه وهذه الاسئله واجوبتها مخزونه في mysql الdatabase ارجو حل هذه المشكله او طريقه ثانيه لبرمجتها علما اني عملت الكود ولكن من قراءه الكود ستعرفون المشكله

<html>

<head>

<title></title>

</head>

<body>

<p dir="ltr"><span lang="en-us"><font size="4" face="Georgia">this page for test

</font></span></p>

<p dir="ltr"><span lang="en-us"><font size="4" face="Georgia">You must Solve all

Questions</font></span></p>

<p dir="ltr"><span lang="en-us"><font face="Courier New">Choice Right Answer

</font></span></p>

<p dir="ltr"><span lang="en-us">  Q1\</span></p>

<p dir="ltr"> </p>

<?php

include("config1.inc.php");

$query=mysql_query("SELECT id,question,answer_1,answer_2,answer_3,answer_4,correct_answer FROM question");

while($row=mysql_fetch_array($query))

{

?>

<form name="FormName" action="table.php" method="post">

<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber2">

<tr>

<td width="100%"><span lang="en-us"><?print($row["question"]);?></span></td>

</tr>

</table>

<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#FF00FF" width="100%" id="AutoNumber1" bgcolor="#008000">

<tr>

<td width="25%">

<input type="radio" value="V1" name="R1"checked</p>

<p><span lang="en-us"><?print($row["answer_4"]);?></span></td>

<td width="25%">

<input type="radio" value="V1" name="R2"></p>

<p><span lang="en-us"><?print($row["answer_3"]);?></span></td>

<td width="25%">

<input type="radio" value="V1" name="R3"></p>

<p><span lang="en-us"><?print($row["answer_2"]);?></span></td>

<td width="25%">

<input type="radio" value="V1" name="R4"></p>

<p><span lang="en-us"><?print($row["answer_1"]);?></span></td>

</tr>

</table>

<input type="submit" value="Send">

<p dir="ltr"> </p>

</form>

<?

}

?>

</body>

</html>

#2

الذي يبدو لي أنك نسيت أن تضع الإجابة الصحيحة في الإجابات:

<input type="radio" value="V1" name="R1"checked</p>
<p><span lang="en-us"><?print($row["answer_4"]);?></span></td>
<td width="25%">
<input type="radio" value="V1" name="R2"></p>
<p><span lang="en-us"><?print($row["answer_3"]);?></span></td>
<td width="25%">
<input type="radio" value="V1" name="R3"></p>
<p><span lang="en-us"><?print($row["answer_2"]);?></span></td>
<td width="25%">
<input type="radio" value="V1" name="R4"></p>
<p><span lang="en-us"><?print($row["answer_1"]);?></span></td>

إذا كان هذا المطلوب فالأمر بسيط ، فقط قم بإضافة الجواب الصحيح:

<input type="radio" value="V1" name="R1"checked</p>
<p><span lang="en-us"><?print($row["answer_4"]);?></span></td>
<td width="25%">
<input type="radio" value="V1" name="R2"></p>
<p><span lang="en-us"><?print($row["answer_3"]);?></span></td>
<td width="25%">
<input type="radio" value="V1" name="R3"></p>
<p><span lang="en-us"><?print($row["answer_2"]);?></span></td>
<td width="25%">
<input type="radio" value="V1" name="R4"></p>
<p><span lang="en-us"><?print($row["answer_1"]);?></span></td>
////////// لاحظ الإضافة 
<td width="25%">
<input type="radio" value="V1" name="R5"></p>
<p><span lang="en-us"><?print($row["correct_answer"]);?></span></td

ولكن هناك مشكلة ، وهي أن الجواب الصحيح سيكون الأخير دائما.

ولحل ذلك إفصل جيمع الأجوبة في مصفوفة ثم إخلطها باستخدام الدالة shuffle();

مثلاً:

html>

<head>
<title></title>
</head>

<body>
<p dir="ltr"><span lang="en-us"><font size="4" face="Georgia">this page for test
</font></span></p>
<p dir="ltr"><span lang="en-us"><font size="4" face="Georgia">You must Solve all
Questions</font></span></p>
<p dir="ltr"><span lang="en-us"><font face="Courier New">Choice Right Answer
</font></span></p>
<p dir="ltr"><span lang="en-us">  Q1\</span></p>
<p dir="ltr"> </p>
<?php
include("config1.inc.php");
$query=mysql_query("SELECT id,question,answer_1,answer_2,answer_3,answer_4,correct_answer FROM question");
while($row=mysql_fetch_array($query))
{
///////// لاحظ التعديل هنا
$answers=arrray($row["answer_1"],$row["answer_2"],$row["answer_3"],$row["answer_4"],$row["correct_answer"]);
shuffle($answers);
/// نهاية التعديل
?>
<form name="FormName" action="table.php" method="post">
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber2">
<tr>
<td width="100%"><span lang="en-us"><?print($row["question"]);?></span></td>
</tr>
</table>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#FF00FF" width="100%" id="AutoNumber1" bgcolor="#008000">
<tr>
<td width="25%">
<!-- لاحظ التعديل الثاني هنا -->
<input type="radio" value="V1" name="R1"checked</p>
<p><span lang="en-us"><?print($answers[0]);?></span></td>
<td width="25%">
<input type="radio" value="V1" name="R2"></p>
<p><span lang="en-us"><?print($answers[1]);?></span></td>
<td width="25%">
<input type="radio" value="V1" name="R3"></p>
<p><span lang="en-us"><?print($answers[2]);?></span></td>
<td width="25%">
<input type="radio" value="V1" name="R4"></p>
<p><span lang="en-us"><?print($answers[3]);?></span></td>
</tr>
<!-- نهاية التعديل الثاني -->

</table>
<input type="submit" value="Send">
<p dir="ltr"> </p>
</form>

<?
}
?>


</body>

</html>
#3

بارك الله فيك ياخي العزيز على الرد السريع

المشكله التي عندي مثلا انا عند في القاعده البيانات اكثر من اربعون سوال وكل سوال يحتاج الى اربع radio buttom يعني هذه مشكله ومن غير المعقول برمجتها انا فكرت ان ابرمج فقط اربعه وباستخدام داله ال while ولكن لم تنجح الطريقه مع العلم احتمال الاستاذ يكتفي 10 اسئله فقط يعني مادام القاعده فيها اسئله يخرج الradio لها ارجو حل هذه المشكله

اما داله الshuffle داله غير معرفه بالنسبه للسيرفر لم يتعرف عليها علما ان طريقتك حلو انا عامل اذا الطالب يضغط على اي radio يضع رقم الجواب في correct_answer مثلا اذا اختار الجواب الثاني يضع 2 في correct_answer شكرا اخي العزيز وانا اسف على تعبك معي

#4

في الواقع لم تتضح لدي الصورة ، ولأساعدك ارجو ان توضح لي ،

ما نسخة php التي تعمل عليها؟

كيف قمت بتوزيع الأسئلة في قاعدة البيانات؟ (هل وضعت جدول فيه الأسئلة ، وآخر فيه الأجوبة ، ام ماذا؟).

وإن شاء الله نحل الموضوع :)

#5

اخي العزيز انا اسف جدا على تعبك معي وانا عاجز عن شكرك بارك الله فيك وكثر الله من امثالك

بالنسبه النسخه اعتقد انها قديمه وهي phptriad2-2-1 واذا كانت عندك احدث منها ارجو منك اعطائي النسخه الحديثه وكيف يتم تنصيبها هل نفس الطريقه

اما بالنسبه للجداول فهناك جدول واحد فقط اضع الاسئله والاجوبه واسم هذا الجدول questions

وحقول هذا الجدول هيه id,question,answer_1,answer_2,answer_3,answer_4,correct_answer

انت تعرف ان الاستاذ يضع السوال وهو الحقل question ويضع الاجوبه الاربعه لهذا السوال ويوجد جواب واحد صحيح من بين هذه الاجوبه ويختار الجواب الصحيح من خلال اختيار واحد من ال radio مثلا اذا اختار radio بجانب ال answer_2 يضع في الحقل correct_answer رقم 2 يعني بعد الضغط على submit اي كلما يضغط على ال submit يضيف في القاعده البيانات سوال جديد واجوبته الاختياريه ورقم الجواب الصحيح هذه بالنسبه للمدرس وان عملتها ونجحت الفكره

المشكله هي ان كل ما موجود في قاعده البيانات من اسئله واجوبتها ما عدا الجواب الصحيح تعرض على صفحه واحده ولها submit واحده في الصفحه الخاصه بالطالب

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

وانا شاكر لك جدا لمجهودك معي وانا كلي ثقه بان انت تحل هذه المشكله

#6

في البداية اعتذر عن التأخير بسبب ضروف الإختبارات.

وسأحاول أن ابدأ معك خطوة خطوة لنعمل سوياً نظام إختبارات على الويب.

في البداية نحتاج أن نخطط لقاعدة البيانات وفي نظري أننا نحتاج أن تحتوي قاعدتنا على جدولين الأول للأسئلة والثاني للأجوبة بالشكل التالي:

1)جدول الاسئلة questions:

يحتوي على حقلين فقط ، رقم السؤال ID و نص السؤال question

كودsql لإنشاء الجدول:

CREATE TABLE `questions` (
`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`question` TEXT NOT NULL
);

2)جدول الأجوبة answers:

يحتوي على أربعة حقول ، رقم الجواب ID ، ونص الجواب answer ، ورقم السؤال question_id ، والصحة(هل الجواب صحيح)truth.(يأخذ القيمة1 إن كان الجواب صحيح ويأخذ القيمة 0 إن كان الجواب خاطئ).

كودsql لإنشاء الجدول:

CREATE TABLE `answers` (
`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`answer` TEXT NOT NULL,
`question_id` INT NOT NULL,
`truth` TINYINT NOT NULL
);

الآن نأتي لصفحة إدخال الأسئلة وسنبدأ بنموذج html :

<form action="addquestion.php" method="post" >
     <label for="">السؤال:</label><input type="text" name="question" /> <br />
     <label for="">الجواب الصحيح</label><input type="text" name="correctanswer" /> <br />
     <label for="">إجابة إضافية</label><input type="text" name="extraanswer[]" /> <br />
     <label for="">إجابة إضافية</label><input type="text" name="extraanswer[]" /> <br />
     <label for="">إجابة إضافية</label><input type="text" name="extraanswer[]" /> <br />
     
     <input type="submit" value="إرسال" />
</form>

هذه الصفحة ترسل البيانات لصفحةaddquestion.php والتي بدورها تقوم بحفظ الأسئلة والأجوبة في قاعدة البيانات بالترتيب التالي:

- تهيئة البيانات والتأكد منها (السؤال ، والأجوبة).

- حفظ السؤال في جدول الأسئلة.ومعرفة رقمة لإستخدامة في الخطوة التالية.

- حفظ الأجوبة في جدول الأجوبة.

وإليك كود php الذي يقوم بذلك:

<?php

######  تهيئة البيانات والتأكد منها
if( empty($_POST['question']) || empty($_POST['correctanswer']) ||
    empty($_POST['extraanswer'][0]) || empty($_POST['extraanswer'][1]) ||
    empty($_POST['extraanswer'][2] ) )
  die("الرجاء إدخال كافة البيانات");

/////تحضير البيانات
$data=array("question"=>$_POST['question'],
            "correctanswer"=>$_POST['correctanswer'],
            "extraanswer1"=>$_POST['extraanswer'][0],
            "extraanswer2"=>$_POST['extraanswer'][1],
            "extraanswer3"=>$_POST['extraanswer'][2]);


foreach($data as $key=>$value){
    $data[$key]=strip_tags($value); //حذف وسوم html
    if (!get_magic_quotes_gpc()) {  // إضافة علامات الهروب إن احتجنا لإضافتها
        $data[$key]=addcslashes($value);
    } else {
        $data[$key]=$value;
    }
}

// الإتصال بقاعدة البيانات
DBconnect();

###### إضافة السؤال إلى قاعدة البيانات
$query="insert into `questions`(`ID`,`question`)values('','{$data['question']}')";
mysql_query($query) or die(mysql_error());
// لمعرفة رقم السؤال
$query="select `ID` from `questions` where `question`='{$data['question']}'";
$result=mysql_query($query) or die(mysql_error());
$num=mysql_num_rows($result) or die(mysql_error());



######إضافة الأجوبة إلى قاعدة البيانات
//إضافة الجواب الصحيح
$query="insert into `answers` (`ID`,`answer`,`question_id`,`truth`)
                        values('','{$data['correctanswer']}','{$num}','1')";
mysql_query($query) or die(mysql_error());
//إذضافة بقيمة الأجوبة
$i=1;
while($i<=3){
    $key="extraanswer".$i;
    $query="insert into `answers` (`ID`,`answer`,`question_id`,`truth`)
                             values('','{$data[$key]}','{$num}','0')";
    mysql_query($query) or die(mysql_error());
    ++$i;
}


echo "enjoy:)";


///////////////////////////////////////////////////////////////////////////
/////////////////////     فسم الدوال                  /////////////////////
//////////////////////////////////////////////////////////////////////////
function DBconnect(){
   $link=mysql_connect("localhost","root","") or die(mysql_error());
   mysql_select_db("test") or die(mysql_error());
   return $link;
}
?>

الآن نأتي إلى صفحة الإختبار فكيف ستكون؟

ستعرض الأسئلة(او جزء منها) واحداً واحداً ، أي تعرض السؤال الأول وأجوبتة ثم زر ينقل للصفحة التالية والتي بدورها تتحق من صحة الجواب فإن خاطئا تسجل رقم السؤال في متغير الجلسةsession وتتابع عرض السؤال الثاني بنفس الطريقة وهكذا ... في النهاية نختبر متغير الجلسة فإن مجود فهذا يعني وجود أخطاء ، ونحن خزنا فيه رقم السؤال إذن نعرض السؤال وجوابة الصحيح:).

لنبدأ بعرض السؤال والأجوبة:

// إحضار السؤال
$query="select `ID`,`question` from `questions` limit $page,".($page+1)."";
$result=mysql_query($query) or die(mysql_error());

$question_data=mysql_fetch_array($result) or die(mysql_error());
$question_id=$question_data['ID']; //رقم السؤال
$question_text=$question_data['question'];

//إحضار الأجوبة
$query="select `ID`,`answer` from `answers` where `question_id`='{$question_id}'";
$result=mysql_query($query) or die(mysql_error());

while($answer_data=mysql_fetch_array($result)){
    $answer_id[]=$answer_data['ID'];
    $answer_text[]=$answer_data['answer'];
}



///// عرض السؤال
echo "
<form action=\"tester.php?page=".($page+1)."\" method=\"post\">
      <label>$question_text</label>
      <input type=\"hidden\" name=\"question\" value=\"$question_id\" />
      <ul>";

      $i=0;
      while($i<=3){
        echo "<li><input type=\"radio\" name=\"answer\" value=\"$answer_id[$i]\" />$answer_text[$i]</li>";
        ++$i;
      }
echo"
      </ul>
      <input type=\"submit\" value=\"التالي\" />
</form>";
[CODE]

ثم في الصفحة الثانية(تعبير مجازي وإلا هي نفس الصفحة) نختبر صحة السؤال:
[CODE]
 $query="select `truth` from `answers` where `ID`='{$prevAnswer}'";
   $result=mysql_query($query) or die(mysql_error());

   $data=mysql_fetch_array($result);

   if($data['truth'] != 1){//الإجابة خاطئة
       $_SESSION['worng'][$page]=$prevQuestion;
   }

وفي النهاية نعرض التصحيح إن وجدنا أخطاء:

if(isset($_SESSION['worng'])){//يوجد أخطاء
     echo "لديك ". count($_SESSION['worng']) ."وإليك حلها: <br />";
        foreach($_SESSION['worng'] as $id){
            //جلب السؤال الخاطئ
            $query="select `question` from `questions` where `id`=$id";
            $result=mysql_query($query) or die(mysql_error());
            $question_data=mysql_fetch_array($result) or die(mysql_error());
            $question=$question_data['question'];
            //جلب الجواب الصحيح
            $query="select * from `answers` where `question_id`='{$id}' and `truth`=1";
            $result=mysql_query($query) or die(mysql_error());
            $answer_data=mysql_fetch_array($result);
            $answer=$answer_data['answer'];
            
            //طباعة السؤال وجوابة
            echo $question,$answer,"<br />";
        }

وأعتذر عن رداءة الشرح والكود ، بسبب عجلتي :( والله المستعان.

الكود كامل مفرق.

tester.zip

#7

مشكور اخي العزيز وما قصرت والله هذا جميل ما انسى سوف اجرب ورجع لك النتيجه :rolleyes:

تم تعديل هذه المشاركة بواسطة ayadsat في 31 مايو 2005 في 10:34

#8

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

اخوك اياد

#9

الى الاخ teao اسف على تاخيري بسبب قمت بمراجعه الكثير من الدوال وارجوا ان لا اثقل عليك

لقد نفذت الكود ولكن حصل فيه الكثير من المشاكل

1- رقم السوال في جدول الاسئله يقى واحد ولا يتغير

2- بالنسبه عند تنفيذ الtester.php بالنسبه للسوال الاول واجوبته تضهر بشكل طبيعي

اما السوال الثاني فضهر فقط السوال وoptions ولايضهر الاجوبه الخاصه بهذا السوال

3- عند الانتهاء لاتضهر الاجوبه الصحيح

ونتمنا لك الموفقيه والنجاح اخوك اياد

#10

لقد تم حل المشكله هي تبديل استبدال داله mysql_num_rows بداله mysql_fetch_array

ولكن يبقى الجواب الصحيح دائما هو اول اختيار وهذه ايظا مشكله حقيقيه

:D

#11

استخدمت الداله shuffle ولله الحمد ايضا حلت المشكله

ولكن احتاج command buttom وهي السابق لكي يتراجع الطالب عن الاجابه ويعطي فرصه للطالب تغيير الاجابه اي يتناقص page =page-1

الرجاء اخ teao تحل هذه المشكله

هذا الموضوع مغلق.

مواضيع مشابهة