Выберите несколько элементов из одного раскрывающегося списка и вставьте в несколько строк базы данных

0

Я хочу выделить несколько отдельных курсов для студентов по одной строке на комбинацию "студент-курс", когда данные поступают из поля множественного выбора (флажки) в форме. То есть данные возвращаются как один результат с несколькими курсами, и я хочу разделить это.

Краткая версия: учитель выбирает несколько курсов из одного раскрывающегося списка, но я хочу сохранить данные в несколько рядов.

Вот мой код

<?php

$con = mysqli_connect('localhost','root');

mysqli_select_db($con,'sss_qr');


    $q="select * from  course_tb ";
$result=mysqli_query($con,$q);

?>

<!DOCTYPE html>
<html>
 <head>
  <title>Webslesson Tutorial | Bootstrap Multi Select Dropdown with Checkboxes using Jquery in PHP</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-3-typeahead/4.0.2/bootstrap3-typeahead.min.js"></script>  
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/js/bootstrap-multiselect.js"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/css/bootstrap-multiselect.css" />
 </head>
 <body>
  <br /><br />
  <div class="container" style="width:600px;">
   <h2 align="center">Bootstrap Multi Select Dropdown with Checkboxes using Jquery in PHP</h2>
   <br /><br />
   <form method="post" id="framework_form">
    <div class="form-group">
     <label>Select which Framework you have knowledge</label>
     <select id="framework" name="framework[]" multiple class="form-control" >
      <?php
        if($result)
        {
            while($row=mysqli_fetch_array($result))
            {
                $course=$row["course_name"];
                $code=$row["course_code"];
                echo "<option value='$code'>$course</option>";          
            }
        }
        ?>
     </select>
    </div>
    <div class="form-group">
     <input type="submit" class="btn btn-info" name="submit" value="Submit" />
    </div>
   </form>
   <br />
  </div>
 </body>
</html>
<script>
$(document).ready(function(){
 $('#framework').multiselect({
  nonSelectedText: 'Select Framework',
  enableFiltering: true,
  enableCaseInsensitiveFiltering: true,
  buttonWidth:'400px'
 });

 $('#framework_form').on('submit', function(event){
  event.preventDefault();
  var form_data = $(this).serialize();
  $.ajax({
   url:"insert.php",
   method:"POST",
   data:form_data,
   success:function(data)
   {
    $('#framework option:selected').each(function(){
     $(this).prop('selected', false);
    });
    $('#framework').multiselect('refresh');
    alert(data);
   }
  });
 });


});
</script>

и вставьте файл .php

<?php 
$connect = mysqli_connect("localhost", "root", "", "sss_qr");
if(isset($_POST["framework"]))
{   
    $framework = '';
 foreach($_POST["framework"] as $row)
 {
  $framework .= $row . ', ';
 }
 $framework = substr($framework, 0, -2);
 $query = "INSERT INTO allocoursestudent(course_code) VALUES('".$framework."')";
 if(mysqli_query($connect, $query))
 {
  echo 'Data Inserted';
 }
}
?>
  • 1
    Примечание. Объектно-ориентированный интерфейс к mysqli значительно менее многословен, что облегчает чтение и аудит кода, и его нелегко спутать с устаревшим интерфейсом mysql_query . Прежде, чем вы слишком инвестируете в процедурный стиль, стоит переключиться. Пример: $db = new mysqli(…) и $db->prepare("…") Процедурный интерфейс является артефактом эпохи PHP 4, когда был представлен mysqli API, и в идеале его не следует использовать в новом коде.
  • 1
    ВНИМАНИЕ : при использовании mysqli вы должны использовать параметризованные запросы и bind_param для добавления любых данных в ваш запрос. НЕ используйте интерполяцию или конкатенацию строк для достижения этой цели, поскольку вы создали серьезную ошибку внедрения SQL . НИКОГДА не помещайте $_POST , $_GET или данные любого вида непосредственно в запрос, это может быть очень вредно, если кто-то попытается использовать вашу ошибку.
Показать ещё 1 комментарий
Теги:

2 ответа

0

поэтому я решаю проблему с помощью этого кода.

<?php 
$con = mysqli_connect("localhost", "root", "", "sss_qr");
$course=$_POST['course'];
if($course)
{
    foreach($course as $c)
    {
        $q="INSERT INTO allocoursestudent(course_code) VALUES('".$c."')";
        mysqli_query($con,$q);
    }
}
?>
0

Во-первых, вам нужно создать новую таблицу, которая объединит студентов и курсы. Во-вторых, вам нужно отобразить студентов в форме (выпадающее меню).

После этого вы можете сделать что-то вроде этого:


<?php 
$connect     = mysqli_connect("localhost", "root", "", "sss_qr");

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


    $course_code = mysqli_real_escape_string($con, $_POST["course_code"]);
    $student_id  = mysqli_real_escape_string($con, $_POST["student_id"]);

    $query = "INSERT INTO new_table_name(course_code, student_id) VALUES";

    for($i=0; $i<count($course_code); $i++){
        $query .= " ('".$course_code[$i] ."', '".$student_id[$i]."'),";
    }

    $query  = substr($query, 0, -1);

    if(mysqli_query($connect, $query)){
        echo 'Data Inserted #'.$i;
    }

}
?>

  • 0
    Это создает несколько запросов, но запускает только один из них. Это ошибочный подход. Он также полностью игнорирует проблемы внедрения SQL, которые легко исправить. Можете ли вы адаптировать этот код для решения этих проблем?
  • 0
    @tadman Вы правы, я обновил его.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню