Как лучше вставить предмет и оценку ученика в базу данных? - PullRequest
0 голосов
/ 01 июня 2019

Я новичок в php и занимаюсь разработкой информационной системы для студентов, в которой студентам необходимо ввести 9 предметов и соответствующую им оценку в зависимости от количества сидячих мест. Есть ли лучший способ сделать это, кроме того, что я делал?

Это мои коды.

<script type="text/javascript">
function showDiv(select){
   if(select.value==2){
    document.getElementById('div2a').style.display = "block";
   } else{
    document.getElementById('div2a').style.display = "none";
   }
} 
</script>
<style>
    .striped-border {
        border: 1px solid #0d4115;
        margin: auto;
        margin-top: 5%;
        margin-bottom: 2%;
    }

    .form2a{
      display: none;
    }
    </style>
  <form name="register" method="POST" action="process2.php"  >
<div class="col-md-12">
  <div class="form-group">
    <label>Select Number of Sitting(s)</label>
 <select name="sitting" id="sitting" class="form-control" onchange="showDiv(this)">
                  <option value="1">1</option>
                  <option value="2">2</option>

                  
              </select>
  </div>
  </div>
  <div class="output1" id="div1" name="onesitting">
<div class="col-md-6">
              <div class="form-group">
                <label>School Name</label>
                <input type="text" name="schoolname1" id="schoolname" class="form-control" placeholder="School Name" required>
              </div>
            </div>
     <div class="col-md-6">
    <div class="form-group">
    <label>Exam Type</label>
 <select name="examboard1" id="examboard" class="form-control" required>
                  <option value="">Exam Type</option>
                  <option value="WAEC">WAEC(SSCE)</option>
                  <option value="WAEC">WAEC(GCE)</option>
                  <option value="NECO">NECO(SSCE)</option>
                  <option value="NECO">NECO(GCE)</option>
                  <option value="NABTEB">NABTEB(SSCE)</option>
                  <option value="NABTEB">NABTEB(GCE)</option>
                  <option value="OTHERS">OTHERS</option>

              </select>
  </div>
  </div>
 
  <div class="col-md-6"> 
  <div class="form-group">
    <label>Exam Date</label>
  <?php
  $examyear = range(1960, 2050);
  ?>
   <select class="form-control" name="examdate1" id="examdate" placeholder="Exam Date">
     <option value="">Select date</option>
      <?php
      foreach($examyear as $examdate){
        echo '<option value= "' .$examdate.'">'.$examdate.'</option>';
      }
?>

   </select>
  </div>
  </div>

  <div class="col-md-6"> 
  <div class="form-group">
    <label>Exam Number</label>
   <input type="text" class="form-control" name="examno1" id="examno" placeholder="Exam Number">

  </div>
  </div>
  <br>
 <table width="100%" cellpadding="0" cellspacing="0" border="0" class="table table-borderless" id="example">
            <tr>
              <td width="12%"><label class="control-label">S/NO</label></td>
              <td width="53%"><label class="control-label">SUBJECTS</label></td>
              <td width="35%"><label class="control-label">GRADE</label></td>
            </tr>
                        <tr>
                        <td>1</td>
              <td>
              <?php include("config.php");
    $sql = "SELECT * FROM subjects ORDER BY subject_name ASC";
    $query = mysqli_query($conn, $sql);
    $count  = mysqli_num_rows($query);
?>
                <select name="subject11" class="form-control" id="subject">
<option value="" selected="selected">Select subject</option>
    <?php 
    if($count > 0){
      while($row = mysqli_fetch_assoc($query)){
        $subject_id = $row['subject_id'];
        $subject_name = $row['subject_name'];
        echo "<option>" . $row['subject_name'] . "</option>";
      }
    }else{
      echo "<option value = ''>Subject not available</option>";
    }
?>
</select>
              </td>
              <td>
              <select name="grade11" class="form-control">
                   <option value=""> Select</option>
<option value="A1">A1</option>
<option value="B2">B2</option>
<option value="B3">B3</option>
<option value="C4">C4</option>
<option value="C5">C5</option>
<option value="C6">C6</option>
<option value="D7">D7</option>
<option value="E8">E8</option>
<option value="F9">F9</option>              </select>
            </td>
            </tr>
                          <tr>
              <td>2</td>
              <td>
              <?php include("config.php");
    $sql = "SELECT * FROM subjects ORDER BY subject_name ASC";
    $query = mysqli_query($conn, $sql);
    $count  = mysqli_num_rows($query);
?>
                <select name="subject12" class="form-control" id="subject">
