我创建了 html 文件来上传用户数据和图像。它包括动态表,用户可以通过单击添加按钮插入行并通过单击删除按钮删除行。我的表单工作正常,我能够将文件和数据上传到数据库但无法插入动态表格数据,即我将表单字段拆分为表格
1)passengertable:- 插入地标、位置、fromdate、todate、ccn、passenger_number。
2)passengerdetailtable :- pname,pemail,pnumber,passengerid(foriegnkey referencepassengertable) :=这是动态表数据
我的问题是只有 pname,pemail,pnumber 的当前输入值被插入到 mysql 但未插入剩余的动态创建的行数据...
html 文件
<div>
<form action="getPassengerDetail" method="post" enctype="multipart/form-data">
<div>
<label for="lname">LandMark: </label>
<input id="lname" type="text" name="landmark" placeholder="Enter LandMark">
<br>
</div>
<div>
<label for="location" >Vehicle Required From: <span><sup class="red-star">*</sup></span>
</label>
<input id="location" type="text" name="location" placeholder="Enter Location" required>
<input id ="fromdate" name ="fromdate" type="date" placeholder="From Date" required >
<input id="todate" name = "todate" type="date" placeholder="To Date" required>
<br>
<label for="id" id="checkboxlabel">multiple days</label>
<input type="checkbox" name="multiple_days" id="days" >
multiple days
<br>
</div>
<div>
<label for="ccn">Cost Center Number:</label>
<input id="ccn" type="text" name="cost_center_number" placeholder="Enter Cost Center Number">
<br>
</div>
<div>
<label for="pcount">Number Of Passenger:</label>
<input id="pcount" type="number" name="passenger_number" placeholder="Enter Passenger Count">
<br>
</div>
<div>
<label for="passenger_detail_table">Passenger Details :<span><sup class="red-star">*</sup>
</span></label>
<table id="passenger_detail_table" class="tablestyle">
<thead>
<tr valign="top" >
<td>
<label for="pname_" id="small-label">Name</label>
</td>
<td>
<label for="pemail_" id="small-label">E-mail</label>
</td>
<td>
<label for="pnumber_" id="small-label">Phone-Number</label>
</td>
<td>
</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<input id="pname_" type="text" name="passenger_name[]" value=""
placeholder="Enter Name"onkeyup="this.value=this.value.replace(/[^a-z]/g,'');" class="alphaonly">
</td>
<td>
<input id="pemail_" type="email" name="passenger_email[]" value=""
placeholder="Enter E-mail" >
</td>
<td>
<input id="pnumber_" type="tel" name="passenger_phone_number[]" value=""
placeholder="Enter Phone-No" class="onlyphonenumber" >
</td>
<td>
<button type="button" id="addpassenger" name="passenger_add" style="background-
color:green;color:white;">Add</button>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<label for="crf_trf">CRF/TRF:</label>
<input id="crf_trf" name="crf_trf" type="file" multiple="multiple" value="Choose file">
<br>
</div>
<div>
<label for="ddetail">Duty Detail:</label>
<input id="ddetail" name=ddetail" type="text" width="100px" placeholder="Enter Duty
Detail">
<br>
</div>
<div>
<input type="submit" class="button" value="Submit" name="insert">
</div>
</form>
</div>
jQuery代码
$(document).ready(function()
{
const maxCounter = 10;
let passengerCounter;
const $tb = $("#passenger_detail_table tbody ");
$('#addpassenger').on('click',function(e)
{
const pname = $.trim($("#pname_").val());
const pemail = $.trim($("#pemail_").val());
const pnumber = $.trim($("#pnumber_").val());
if(pname === "" || pemail === "" || pnumber === "")
{
alert("please enter the values...");
return;
}
passengerCounter = $tb.find("tr").length;
if (passengerCounter >= maxCounter)
{
alert("No more data to be placed")
return;
}
alert("The counter clicked."+passengerCounter);
const $firstRow = $tb.find(">:first-child");
let $newrowhtml = $firstRow.clone(true);
$firstRow.find(":input").val("");
$newrowhtml.find(":input")
.removeAttr("id","")
.attr('disabled', 'disabled');
$newrowhtml.find("[name=passenger_name]").val(pname);
$newrowhtml.find("[name=passenger_email]").val(pemail);
$newrowhtml.find("[name=passenger_phone_number]").val(pnumber);
$newrowhtml.find("[name=passenger_add]").replaceWith($('<button type="button"
style="background-color:red; color:white;" class="passenger_remove">Remove</button>'));
$("#passenger_detail_table").append($newrowhtml);
});
$("#passenger_detail_table").on('click', '.passenger_remove', function() {
$(this).closest("tr").remove();
});
servlet 文件:此 servlet 文件充当 html 函数调用的控制器,以向数据库添加详细信息
@WebServlet("/getPassengerDetail")
@MultipartConfig(fileSizeThreshold=1024*1024*10,
maxFileSize=1024*1024*50,
maxRequestSize=1024*1024*100)
public class getPassengerDetailServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
{
try
{
String JDBC_Driver ="com.mysql.jdbc.Driver";
String URL ="jdbc:mysql://localhost/passengerdetail";
String username = "root";
String password = "root";
InputStream inputStream = null;
String landmark = request.getParameter("landmark");
String location = request.getParameter("location");
String fromdate = request.getParameter("fromdate");
String todate = request.getParameter("todate");
String ccn =request.getParameter("cost_center_number");
String pcount = request.getParameter("passenger_number");
String pname[] = request.getParameterValues("passenger_name[]");
String pemail[] = request.getParameterValues("passenger_email[]");
String pnumber[] =request.getParameterValues("passenger_phone_number[]");
String ddetail = request.getParameter("ddetail");
PrintWriter out = response.getWriter();
out.println(landmark+location+fromdate+todate+ccn+pcount);
// obtains the upload file part in this multipart request
Part crf_trf = request.getPart("crf_trf");
if (crf_trf != null)
{
inputStream = crf_trf.getInputStream();
}
out.println(crf_trf);
Class.forName(JDBC_Driver);
Connection con = DriverManager.getConnection(URL, username, password);
String query1 = "insert into passengertable
(landmarkname,location,fromdate,todate,ccn,pcount,crf_trf,dutydetail) values(?,?,?,?,?,?,?,?)";
PreparedStatement pstm = con.prepareStatement(query1,Statement.RETURN_GENERATED_KEYS);
pstm.setString(1, landmark);
pstm.setString(2, location);
pstm.setString(3, fromdate);
pstm.setString(4, todate);
pstm.setString(5, ccn);
pstm.setString(6, pcount);
if (inputStream != null) {
// fetches input stream of the upload file for the blob column
pstm.setBlob(7, inputStream);
}
pstm.setString(8, ddetail);
int row1=pstm.executeUpdate();
ResultSet rs = pstm.getGeneratedKeys();
int id=0;
while(rs.next())
{
id=rs.getInt(1);
}
String query2="insert into passengerdetailtable(pname,pemail,pnumber,passengerid)
values(?,?,?,?)";
int row2 = 0;
PreparedStatement pstmt;
for(int i=0;i<pname.length;i++)
{
pstmt = con.prepareStatement(query2);
pstmt.setString(1, pname[i]);
pstmt.setString(2, pemail[i]);
pstmt.setString(3, pnumber[i]);
pstmt.setInt(4, id);
row2=pstmt.executeUpdate();
}
if ((row1 > 0)&&(row2>0)) {
response.sendRedirect("Detail.jsp");
}
else{
response.sendRedirect("EntryForm.html");
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}