Как сохранить данные цикла в базе данных на php и javascript?

#javascript #php #forms

#javascript #php #формы

Вопрос:

Я разрабатываю форму, в которой есть несколько полей, и данные которой сохраняются в базе данных sql server. Я могу сохранить данные в базе данных для остальной части формы, однако я застрял на кнопке, которая при нажатии показывает больше файлов. Это цикл, который выполняется пять раз, поэтому у пользователя будет возможность добавлять сведения о своих наставниках пять раз. Я не уверен, как сохранить данные цикла в базе данных.

Вот код:

 <div class="container" >
        <form class="cmxform" action ='functions/processform.php' id="Form1" method="post" enctype="multipart/form-data">
            <div id="FormResult1" class="hide" role="alert">
                <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">amp;times;</span></button>
                <div id="resultFormContent1"></div>
            </div>
<h1>Contact Information</h1>                
                <div class="form-row">
                <div class="container">
                    <div class="form-group col-md-6">
                        <label for="fName">First Name </label>
                        <input type="text" class="form-control" id="fName" name="fName" required>
                    </div>
                    <div class="form-group col-md-6">
                        <label for="lName">Last Name </label>
                        <input type="text" class="form-control" id="lName" name="lName" required>
                    </div>
                    <div class="form-group col-md-6">
                    <label for="uEmail">University Email </label>
                    <input type="email" class="form-control" id="uEmail" name="uEmail" required>
                </div>
</div>
</div>
<div id=new_site></div>
   
            <button type="button" class="btn btn-default"  onClick="addSite()">Add Mentor</button>
            <button type="button" class="btn btn-default"  onClick="removeSite()">Remove Mentor</button>
            <input type="hidden" value="1" id="total_sites">
<div class="form-group col-md-12">
                <button class="btn btn-info btn-primary" id="registerSubmit" type="submit">Submit</button>
            </div>
  <script> 
       function addSite() {
    
       var new_total_sites = parseInt($('#total_sites').val())   1;
     if ($('#total_sites').val() >= 4) {
     $('button:contains("Add Mentor")').prop('disabled', true);
   }
   
   var new_label= "<label id='new_label9_"   new_total_sites
                  "'><h1>Mentor#"  new_total_sites  "</h1></label><br>";
   var new_site_label = "<label id='new_label1_"   new_total_sites
                  "'>Length of Time in Research: </label>";
   var new_site_input = "<input id='new_site_"
                  new_total_sites
                  "' type='text' class='form-control col-md-12' list='sites' name='site[]'></br>";
   var new_slot_label = "<label id='new_label2_"   new_total_sites
                  "'>Research Institution</label>";
   var new_slot_input = "<input class='form-control col-md-12' id='new_slot_"
                  new_total_sites   "' name='slots[]'></br>";
  var new_research_label = "<label id='new_label3_"   new_total_sites
                  "'>Research Mentor</label>";
   var new_research_input = "<input class='form-control' id='new_research_"
                  new_total_sites   "' name='slots[]'></br>";
   var new_form_group_label= "<label id='new_label4_"   new_total_sites
                  "'>Type of Research</label><br>";
   var new_basic_label = "<input type='checkbox' id='checkbox1"   new_total_sites  "' value='basic'><label for='basic' id='basic"  new_total_sites  "'>Basic</label></br>";
   var new_clinical_label = "<input type='checkbox' id='checkbox2"   new_total_sites  "' value='clinical'><label for='clinical' id='clinical"  new_total_sites  "'>Clinical</label></br></div>";
   var new_form_label= "<label id='new_label5_"   new_total_sites
                  "'><h1>Mentor's Contact Information</h1></label>";
   var new_mentor_label = "<label id='new_label6_"   new_total_sites
                  "'>Mentor's Phone</label>";
   var new_mentor_input = "<input class='form-control' id='new_mentor_"
                  new_total_sites   "' name='slots[]'></br>";
   var new_mentoremail_label ="<label id='new_label7_"   new_total_sites
                  "'>Mentor's Email</label>";
    var new_mentoremail_input = "<input class='form-control' id='new_mentoremail_"
                  new_total_sites   "' name='slots[]'></br>";
    var new_describeresearch_label = "<label id='new_label8_"   new_total_sites
                  "'>Describe your research</label></div>";
    var new_describeresearch_input = "<input class='form-control' id='new_describeresearch_"
                  new_total_sites   "' name='slots[]'></br>";

   $('#new_site').append(new_label);
   $('#new_site').append(new_site_label);
   $('#new_site').append(new_site_input);
   $('#new_site').append(new_slot_label);
   $('#new_site').append(new_slot_input);
   $('#new_site').append(new_research_label);
   $('#new_site').append(new_research_input);
   $('#new_site').append(new_form_group_label);
   $('#new_site').append(new_basic_label);
   $('#new_site').append(new_clinical_label);
   $('#new_site').append(new_form_label);
   $('#new_site').append(new_mentor_label);
   $('#new_site').append(new_mentor_input);
   $('#new_site').append(new_mentoremail_label);
   $('#new_site').append(new_mentoremail_input);
   $('#new_site').append(new_describeresearch_label);
   $('#new_site').append(new_describeresearch_input);
   
   

   $('#total_sites').val(new_total_sites)
    }


 function removeSite() {
   var last_total_site = $('#total_sites').val();
   if (last_total_site > 1) {
         $('#new_label9_'   last_total_site).remove('');
         $('#new_label1_'   last_total_site).remove('');
         $('#new_site_'   last_total_site).remove('');
         $('#new_label2_'   last_total_site).remove('');
         $('#new_slot_'   last_total_site).remove('');
         $('#new_label3_'   last_total_site).remove('');
         $('#new_research_'   last_total_site).remove('');
         $('#new_label4_'   last_total_site).remove('');
         $('#basic'   last_total_site).remove('');
         $('#clinical'   last_total_site).remove('');
         $('#checkbox1'   last_total_site).remove('');
         $('#checkbox2'   last_total_site).remove('');
         $('#new_label5_'   last_total_site).remove('');
         $('#new_label6_'   last_total_site).remove('');
         $('#new_mentor_'   last_total_site).remove('');
         $('#new_label7_'   last_total_site).remove('');
         $('#new_mentoremail_'   last_total_site).remove('');
         $('#new_label8_'   last_total_site).remove('');
         $('#new_describeresearch_'   last_total_site).remove('');
         
        $('#total_sites').val(last_total_site - 1);
   }
 }

   </script>