<option value="" selected="selected">Select subject</option>
    <?php 
    if($count > 0){
      while($row = mysqli_fetch_assoc($query)){
        $subject_id = $row['subject_id'];
        $subject_name = $row['subject_name'];
        echo "<option>" . $row['subject_name'] . "</option>";
      }
    }else{
      echo "<option value = ''>Subject not available</option>";
    }
?>
</select>
              </td>
              <td>
              <select name="grade12" class="form-control">
                   <option value=""> Select </option>
<option value="A1">A1</option>
<option value="B2">B2</option>
<option value="B3">B3</option>
<option value="C4">C4</option>
<option value="C5">C5</option>
<option value="C6">C6</option>
<option value="D7">D7</option>
<option value="E8">E8</option>
<option value="F9">F9</option>              </select>
            </td>
            </tr>
                          <tr>
              <td>3</td>
              <td>
              <?php include("config.php");
    $sql = "SELECT * FROM subjects ORDER BY subject_name ASC";
    $query = mysqli_query($conn, $sql);
    $count  = mysqli_num_rows($query);
?>
                <select name="subject13" class="form-control" id="subject">
<option value="" selected="selected">Select subject</option>
    <?php 
    if($count > 0){
      while($row = mysqli_fetch_assoc($query)){
        $subject_id = $row['subject_id'];
        $subject_name = $row['subject_name'];
        echo "<option>" . $row['subject_name'] . "</option>";
      }
    }else{
      echo "<option value = ''>Subject not available</option>";
    }
?>
</select>
              </td>
              <td>
              <select name="grade13" class="form-control">
                   <option value=""> Select </option>
<option value="A1">A1</option>
<option value="B2">B2</option>
<option value="B3">B3</option>
<option value="C4">C4</option>
<option value="C5">C5</option>
<option value="C6">C6</option>
<option value="D7">D7</option>
<option value="E8">E8</option>
<option value="F9">F9</option>              </select>
            </td>
            </tr>
                          <tr>
              <td>4</td>
              <td>
              <?php include("config.php");
    $sql = "SELECT * FROM subjects ORDER BY subject_name ASC";
    $query = mysqli_query($conn, $sql);
    $count  = mysqli_num_rows($query);
?>
                <select name="subject14" class="form-control" id="subject">
<option value="" selected="selected">Select subject</option>
    <?php 
    if($count > 0){
      while($row = mysqli_fetch_assoc($query)){
        $subject_id = $row['subject_id'];
        $subject_name = $row['subject_name'];
        echo "<option>" . $row['subject_name'] . "</option>";
      }
    }else{
      echo "<option value = ''>Subject not available</option>";
    }
?>
                
</select>
              </td>
              <td>
              <select name="grade14" class="form-control">
                   <option value=""> Select </option>
<option value="A1">A1</option>
<option value="B2">B2</option>
<option value="B3">B3</option>
<option value="C4">C4</option>
<option value="C5">C5</option>
<option value="C6">C6</option>
<option value="D7">D7</option>
<option value="E8">E8</option>
<option value="F9">F9</option>              </select>
            </td>
            </tr>
                          <tr>
              <td>5</td>
              <td>
          <?php include("config.php");
    $sql = "SELECT * FROM subjects ORDER BY subject_name ASC";
    $query = mysqli_query($conn, $sql);
    $count  = mysqli_num_rows($query);
?>
                <select name="subject15" class="form-control" id="subject">
<option value="" selected="selected">Select subject</option>
    <?php 
    if($count > 0){
      while($row = mysqli_fetch_assoc($query)){
        $subject_id = $row['subject_id'];
        $subject_name = $row['subject_name'];
        echo "<option>" . $row['subject_name'] . "</option>";
      }
    }else{
      echo "<option value = ''>Subject not available</option>";
    }
?>

</select>
              </td>
              <td>
              <select name="grade15" class="form-control">
                   <option value="">Select </option>
<option value="A1">A1</option>
<option value="B2">B2</option>
<option value="B3">B3</option>
<option value="C4">C4</option>
<option value="C5">C5</option>
<option value="C6">C6</option>
<option value="D7">D7</option>
<option value="E8">E8</option>
<option value="F9">F9</option>              </select>
            </td>
            </tr>
                          
                        </table>

                        <br>
  </div>

<div class="form2a" id="div2a" name="twositting">

                        <br>
