اذهب إلى المحتوى

السؤال

نشر

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

لدي نموذج اختبار

يوجد استعلام على حسب رغبة الزائر 

قد يعرض عليه سؤال او اثنين او اكثر

بعد عرض الاستعلام … الزائر سيختار الاجابة الصحيحة

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

المشكلة التي واجهتها كيف اجمع POST حتى يعطي درجة نهائية لهذا الاختبار 

شكرا لكم 

Recommended Posts

  • 0
نشر

الأمر سيتم كالتالي من خلال إنشاء نموذج HTML ومعالجة البيانات الخاصة به:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $answers = $_POST;
  $correctAnswers = array(
    'q1' => 'a',
    'q2' => 'b',
  );

  $score = 0;
  foreach ($answers as $question => $answer) {
    if ($answer === $correctAnswers[$question]) {
      $score++;
    }
  }

  echo '<div id="result">النتيجة: ' . $score . ' من ' . count($correctAnswers) . '</div>';
}
?>

<form id="quiz-form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  <div id="questions">
    <h2>السؤال 1</h2>
    <input type="radio" name="q1" value="a"> الإجابة A
    <input type="radio" name="q1" value="b"> الإجابة B
    <input type="radio" name="q1" value="c"> الإجابة C
    <input type="radio" name="q1" value="d"> الإجابة D

    <h2>السؤال 2</h2>
    <input type="radio" name="q2" value="a"> الإجابة A
    <input type="radio" name="q2" value="b"> الإجابة B
    <input type="radio" name="q2" value="c"> الإجابة C
    <input type="radio" name="q2" value="d"> الإجابة D

  </div>

  <button id="submit-btn" type="submit">إرسال</button>
</form>

لاحظ أننا نقارن البيانات المرسلة بالإجابة الصحيحة من خلال مصفوفة correctAnswers وإضافة النتيجة لمتغير باسم score لكل إجابة صحيحة.

  • 0
نشر

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

هذا يعتمد على طريقة بنائك للنموذج يرجى إرفاقه لمساعدتك بطريقة أفضل.

أما بخصوص كود php فعندما تستقبل النموذج سيكون لديك إسم السؤال و الإجابة الذي تم إجابتها . 

حينها ستقوم بإرسال إستعلام بكل سؤال و التأكد من الإجابة الصحيحة والإجابة التي قام بها المستخدم ويمكنك حينها حساب مجموع الدرجات .

ولنفرض مثلا أن النموذج كالتالي :

<form method="POST">
    <h3>السؤال 1</h3>
    <input type="radio" name="1" value="1"> 1<br>
    <input type="radio" name="1" value="2"> 2<br>

    <h3>السؤال 2</h3>
    <input type="radio" name="2" value="1"> 1<br>
    <input type="radio" name="2" value="2"> 2<br>

    <h3>السؤال 3</h3>
    <input type="radio" name="3" value="3"> 3<br>
    <input type="radio" name="3" value="4"> 4<br>

    <input type="submit" value="إرسال">
</form>

وفي كود php يكون كالتالي :

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // الإجابات الصحيحة لكل سؤال
    $correct_answers = [
        '1' => '1',   // الإجابة الصحيحة للسؤال 1
        '2' => 'أزرق', // الإجابة الصحيحة للسؤال 2
        '3' => '3',  // الإجابة الصحيحة للسؤال 3
    ];

    $score = 0;  // لحساب الدرجة النهائية

    // التحقق من الإجابات
    foreach ($correct_answers as $question => $correct_answer) {
        if (isset($_POST[$question]) && $_POST[$question] == $correct_answer) {
            $score++;  // إذا كانت الإجابة صحيحة، نضيف درجة
        }
    }
  echo $score;
}

 

  • 0
نشر
بتاريخ 24 دقائق مضت قال Mustafa Suleiman:

الأمر سيتم كالتالي من خلال إنشاء نموذج HTML ومعالجة البيانات الخاصة به:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $answers = $_POST;
  $correctAnswers = array(
    'q1' => 'a',
    'q2' => 'b',
  );

  $score = 0;
  foreach ($answers as $question => $answer) {
    if ($answer === $correctAnswers[$question]) {
      $score++;
    }
  }

  echo '<div id="result">النتيجة: ' . $score . ' من ' . count($correctAnswers) . '</div>';
}
?>

<form id="quiz-form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  <div id="questions">
    <h2>السؤال 1</h2>
    <input type="radio" name="q1" value="a"> الإجابة A
    <input type="radio" name="q1" value="b"> الإجابة B
    <input type="radio" name="q1" value="c"> الإجابة C
    <input type="radio" name="q1" value="d"> الإجابة D

    <h2>السؤال 2</h2>
    <input type="radio" name="q2" value="a"> الإجابة A
    <input type="radio" name="q2" value="b"> الإجابة B
    <input type="radio" name="q2" value="c"> الإجابة C
    <input type="radio" name="q2" value="d"> الإجابة D

  </div>

  <button id="submit-btn" type="submit">إرسال</button>
</form>

لاحظ أننا نقارن البيانات المرسلة بالإجابة الصحيحة من خلال مصفوفة correctAnswers وإضافة النتيجة لمتغير باسم score لكل إجابة صحيحة.

تسلم بيض الله وجهك سيتم تجربة الكود 

  • 0
نشر
بتاريخ 53 دقائق مضت قال محمد عاطف17:

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

هذا يعتمد على طريقة بنائك للنموذج يرجى إرفاقه لمساعدتك بطريقة أفضل.

أما بخصوص كود php فعندما تستقبل النموذج سيكون لديك إسم السؤال و الإجابة الذي تم إجابتها . 

حينها ستقوم بإرسال إستعلام بكل سؤال و التأكد من الإجابة الصحيحة والإجابة التي قام بها المستخدم ويمكنك حينها حساب مجموع الدرجات .

ولنفرض مثلا أن النموذج كالتالي :

<form method="POST">
    <h3>السؤال 1</h3>
    <input type="radio" name="1" value="1"> 1<br>
    <input type="radio" name="1" value="2"> 2<br>

    <h3>السؤال 2</h3>
    <input type="radio" name="2" value="1"> 1<br>
    <input type="radio" name="2" value="2"> 2<br>

    <h3>السؤال 3</h3>
    <input type="radio" name="3" value="3"> 3<br>
    <input type="radio" name="3" value="4"> 4<br>

    <input type="submit" value="إرسال">
</form>

وفي كود php يكون كالتالي :

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // الإجابات الصحيحة لكل سؤال
    $correct_answers = [
        '1' => '1',   // الإجابة الصحيحة للسؤال 1
        '2' => 'أزرق', // الإجابة الصحيحة للسؤال 2
        '3' => '3',  // الإجابة الصحيحة للسؤال 3
    ];

    $score = 0;  // لحساب الدرجة النهائية

    // التحقق من الإجابات
    foreach ($correct_answers as $question => $correct_answer) {
        if (isset($_POST[$question]) && $_POST[$question] == $correct_answer) {
            $score++;  // إذا كانت الإجابة صحيحة، نضيف درجة
        }
    }
  echo $score;
}

 

بيض الله وجهك سيتم تجربة الكود

وسأرفق لكم الكود الخاص بي 

 

  • 0
نشر (معدل)
بتاريخ 4 ساعة قال محمد عاطف17:

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

هذا يعتمد على طريقة بنائك للنموذج يرجى إرفاقه لمساعدتك بطريقة أفضل.

أما بخصوص كود php فعندما تستقبل النموذج سيكون لديك إسم السؤال و الإجابة الذي تم إجابتها . 

حينها ستقوم بإرسال إستعلام بكل سؤال و التأكد من الإجابة الصحيحة والإجابة التي قام بها المستخدم ويمكنك حينها حساب مجموع الدرجات .

ولنفرض مثلا أن النموذج كالتالي :

<form method="POST">
    <h3>السؤال 1</h3>
    <input type="radio" name="1" value="1"> 1<br>
    <input type="radio" name="1" value="2"> 2<br>

    <h3>السؤال 2</h3>
    <input type="radio" name="2" value="1"> 1<br>
    <input type="radio" name="2" value="2"> 2<br>

    <h3>السؤال 3</h3>
    <input type="radio" name="3" value="3"> 3<br>
    <input type="radio" name="3" value="4"> 4<br>

    <input type="submit" value="إرسال">