</body>

</html>
 

processform.php

 <?php
ob_start();
 require_once 'db-connect.php';
 require_once 'email.php';
 if(isset($_POST['pEmail'])){
 $fName = filter_input(INPUT_POST, "fName") ? filter_input(INPUT_POST, 'fName') : null;
 $lName = filter_input(INPUT_POST, "lName")? filter_input(INPUT_POST, 'lName') : null;
 $uEmail = filter_input(INPUT_POST, "uEmail")? filter_input(INPUT_POST, 'uEmail') : null;
 $conn = DB::databaseConnection();
 $conn->beginTransaction();
 $sql = "INSERT INTO dbo.form ( FirstName,LastName,universityemail)VALUES 
            ( :fName,:lName,universityemail)
$stmt = $conn->prepare($sql);
$stmt->bindParam(':fName', $fName);
$stmt->bindParam(':lName', $lName);
  $stmt->bindParam(':universityemail', $uEmail);
  if ($stmt->execute()) {
        $conn->commit();
   if (Form::mailer($fName, $lName,$uEmail))) {
   echo 
        '<script >
            alert("Thank you for registration.");
            window.location = "www.google.com/";
        </script>';
    
        return true;
    } else {
        $conn->rollback();
        echo '
        <script>
            alert("Error, please try submitting again. Error code 1");
            window.history.back();
        </script>';
        return false;
    }
  }
  }
 

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

Комментарии:

1. Какова схема базы данных для этих зацикленных полей? Нормализуется ли таблица с одной записью в строке или все 5 будут помещены в одну запись?

2. Каждое поле имеет отдельный столбец, поэтому для каждого цикла имеется 7 столбцов. всего 35.

3. Что вы пробовали в сохранении этих полей?

4. Как вы отправляете свою форму?

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