#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. Да, извините, форма слишком длинная, поэтому опубликовал ее часть. Я отредактирую приведенный выше код