<h4 style="text-align:center; margin-top: 0px; margin-bottom: 5%; background-color:#0d4115; width: auto; color: white;"> SECOND SITTING</h4>
<div class="col-md-6">
              <div class="form-group">
                <label>School Name</label>
                <input type="text" name="schoolname2" id="schoolname" class="form-control" placeholder="School Name" required>
                <span id="error_schoolname" class="text-danger"></span>

              </div>
            </div>
            <div class="col-md-6">
    <div class="form-group">
    <label>Exam Type</label>
 <select name="examboard2" id="examboard" class="form-control" required>
                  <option value="">Exam Type</option>
                  <option value="WAEC">WAEC(SSCE)</option>
                  <option value="WAEC">WAEC(GCE)</option>
                  <option value="NECO">NECO(SSCE)</option>
                  <option value="NECO">NECO(GCE)</option>
                  <option value="NABTEB">NABTEB(SSCE)</option>
                  <option value="NABTEB">NABTEB(GCE)</option>
                  <option value="OTHERS">OTHERS</option>
                  <span id="error_examboard" class="text-danger"></span>

              </select>
  </div>
  </div>
  
  <div class="col-md-6"> 
  <div class="form-group">
    <label>Exam Date</label>
  <?php
  $examyear = range(1960, 2099);
  ?>
   <select class="form-control" name="examdate2" id="examdate" placeholder="Exam Date">
     <option value="">Select date</option>
      <?php
      foreach($examyear as $examdate){
        echo '<option value= "' .$examdate.'">'.$examdate.'</option>';
      }
?>
   <span id="error_examdate" class="text-danger"></span>

   </select>
  </div>
  </div>

  <div class="col-md-6"> 
  <div class="form-group">
    <label>Exam Number</label>
   <input type="text" class="form-control" name="examno2" id="examno" placeholder="Exam Number">
   <span id="error_examno" class="text-danger"></span>

  </div>
  </div>
  <br>
 <table width="100%" cellpadding="0" cellspacing="0" border="0" class="table table-borderless" id="example">
            <tr>
              <td width="12%"><label class="control-label">S/NO</label></td>
              <td width="53%"><label class="control-label">SUBJECTS</label></td>
              <td width="35%"><label class="control-label">GRADE</label></td>
            </tr>
                        <tr>
              <td>1</td>
              <td>
              <?php include("config.php");
    $sql = "SELECT * FROM subjects ORDER BY subject_name ASC";
    $query = mysqli_query($conn, $sql);
    $count  = mysqli_num_rows($query);
?>
                <select name="subject21" class="form-control" id="subject">
<option value="" selected="selected">Select subject</option>
    <?php 
    if($count > 0){
      while($row = mysqli_fetch_assoc($query)){
        $subject_id = $row['subject_id'];
        $subject_name = $row['subject_name'];
        echo "<option>" . $row['subject_name'] . "</option>";
      }
    }else{
      echo "<option value = ''>Subject not available</option>";
    }
?>
</select>
              </td>
              <td>
              <select name="grade21" class="form-control">
                   <option value=""> Select</option>
<option value="A1">A1</option>
<option value="B2">B2</option>
<option value="B3">B3</option>
<option value="C4">C4</option>
<option value="C5">C5</option>
<option value="C6">C6</option>
<option value="D7">D7</option>
<option value="E8">E8</option>
<option value="F9">F9</option>              </select>
            </td>
            </tr>
                          <tr>
              <td>2</td>
              <td>
              <?php include("config.php");
    $sql = "SELECT * FROM subjects ORDER BY subject_name ASC";
    $query = mysqli_query($conn, $sql);
    $count  = mysqli_num_rows($query);
?>
                <select name="subject22" class="form-control" id="subject">
<option value="" selected="selected">Select subject</option>
    <?php 
    if($count > 0){
      while($row = mysqli_fetch_assoc($query)){
        $subject_id = $row['subject_id'];
        $subject_name = $row['subject_name'];
        echo "<option>" . $row['subject_name'] . "</option>";
      }
    }else{
      echo "<option value = ''>Subject not available</option>";
    }
?>
</select>
              </td>
              <td>
              <select name="grade22" class="form-control">
                   <option value=""> Select </option>
<option value="A1">A1</option>
<option value="B2">B2</option>
<option value="B3">B3</option>
<option value="C4">C4</option>
<option value="C5">C5</option>
<option value="C6">C6</option>
<option value="D7">D7</option>
<option value="E8">E8</option>
<option value="F9">F9</option>              </select>
            </td>
            </tr>
                          <tr>
              <td>3</td>
              <td>
              <?php include("config.php");
    $sql = "SELECT * FROM subjects ORDER BY subject_name ASC";
    $query = mysqli_query($conn, $sql);
    $count  = mysqli_num_rows($query);