</form>

وفي كود php يكون كالتالي :

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // الإجابات الصحيحة لكل سؤال
    $correct_answers = [
        '1' => '1',   // الإجابة الصحيحة للسؤال 1
        '2' => 'أزرق', // الإجابة الصحيحة للسؤال 2
        '3' => '3',  // الإجابة الصحيحة للسؤال 3
    ];

    $score = 0;  // لحساب الدرجة النهائية

    // التحقق من الإجابات
    foreach ($correct_answers as $question => $correct_answer) {
        if (isset($_POST[$question]) && $_POST[$question] == $correct_answer) {
            $score++;  // إذا كانت الإجابة صحيحة، نضيف درجة
        }
    }
  echo $score;
}

 

<?php
ob_start();
session_start();
?>
<div align="center" class="aa"> 
<div align="center">
<?

/* هذا الكود حاولت عن طريقة استخراج النتيجة */
if($_GET["do"] == "Save")
{
	for($i=1;$i<=$_POST["hdnLine"];$i++)
	{
    $a = array($_POST["answer$i"]);
    if($_POST["answer$i"] == $_POST["A$i"]){

      $_POST["A$i"] = 1;
    }else{
      $_POST["A$i"] = 0;
    }
    $my_count = array_sum($_POST["A$i"]);
    echo $my_count;

 
}}


?>
<!-- فورم لارسال الاجابات عدد الاجابات غير محدد قد يكون 10 او 20 او 30 حسب رغبة المستخدم-->
 <form method="POST" action="a.php?do=Save">
    <h3>موسوعة التحصيلي للأحياء</h3><br  /><br  /><br  /><br  />
   <h4>قريباً الاختبارات المحاكية</h4><br  /><br  /><br  /><br  />
   <br  /><br  />
<?
/* استعلام لاستخراج الاسئلة مع دالة while */
/* في كل مرة تختلف نتيجة الاستعلام وليس لها عدد محدد */
$sql = mysqli_query($coo,"SELECT * FROM `question` 
   WHERE `id_lesson` = '1' AND `id_teaching` = '1'
   ORDER BY rand() 
   LIMIT 3"); <-- رقم 3 سيتم استبدالة ببوست وعن طريقة المستخدم يحدد كم سؤال يحتاج

   $sql_num = mysqli_num_rows($sql);
   if($sql_num > 0){
    $i =0;
    while($sql_raw = mysqli_fetch_array($sql))
    {
      $i++;
?>
<!--        جدول لطباعة الاسئلة       -->

<table cellpadding="0" width="100%" cellspacing="1" style="border: 1px solid;border-collapse: collapse;min-width: 20em;">
	<tr>
		<td style="border: 1px solid;background-color: #f1f1f1;" width="28%" colspan="1">السؤال <?=$i;?></td>
		<td style="background-color: #fff;" width="auto"></td>
	</tr>
</table>
<table width="100%" cellspacing="1" style="border: 1px solid;border-collapse: collapse;min-width: 20em;">
	<tr>

	</tr>
<?
/* كود ضبط حجم الصورة مع المتصفح */
if (!empty($sql_raw['img'])){
if($sql_raw['H'] >= 900){
$WW = '50%';
}else{
$WW = '80%';
}

?>
	<tr>
    <td style="text-align: center;background-color: #fff;" colspan="2"><img colspan="2"  border="0" src="<?=$sql_raw['img'];?>" width="<?=$WW;?>" height="auto"></td>
	</tr>
	
<?
}else{}
?>
	<tr>
  <td style="background-color: #fff;" colspan="2">&nbsp;</td>
	</tr>
	<tr>
  <td style="text-align: right;background-color: #fff;" colspan="2"><img border="0" src="./images/55.png" width="32" height="32">&nbsp; <?=$sql_raw['question'];?> :</td>
	</tr>
	<tr>
  <td style="background-color: #fff;" colspan="2">&nbsp;</td>
	</tr>
	<tr align="right">
    <!--  حقول الاختيارات -->
  <td style="background-color: #fff;"  width="90"><input type="radio" value="A" name="A<?=$i;?>"></td>
  <td style="text-align: right;background-color: #fff;" colspan="2"><?=$sql_raw['A'];?></td>
	</tr>
	<tr align="right">
  <td style="background-color: #fff;"  width="90"><input type="radio" value="B" name="A<?=$i;?>"></td>
  <td style="text-align: right;background-color: #fff;" colspan="2"><?=$sql_raw['B'];?></td>
	</tr>
	<tr align="right">
  <td style="background-color: #fff;"  width="90"><input type="radio" value="C" name="A<?=$i;?>"></td>
  <td style="text-align: right;background-color: #fff;" colspan="2"><?=$sql_raw['C'];?></td>
	</tr>
	<tr align="right">
  <td style="background-color: #fff;"   width="90"><input type="radio" value="D" name="A<?=$i;?>"></td>
  <td style="text-align: right;background-color: #fff;" colspan="2"><?=$sql_raw['D'];?></td>
	</tr>
	<tr>
    <?
    /* كود استبدال حرف العربي بحرف انجليزي للاجابة */
    if($sql_raw['answer'] == 'أ'){
      $ans = 'A';
    }elseif($sql_raw['answer'] == 'ب'){
      $ans = 'B';
    }elseif($sql_raw['answer'] == 'ج'){
      $ans = 'C';
    }elseif($sql_raw['answer'] == 'د'){
      $ans = 'D';
    }else{
      $ans = 'error';
    }
    ?>
    <!--  حقل الاجابة الصحيحة حقل مخفي  -->
  <td style="background-color: #fff;" colspan="2"><input type="hidden" name="answer<?=$i;?>" value="<?=$ans;?>" /></td>
	</tr>
</table><br  />

<!--        end           -->
<?
   }}

?>
<div align="center">

  <input type="submit" name="submit" value="تعديل البيانات">
  <input type="hidden" name="hdnLine" value="<?=$i;?>"> </div>
  <br  />
</form>
</div>
</div>
</div>
<br  />
<?
mysqli_close($coo);
ob_end_flush();
?>
</body>
</html>

هذا كود الصفحة اللي استخدمته

بتاريخ 4 ساعة قال Mustafa Suleiman:

الأمر سيتم كالتالي من خلال إنشاء نموذج HTML ومعالجة البيانات الخاصة به:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $answers = $_POST;
  $correctAnswers = array(
    'q1' => 'a',
    'q2' => 'b',
  );

  $score = 0;
  foreach ($answers as $question => $answer) {
    if ($answer === $correctAnswers[$question]) {
      $score++;
    }
  }

  echo '<div id="result">النتيجة: ' . $score . ' من ' . count($correctAnswers) . '</div>';
}
?>

<form id="quiz-form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  <div id="questions">
    <h2>السؤال 1</h2>
    <input type="radio" name="q1" value="a"> الإجابة A
    <input type="radio" name="q1" value="b"> الإجابة B
    <input type="radio" name="q1" value="c"> الإجابة C
    <input type="radio" name="q1" value="d"> الإجابة D

    <h2>السؤال 2</h2>
    <input type="radio" name="q2" value="a"> الإجابة A
    <input type="radio" name="q2" value="b"> الإجابة B
    <input type="radio" name="q2" value="c"> الإجابة C
    <input type="radio" name="q2" value="d"> الإجابة D

  </div>

  <button id="submit-btn" type="submit">إرسال</button>
</form>

لاحظ أننا نقارن البيانات المرسلة بالإجابة الصحيحة من خلال مصفوفة correctAnswers وإضافة النتيجة لمتغير باسم score لكل إجابة صحيحة.

المشكله في هذا السطر  :

    'q1' => 'a',
    'q2' => 'b',
  

انت حطيت سطرين ... المشكلة اللي عندي عدد POST  غير معروف قد يكون اكثر من 2

لان النموذج قد يعرض لمستخدم 10 اسئلة لذلك بيكون هناك 10 POST

ومستخدم اخر قد يعرض له 20 سؤال لذلك بيكون لدي 20 POST

