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

مشكلة في الاستعلام

عبدالله العبدالله

السؤال

لدي جدول واريد الاستعلام يقوم بالبحث عن المواد المتبقية للطالب مثلا طالب لديه مقرر1 ومقرر2 ومقرر3 ومقرر4 عند الضعط على بحث يقوم بطباعة الطلاب الذين لديهم مقرر1و2و3و4 مثل الي في الصورة 

شرح المطلوب

102535134.png

<?php
$host="localhost";
$user="root";
$pass="";
$db="res";
$con=mysqli_connect($host,$user,$pass,$db);
 ?>
<div align='center'>
<form action='' method='post'>
<input type='text' name='search'><br>
<input type='text' name='search1'><br>
<input type='text' name='search2'><br>
<input type='text' name='search3'><br>
<input type='submit' name='btn_search' value='Search'>
</form>
<?php
if (isset($_POST["btn_search"])) {
?>
<table border='5'>
 <tr>

         <th>رقم المتدرب </th>
         <th>اسم المتدرب</th>
         <th>التخصص  </th>
         <th>المعدل </th>
           <th>رمز المقرر </th>
           <th>اسم المقرر  </th>
           <th>الواحدات المعتمدة </th>
</tr>
<?php

	$str = $_POST["search"];
  $str1 = $_POST["search1"];
  $str2 = $_POST["search2"];
  $str3 = $_POST["search3"];
  $sh=mysqli_query($con,"SELECT  id_trainee,name,specialty,gpa,ramz,name_mogrr,credit FROM `tr1`  WHERE ramz IN ($str2,'$str3')  ");
  //$sh=mysqli_query($con,"SELECT id_trainee,name,specialty,gpa,ramz,name_mogrr,credit FROM `tr1`  WHERE id_trainee like '%$str%' and ramz in like'%$str2%','%$str3%'  ");
  //  $sh=mysqli_query($con,"SELECT id_trainee,name,specialty,gpa,ramz,name_mogrr,credit FROM `tr1` WHERE id_trainee between '$str' and '$str1' and '$str2'");

  while($row = mysqli_fetch_array($sh)){
?>
<tr>
<td> <?php echo $row['id_trainee']?></td>
<td> <?php echo $row['name']?></td>
<td> <?php echo $row['specialty']?></td>
<td> <?php echo $row['gpa']?></td>
<td> <?php echo $row['ramz']?></td>
<td> <?php echo $row['name_mogrr']?></td>
<td> <?php echo $row['credit']?></td>
</tr>
<?php
}
 }

 ?>

 

test1.php

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

الاستعلام الحالي يبحث فقط عن الطلاب المسجلين في مقررين محددين، لكن  للبحث عن الطلاب الذين يدرسون جميع المقررات المحددة هناك  يلزم تعديل الاستعلام لكي يتمكن من العثور على الطلاب المسجلين في جميع المقررات المذكورة، بدلا من البحث  عن مقررين فقط.

 