?>
                <select name="subject23" class="form-control" id="subject">
<option value="" selected="selected">Select subject</option>
    <?php 
    if($count > 0){
      while($row = mysqli_fetch_assoc($query)){
        $subject_id = $row['subject_id'];
        $subject_name = $row['subject_name'];
        echo "<option>" . $row['subject_name'] . "</option>";
      }
    }else{
      echo "<option value = ''>Subject not available</option>";
    }
?>
</select>
              </td>
              <td>
              <select name="grade23" class="form-control">
                   <option value=""> Select </option>
<option value="A1">A1</option>
<option value="B2">B2</option>
<option value="B3">B3</option>
<option value="C4">C4</option>
<option value="C5">C5</option>
<option value="C6">C6</option>
<option value="D7">D7</option>
<option value="E8">E8</option>
<option value="F9">F9</option>              </select>
            </td>
            </tr>
                          <tr>
              <td>4</td>
              <td>
              <?php include("config.php");
    $sql = "SELECT * FROM subjects ORDER BY subject_name ASC";
    $query = mysqli_query($conn, $sql);
    $count  = mysqli_num_rows($query);
?>
                <select name="subject24" class="form-control" id="subject">
<option value="" selected="selected">Select subject</option>
    <?php 
    if($count > 0){
      while($row = mysqli_fetch_assoc($query)){
        $subject_id = $row['subject_id'];
        $subject_name = $row['subject_name'];
        echo "<option>" . $row['subject_name'] . "</option>";
      }
    }else{
      echo "<option value = ''>Subject not available</option>";
    }
?>
                
</select>
              </td>
              <td>
              <select name="grade24" class="form-control">
                   <option value=""> Select </option>
<option value="A1">A1</option>
<option value="B2">B2</option>
<option value="B3">B3</option>
<option value="C4">C4</option>
<option value="C5">C5</option>
<option value="C6">C6</option>
<option value="D7">D7</option>
<option value="E8">E8</option>
<option value="F9">F9</option>              </select>
            </td>
            </tr>
                          <tr>
              <td>5</td>
              <td>
          <?php include("config.php");
    $sql = "SELECT * FROM subjects ORDER BY subject_name ASC";
    $query = mysqli_query($conn, $sql);
    $count  = mysqli_num_rows($query);
?>
                <select name="subject25" class="form-control" id="subject">
<option value="" selected="selected">Select subject</option>
    <?php 
    if($count > 0){
      while($row = mysqli_fetch_assoc($query)){
        $subject_id = $row['subject_id'];
        $subject_name = $row['subject_name'];
        echo "<option>" . $row['subject_name'] . "</option>";
      }
    }else{
      echo "<option value = ''>Subject not available</option>";
    }
?>

</select>
              </td>
              <td>
              <select name="grade25" class="form-control">
                   <option value="">Select </option>
<option value="A1">A1</option>
<option value="B2">B2</option>
<option value="B3">B3</option>
<option value="C4">C4</option>
<option value="C5">C5</option>
<option value="C6">C6</option>
<option value="D7">D7</option>
<option value="E8">E8</option>
<option value="F9">F9</option>              </select>
            </td>
            </tr>
                         
             
                        </table>

</div>

   <button type="submit" class="btn btn-primary" name="submit">Submit</button>
      
  </form>
            

Выше приведены мои коды HTML и JavaScript. Я использую этот JavaScript для отображения формы, основанной на количестве выбранных заседаний.

Ниже мой код PHP