تم التعديل في بواسطة علي الاسمري2
  • 0
نشر
بتاريخ 52 دقائق مضت قال ابوموسى الاسمري:
/* هذا الكود حاولت عن طريقة استخراج النتيجة */
if($_GET["do"] == "Save")
{
	for($i=1;$i<=$_POST["hdnLine"];$i++)
	{
    $a = array($_POST["answer$i"]);
    if($_POST["answer$i"] == $_POST["A$i"]){

      $_POST["A$i"] = 1;
    }else{
      $_POST["A$i"] = 0;
    }
    $my_count = array_sum($_POST["A$i"]);
    echo $my_count;

 
}}

الخطأ لديك هنا في كيفية حساب النقاط .

حيث أولا لا يتم إحتساب النقاط بطريقة صحيحة وأيضا تقوم بطباعة النتيجة بداخل حلقة for أى سيتم طباعة أرقام بعدد الأسئلة التي لديك.

يمكنك تجربة الكود التالي بعد إستبداله بالكود السابق الذي أشرت إليك فيه و إخباري بالنتيجة:

/* هذا الكود حاولت عن طريقة استخراج النتيجة */
if ($_GET["do"] == "Save") {
  $my_count = 0;
  for ($i = 1; $i <= $_POST["hdnLine"]; $i++) {
    $a = array($_POST["answer$i"]);
    if ($_POST["answer$i"] == $_POST["A$i"]) {
      $my_count += 1;
    }
  }
  echo $my_count;
}

 

  • 0
نشر
بتاريخ 8 دقائق مضت قال محمد عاطف17:

الخطأ لديك هنا في كيفية حساب النقاط .

حيث أولا لا يتم إحتساب النقاط بطريقة صحيحة وأيضا تقوم بطباعة النتيجة بداخل حلقة for أى سيتم طباعة أرقام بعدد الأسئلة التي لديك.

يمكنك تجربة الكود التالي بعد إستبداله بالكود السابق الذي أشرت إليك فيه و إخباري بالنتيجة:

/* هذا الكود حاولت عن طريقة استخراج النتيجة */
if ($_GET["do"] == "Save") {
  $my_count = 0;
  for ($i = 1; $i <= $_POST["hdnLine"]; $i++) {
    $a = array($_POST["answer$i"]);
    if ($_POST["answer$i"] == $_POST["A$i"]) {
      $my_count += 1;
    }
  }
  echo $my_count;
}

 

الله يسعدك ... ابشرك ضبط ما شاء الله

تسلم الله يزيدك من علمه

  • 0
نشر (معدل)
بتاريخ 1 ساعة قال محمد عاطف17:

الخطأ لديك هنا في كيفية حساب النقاط .

حيث أولا لا يتم إحتساب النقاط بطريقة صحيحة وأيضا تقوم بطباعة النتيجة بداخل حلقة for أى سيتم طباعة أرقام بعدد الأسئلة التي لديك.

يمكنك تجربة الكود التالي بعد إستبداله بالكود السابق الذي أشرت إليك فيه و إخباري بالنتيجة:

/* هذا الكود حاولت عن طريقة استخراج النتيجة */
if ($_GET["do"] == "Save") {
  $my_count = 0;
  for ($i = 1; $i <= $_POST["hdnLine"]; $i++) {
    $a = array($_POST["answer$i"]);
    if ($_POST["answer$i"] == $_POST["A$i"]) {
      $my_count += 1;
    }
  }
  echo $my_count;
}

 

اخي محمد بارك الله فيك

لدي استفسار اخر

هل بالامكان وضع علامة صح بالاخضر على الاجابة الصحيحة التي اختارها الزائر

وعلامة X على الاجابة الحاطئة .

حتى يعرف الخطأ الذي وقع فيه .

 

لاني لاحظت مجرد ارسال النموذج تظهر النتيجة وتختفي الاسئلة ويأتي بأسئلة عشوائية جديدة

هنا المستخدم ما راح يستفيد ويكون فيه تغذية راجعة بالاجابات الصحيحة

تم التعديل في بواسطة ابورنـــــــد

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...