<?php
$host="localhost";
$user="root";
$pass="";
$db="res";
$con=mysqli_connect($host,$user,$pass,$db);
?>
<div align='center'>
  <form action='' method='post'>
    <input type='text' name='search'><br>
    <input type='text' name='search1'><br>
    <input type='text' name='search2'><br>
    <input type='text' name='search3'><br>
    <input type='submit' name='btn_search' value='Search'>
  </form>
  <?php
  if (isset($_POST["btn_search"])) {
  ?>
  <table border='5'>
    <tr>
      <th>رقم المتدرب </th>
      <th>اسم المتدرب</th>
      <th>التخصص  </th>
      <th>المعدل </th>
      <th>رمز المقرر </th>
      <th>اسم المقرر  </th>
      <th>الواحدات المعتمدة </th>
    </tr>
    <?php
    $str = $_POST["search"];
    $str1 = $_POST["search1"];
    $str2 = $_POST["search2"];
    $str3 = $_POST["search3"];
    $sh=mysqli_query($con, "SELECT id_trainee, name, specialty, gpa, ramz, name_mogrr, credit FROM `tr1` 
                            WHERE id_trainee LIKE '%$str%' 
                            AND ramz IN ('$str', '$str1', '$str2', '$str3')
                            GROUP BY id_trainee
                            HAVING COUNT(DISTINCT ramz) = 4");
    while($row = mysqli_fetch_array($sh)){
    ?>
    <tr>
      <td> <?php echo $row['id_trainee']?></td>
      <td> <?php echo $row['name']?></td>
      <td> <?php echo $row['specialty']?></td>
      <td> <?php echo $row['gpa']?></td>
      <td> <?php echo $row['ramz']?></td>
      <td> <?php echo $row['name_mogrr']?></td>
      <td> <?php echo $row['credit']?></td>
    </tr>
    <?php
    }
    }
    ?>
  </table>
</div>

 

هذا التعديل يستخدم `GROUP BY` مع `HAVING COUNT(DISTINCT ramz) = 4` للبحث عن الطلاب الذين لديهم جميع المقررات المحددة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 12‏/11‏/2023 at 15:05 قال khaleddoosama:

الاستعلام الحالي يبحث فقط عن الطلاب المسجلين في مقررين محددين، لكن  للبحث عن الطلاب الذين يدرسون جميع المقررات المحددة هناك  يلزم تعديل الاستعلام لكي يتمكن من العثور على الطلاب المسجلين في جميع المقررات المذكورة، بدلا من البحث  عن مقررين فقط.

 

<?php
$host="localhost";
$user="root";
$pass="";
$db="res";
$con=mysqli_connect($host,$user,$pass,$db);
?>
<div align='center'>
  <form action='' method='post'>
    <input type='text' name='search'><br>
    <input type='text' name='search1'><br>
    <input type='text' name='search2'><br>
    <input type='text' name='search3'><br>
    <input type='submit' name='btn_search' value='Search'>
  </form>
  <?php
  if (isset($_POST["btn_search"])) {
  ?>
  <table border='5'>
    <tr>
      <th>رقم المتدرب </th>
      <th>اسم المتدرب</th>
      <th>التخصص  </th>
      <th>المعدل </th>
      <th>رمز المقرر </th>
      <th>اسم المقرر  </th>
      <th>الواحدات المعتمدة </th>
    </tr>
    <?php
    $str = $_POST["search"];
    $str1 = $_POST["search1"];
    $str2 = $_POST["search2"];
    $str3 = $_POST["search3"];
    $sh=mysqli_query($con, "SELECT id_trainee, name, specialty, gpa, ramz, name_mogrr, credit FROM `tr1` 
                            WHERE id_trainee LIKE '%$str%' 
                            AND ramz IN ('$str', '$str1', '$str2', '$str3')
                            GROUP BY id_trainee
                            HAVING COUNT(DISTINCT ramz) = 4");
    while($row = mysqli_fetch_array($sh)){
    ?>
    <tr>
      <td> <?php echo $row['id_trainee']?></td>
      <td> <?php echo $row['name']?></td>
      <td> <?php echo $row['specialty']?></td>
      <td> <?php echo $row['gpa']?></td>
      <td> <?php echo $row['ramz']?></td>
      <td> <?php echo $row['name_mogrr']?></td>
      <td> <?php echo $row['credit']?></td>
    </tr>
    <?php
    }
    }
    ?>
  </table>
</div>

 

هذا التعديل يستخدم `GROUP BY` مع `HAVING COUNT(DISTINCT ramz) = 4` للبحث عن الطلاب الذين لديهم جميع المقررات المحددة.

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 دقائق مضت قال عبدالله العبدالله:

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

استخدم EXISTS لفحص وجود تخصص آخر يحتوي على نفس المواد، أي تحديث الاستعلام كالتالي:

<?php
$host="localhost";
$user="root";
$pass="";
$db="res";
$con=mysqli_connect($host,$user,$pass,$db);
?>
<div align='center'>
  <form action='' method='post'>
    <input type='text' name='search'><br>
    <input type='text' name='search1'><br>
    <input type='text' name='search2'><br>
    <input type='text' name='search3'><br>
    <input type='text' name='search_specialty'><br>
    <input type='submit' name='btn_search' value='Search'>
  </form>
  <?php
  if (isset($_POST["btn_search"])) {
  ?>
  <table border='5'>
    <tr>
      <th>رقم المتدرب </th>
      <th>اسم المتدرب</th>
      <th>التخصص  </th>
      <th>المعدل </th>
      <th>رمز المقرر </th>
      <th>اسم المقرر  </th>
      <th>الواحدات المعتمدة </th>
    </tr>
    <?php
    $str = $_POST["search"];
    $str1 = $_POST["search1"];
    $str2 = $_POST["search2"];
    $str3 = $_POST["search3"];
    $str_specialty = $_POST["search_specialty"];
    $sh=mysqli_query($con, "SELECT t1.id_trainee, t1.name, t1.specialty, t1.gpa, t1.ramz, t1.name_mogrr, t1.credit
                            FROM `tr1` t1
                            WHERE t1.id_trainee LIKE '%$str%' 
                            AND t1.ramz IN ('$str', '$str1', '$str2', '$str3')
                            AND EXISTS (
                                SELECT 1
                                FROM `tr1` t2
                                WHERE t2.id_trainee = t1.id_trainee
                                AND t2.name_mogrr = '$str_specialty'
                                AND t2.ramz IN ('$str', '$str1', '$str2', '$str3')
                            )
                            GROUP BY t1.id_trainee
                            HAVING COUNT(DISTINCT t1.ramz) = 4");
    while($row = mysqli_fetch_array($sh)){
    ?>
    <tr>
      <td> <?php echo $row['id_trainee']?></td>
      <td> <?php echo $row['name']?></td>
      <td> <?php echo $row['specialty']?></td>
      <td> <?php echo $row['gpa']?></td>
      <td> <?php echo $row['ramz']?></td>
      <td> <?php echo $row['name_mogrr']?></td>
      <td> <?php echo $row['credit']?></td>
    </tr>
    <?php
    }
    }
    ?>
  </table>
</div>

تم إضافة متغير search_specialty لاستيفاء اسم التخصص الإضافي الذي تريد البحث عنه، ثم استخدام EXISTS في الاستعلام للتحقق مما إذا كان هناك تخصص آخر يحتوي على نفس المواد.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

شاكر لك جزيل الشكر

فضلا المساعدة 

حيث الكود التالي يعمل لكن بدون not in  والمطلوب في not in  هو استبعاد المواد التي داخل not in حيث يستعلم بشكل ادق ( مثال على ذلك اريد الطلاب الذي لديهم مواد التاليه داعم وانجل وداعم واسلم وشبكا بشرط ان لايوجد لديهم المواد التاليه حاسب وانجل وانجل وحاسب وحاسب)

كيف الطريقة؟

<link rel="stylesheet" href="main.css">

<?php
$host="localhost";
$user="root";
$pass="";
$db="res";
$con=mysqli_connect($host,$user,$pass,$db);
?>
<div align='center'>
  <form action='' method='post'>

    <input class="button"type='submit' name='btn_search' value='مستوى رابع دعم فني  '>
    <br><br>
    <button class="button" onclick="myfunction()">تصدير </button>
    <br><br>
    <a href="main.html" class="button">الرئــيـــســيــة</a>
    <br><br>
  </form>
  <?php
  if (isset($_POST["btn_search"])) {
  ?>
  <table border='5'>
    <tr>
      <th>رقم المتدرب </th>
      <th>اسم المتدرب</th>
      <th>التخصص  </th>
      <th>المعدل </th>

    </tr>

    </tr>
    <?php

    $sh=mysqli_query($con, "SELECT id_trainee, name, specialty, gpa FROM `tr1`
                            WHERE id_trainee LIKE '%4432%'
                            AND ramz IN ( 'داعم - 221', 'انجل - 204', 'داعم - 151','اسلم - 101','شبكا - 121') AND ramz NOT IN('حاسب - 102', 'انجل - 102', 'انجل - 101','حاسب - 101','حاسب - 121')
                            GROUP BY id_trainee
                            HAVING COUNT(DISTINCT ramz) = 5");
    while($row = mysqli_fetch_array($sh)){
    ?>
    <tr>
      <td> <?php echo $row['id_trainee']?></td>
      <td> <?php echo $row['name']?></td>
      <td> <?php echo $row['specialty']?></td>
      <td> <?php echo $row['gpa']?></td>


    </tr>
    <?php
    }
    }
    ?>
  </table>
</div>

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

 

لإدراج المتغيرات $_POST في استعلامك، يجب أن تتأكد من أن القيم المدخلة من المستخدم تُعقم بشكل صحيح لمنع الهجمات من نوع SQL Injection
والاستعلام الصحيح سيكون هو 
 

if (isset($_POST["btn_search"])) {

    $str = mysqli_real_escape_string($con, $_POST["search"]);
    $str1 = mysqli_real_escape_string($con, $_POST["search1"]);
    $str2 = mysqli_real_escape_string($con, $_POST["search2"]);
    $str3 = mysqli_real_escape_string($con, $_POST["search3"]);

    $query = "
        SELECT id_trainee, name, specialty, gpa
        FROM `tr1`
        WHERE ramz IN ('$str', '$str1', '$str2', '$str3')
        GROUP BY id_trainee
        HAVING COUNT(DISTINCT ramz) = 4
        AND COUNT(*) = 4;
    ";

 
    $result = mysqli_query($con, $query);
    
   
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...