$sitting = mysqli_real_escape_string($conn, $_POST['sitting']);
$schoolname1 = mysqli_real_escape_string($conn, $_POST['schoolname1']);
$examboard1 = mysqli_real_escape_string($conn, $_POST['examboard1']);
$examdate1 = mysqli_real_escape_string($conn, $_POST['examdate1']);
$examno1 = mysqli_real_escape_string($conn, $_POST['examno1']);
$subject11 = mysqli_real_escape_string($conn, $_POST['subject11']);
$grade11 = mysqli_real_escape_string($conn, $_POST['grade11']);
$subject12 = mysqli_real_escape_string($conn, $_POST['subject12']);
$grade12 = mysqli_real_escape_string($conn, $_POST['grade12']);
$subject13 = mysqli_real_escape_string($conn, $_POST['subject13']);
$grade13 = mysqli_real_escape_string($conn, $_POST['grade13']);
$subject14 = mysqli_real_escape_string($conn, $_POST['subject14']);
$grade14 = mysqli_real_escape_string($conn, $_POST['grade14']);
$subject15 = mysqli_real_escape_string($conn, $_POST['subject15']);
$grade15 = mysqli_real_escape_string($conn, $_POST['grade15']);
$schoolname2 = mysqli_real_escape_string($conn, $_POST['schoolname2']);
$examboard2 = mysqli_real_escape_string($conn, $_POST['examboard2']);
$examdate2 = mysqli_real_escape_string($conn, $_POST['examdate2']);
$examno2 = mysqli_real_escape_string($conn, $_POST['examno2']);
$subject21 = mysqli_real_escape_string($conn, $_POST['subject21']);
$grade21 = mysqli_real_escape_string($conn, $_POST['grade21']);
$subject22 = mysqli_real_escape_string($conn, $_POST['subject22']);
$grade22 = mysqli_real_escape_string($conn, $_POST['grade22']);
$subject23 = mysqli_real_escape_string($conn, $_POST['subject23']);
$grade23 = mysqli_real_escape_string($conn, $_POST['grade23']);
$subject24 = mysqli_real_escape_string($conn, $_POST['subject24']);
$grade24 = mysqli_real_escape_string($conn, $_POST['grade24']);
$subject25 = mysqli_real_escape_string($conn, $_POST['subject25']);
$grade25 = mysqli_real_escape_string($conn, $_POST['grade25']);


$enter = "INSERT INTO applicants(sitting, schoolname1,  examboard1, 
examdate1, examno1, subject11, grade11, subject12, grade12, subject13, 
grade13, subject14, grade14, subject15, grade15, schoolname2, examboard2, 
examdate2, examno2, subject21, grade21, subject22, grade22, subject23, 
grade23, subject24, grade24, subject25, grade25) VALUES('$sitting', 
'$schoolname1', '$examboard1', '$examdate1', '$examno1', '$subject11', 
'$grade11', '$subject12', '$grade12', '$subject13', '$grade13', 
'$subject14', '$grade14', '$subject15', '$grade15','$schoolname2', 
'$examboard2', '$examdate2', '$examno2', '$subject21', '$grade21', 
'$subject22', '$grade22', '$subject23', '$grade23', '$subject24', 
'$grade24', '$subject25', '$grade25')";
$result = mysqli_query($conn, $enter);
if($result){
 echo "<script type='text/javascript'>alert('Details Uploaded !!'); 
</script>";
header('location: success.php');
}else{
echo "<script type='text/javascript'>alert('Details Failed !!');</script>";

}
}

Есть ли лучший способ сделать это, не повторяя все эти предметы и оценки?

1 Ответ

2 голосов
/ 01 июня 2019

Вы попадаете в рассол с именами ваших форм. PHP делает это немного проще, позволяя указывать имена массивов в формах:

<code><?php
if ($_POST)
{
    echo "<pre>";
    print_r($_POST);
    echo "
"; } ?> Оценки:

Это производит этот пост вывод, который легко зациклить:

Array
(
    [grade] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

)

Это работает для списков данных, но ваш вариант использования имеет дополнительное измерение, которое усложняет это. У вас есть:

  • список первого порядка, содержащий название школы, экзаменационную комиссию, дату экзамена и номер экзамена
  • список второго порядка, принадлежащий первому, который содержит предметы и оценки

Однако PHP также будет поддерживать это, позволяя вам указать, к какому подсписку относятся списки второго порядка:

<code><?php
if ($_POST)
{
    echo "<pre>";
    print_r($_POST);
    echo "
"; } ?> Board: Оценки:
Board: Оценки:

Это производит это расположение:

Array
(
    [board] => Array
        (
            [0] => a
            [1] => b
        )

    [grade] => Array
        (
            [0] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                )

            [1] => Array
                (
                    [0] => 4
                    [1] => 5
                    [2] => 6
                )

        )

)

Здесь вы можете видеть, что 0-я запись в board - это экзаменационная доска (список первого порядка), а 0-я запись в grade - это сам по себе список (список второго порядка, относящийся к 0-й доске).

Я оставлю это вам как ценное упражнение для добавления других элементов в списки первого и второго порядка здесь.


Что касается таблицы, то это достаточно широкая тема, чтобы поставить другой вопрос самостоятельно. Структура этого должна быть нормализована, поэтому экзаменационные доски, экзамены, студенты и оценки хранятся в отдельных таблицах. «Оценка», вероятно, является центральной таблицей, поскольку для этого требуется экзамен и ученик, а экзамен, в свою очередь, требует доски.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...