如何使用PHP将输入数组表单字段插入数据库表
我有两个php文件。一个是保存表单/表格数据,让请求者输入表单数据,另一个php文件是处理表单数据,让它将主页上输入的信息插入数据库。我有正确的连接信息,因此出于隐私原因,我将其忽略。我的问题是,在将数组提交到目标表之前,如何或应该如何提交表单中的信息并将其生成字符串?当我尝试按原样插入时,它会返回一条错误消息,指出我的语法错误,但所有会话变量都被读取,因为它返回输入字段值。下面是我迄今为止尝试过的内容的副本。我将有10个初始字段,可以选择添加更多行,但是为了长度起见,我将表缩短为两个初始行 这是我的主表单页面:SANTable.php如何使用PHP将输入数组表单字段插入数据库表,php,arrays,insert,Php,Arrays,Insert,我有两个php文件。一个是保存表单/表格数据,让请求者输入表单数据,另一个php文件是处理表单数据,让它将主页上输入的信息插入数据库。我有正确的连接信息,因此出于隐私原因,我将其忽略。我的问题是,在将数组提交到目标表之前,如何或应该如何提交表单中的信息并将其生成字符串?当我尝试按原样插入时,它会返回一条错误消息,指出我的语法错误,但所有会话变量都被读取,因为它返回输入字段值。下面是我迄今为止尝试过的内容的副本。我将有10个初始字段,可以选择添加更多行,但是为了长度起见,我将表缩短为两个初始行 这
<?php
session_start();
// If this is the initial trip, set up the $_SESSION.
if (!isset($_SESSION['initial_pass'])){
$_SESSION['initial_pass']=true;
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>SAN Fiber Request</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div id="wrapper">
<div id="maincontent">
<hr class="GreyHorizon">
<form id="sanFiber" action="insert.php" method="post">
<table class="frame" id="sanRequest" style="display: block;">
<tr>
<th style="border:none"> </th>
<th><b class="RedAsterik">*</b>Host Name</th>
<th><b class="RedAsterik">*</b>Network Type</th>
<th><b class="RedAsterik">*</b>Description</th>
<th><b class="RedAsterik">*</b>Server Port Used</th>
<th><b class="RedAsterik">*</b>Speed</th>
<th><b class="RedAsterik">*</b>Mgmt Arms/Swings RT or LT</th>
<th><b class="RedAsterik">*</b>Primary Function</th>
<th><b class="RedAsterik">*</b>Comments</th>
</tr>
<tr>
<td style="border:none"><img src="images/plus2.png" name="myImage" id="swap1" class="toggler" /></td>
<!--25-->
<td><input name="host[]" class="field" type="text" size="15" /></td>
<!--25-->
<td><select name="NETTYPEdropdown[]" id="NETTYPEdropdown">
<option selected="selected" value=""></option>
<option value="FiberChannel">Fiber Channel</option>
</select></td>
<!--50-->
<td><select name="Descriptiondropdown[]" id="Descriptiondropdown" class="Description_dropdown">
<option selected="selected" value=""></option>
<option value="PriA">Primary Fabric A</option>
<option value="PriB">Primary Fabric B</option>
<option value="SecA">Secondary Fabric A</option>
<option value="SecB">Secondary Fabric B</option>
<option value="BackA">Backup Fabric A</option>
<option value="BackB">Backup Fabric B</option>
<option value="ilo-Manage">ilo-Management</option>
<option value="UTCS265">UTCS Private 265</option>
<option value="addOther">Other...</option>
</select></td>
<!--30-->
<td><input name="PortUsed[]" class="field" type="text" id="PortUsed" size="15" /></td>
<!--15-->
<td><select name="Speeddropdown[]" id="Speeddropdown">
<option selected="selected" value=""></option>
<option value="1GB">1GB</option>
<option value="4GB">4GB</option>
<option value="8GB">8GB</option>
<option value="10GB">10GB</option>
<option value="16GB">16GB</option>
</select></td>
<!--15-->
<td><select name="MGMTdropdown[]" id="MGMTdropdown">
<option selected="selected" value=""></option>
<option value="YesR">Yes - Right</option>
<option value="YesL">Yes - Left</option>
<option value="No">No</option>
</select></td>
<!--50-->
<td><input name="primary[]" class="field" type="text" id="primary" size="25" /></td>
<!--250-->
<td><textarea name="comments[]" class="field" type="text" id="comments" size="20"></textarea></td>
</tr>
</table>
<br>
<fieldset id="buttons">
<input class="fsSubmitButton" type="submit" value="Review" />
<input class="fsSaveButton" id="save" type="submit" value="Save" />
<a href="#bottom" name="bottom"><input class="fsAddButton" type="button" value="Add New Row" /></a>
<input class="fsNewHostButton" type="submit" value="Add New Host" />
</fieldset>
</form>
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){
$("#save").click(function(){
// AJAX Code To Submit Form.
$.ajax({
type: "POST",
url: "insert.php",
data: datastring,
cache: false,
success: function(){
alert('success');
},
error: function(e){
alert('nope.');
}
});
return false;
});
});
</script>
</body>
</html>
SAN光纤请求
*主机名
*网络类型
*描述
*使用的服务器端口
*速度
*管理手臂/摆动RT或LT
*主要功能
*评论
光纤通道
初级织物A
初级织物B
次级织物A
次级织物B
备份结构A
备份结构B
国际劳工组织管理
UTCS私人265
另外
1GB
4GB
8GB
10GB
16GB
对,对
是-左
不
$(文档).ready(函数(){
$(“#保存”)。单击(函数(){
//提交表单的AJAX代码。
$.ajax({
类型:“POST”,
url:“insert.php”,
数据:datastring,
cache:false,
成功:函数(){
警惕(“成功”);
},
错误:函数(e){
警惕(‘不’);
}
});
返回false;
});
});
下面是我的insert.php:
<?php
if (session_id() == '') {
session_start();
}
else {
var_dump(session_id());
}
/*
***Connection info***
*/
//for SAN Fiber Request
$_SESSION['host'] = $_POST['host'];
$_SESSION['netType'] = $_POST['NETTYPEdropdown'];
$_SESSION['description'] = $_POST['Descriptiondropdown'];
$_SESSION['used'] = $_POST['PortUsed'];
$_SESSION['speed'] = $_POST['Speeddropdown'];
$_SESSION['mgmt'] = $_POST['MGMTdropdown'];
$_SESSION['primary'] = $_POST['primary'];
$_SESSION['comments'] = $_POST['comments'];
$number = count($_SESSION['host']);
for ($i=0; $i<$number; $i++)
{
$hostno = $_SESSION['host'][$i];
$netTypeno = $_SESSION['netType'][$i];
$descriptno = $_SESSION['description'][$i];
$usedno = $_SESSION['used'][$i];
$speedno = $_SESSION['speed'][$i];
$mgmtno = $_SESSION['mgmt'][$i];
$primaryno = $_SESSION['primary'][$i];
$commentsno = $_SESSION['comments'][$i];
if ($_SESSION['host'][$i] <> '') {
$sql = "INSERT INTO cable_request_san_fiber_detail (CABLE_REQUEST_SAN_FIBER_DETAIL_ID, CABLE_REQUEST_ID, NETWORK_TYPE, HARDWARE_PORT_ID, SERVER_PORT, SPEED, MANAGEMENT_ARM, PRIMARY_FUNCTION, CABLE_LABEL, SWITCH_HARDWARE_PORT_ID, DESCRIPTION, HARDWARE_ID, COMMENTS) VALUES (, 1, $netTypeno, ,$usedno, $speedno, $mgmtno, $primaryno, $hostno, ,$descriptno, , $commentsno)";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
}
else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
}
$conn->close();
?>
如何检索php页面中html页面输入字段中的值以处理插入查询?我不是资深人士,但我在代码中看到两种主要的不清楚情况: 1) 我看不出您如何能够一次向insert.php发送多个表单,或者如何同时设置多个会话。。。所以那条线 $number=计数($_会话['host']) …使用for循环是不必要的。如果您不需要这些会话,我会将post设置到变量中以开始测试 2) 这显然不是通过Jquery.ajax发送数据的方式。您必须。序列化表单,当您在insert.php中收到它时,您将转换为可以使用的内容。请尝试以下文档以更好地查看:
希望它能起作用:)经过一点尝试和错误,并仔细查看我的代码,我通过更改查询的编写方式使它起作用。在我为auto increment字段添加了一个default值并正确地组织了引用字符串变量的引号之后,一切都很好。单引号和双引号的使用可能相当棘手。以下是我的解决方案:
$sql = "INSERT INTO cable_request_san_fiber_detail(CABLE_REQUEST_SAN_FIBER_DETAIL_ID,
CABLE_REQUEST_ID, NETWORK_TYPE, HARDWARE_PORT_ID, SERVER_PORT, SPEED, MANAGEMENT_ARM,
PRIMARY_FUNCTION, CABLE_LABEL, SWITCH_HARDWARE_PORT_ID, DESCRIPTION, HARDWARE_ID,
COMMENTS) VALUES (default, 1, '".$netTypeno."','','".$usedno."','".$speedno."',
'".$mgmtno."', '".$primaryno."', '".$hostno."','',
'".$descriptno."','','".$commentsno."')";
是否为数据库列设置了正确的数据类型?如果CABLE\u REQUEST\u SAN\u FIBER\u DETAIL\u ID为autoincrement,请尝试写入默认值(不带引号)或0,而不是将其保留为空。@AliSheikhpour是的,数据类型正确设置为int和varchar。我将尝试使用默认值作为自动增量值。我相信这就是我们可能要放弃的。我不确定如何引用自动递增的值,所以我最初将其保留为空。我看到了使用serialize()的方法,但我不太确定在序列化整个表单后如何调用变量。我将测试post或会话插入是否有效,并查看发生了什么。