Javascript 将表单字段中的数组提交到数据库

Javascript 将表单字段中的数组提交到数据库,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,在订单页面上有一个缝纫管理应用程序,一个人可以有多个订单,但所有订单都将使用一个参考代码开具发票。第一页,我收集了价格等基本细节,但在下一页,每个订单都必须输入更详细的信息,材料、说明和样式代码(如有)的示例图片 因此,我已经成功地创建了一个页面,数据输入人员可以在其中添加多个详细信息,甚至可以选择是否有样式,但我被困在数据库提交中 请记住,我使用的每个其他页面,如staff management和其他页面,都工作得很好,因此不提交到数据库的错误与包含的外部页面或任何其他内容无关,可能与数组的处

在订单页面上有一个缝纫管理应用程序,一个人可以有多个订单,但所有订单都将使用一个参考代码开具发票。第一页,我收集了价格等基本细节,但在下一页,每个订单都必须输入更详细的信息,材料、说明和样式代码(如有)的示例图片

因此,我已经成功地创建了一个页面,数据输入人员可以在其中添加多个详细信息,甚至可以选择是否有样式,但我被困在数据库提交中

请记住,我使用的每个其他页面,如staff management和其他页面,都工作得很好,因此不提交到数据库的错误与包含的外部页面或任何其他内容无关,可能与数组的处理方式无关。下面是代码的分解

JavaScript:

<script>
function showfield(name,event){

if(name=='iHaveStyle') {
$(event).next('#div1').html('<label>Enter Style Code</label><br /> <input type="text" name="style[]" />');
} else{
 $(event).next('#div1').html('');
}

}
$(document).ready(function() {
var max_fields      = 10; //maximum input boxes allowed
var wrapper         = $(".form-group"); //Fields wrapper
var add_button      = $(".add_field_button"); //Add button ID
var x = 1; //initlal text box count
$(add_button).click(function(e){ //on add input button click
  e.preventDefault();
    if(x < max_fields){ //max input box allowed
        x++; //text box increment
        $(wrapper).append('<div style="margin-top:20px; border-top:1px solid #333333;"><label>Upload Sample Material</label><br /><input type="file" name="sample_material[]" style="width:200px; height: 40px;" /><br/><br/><label>Customer&#39s Requirement</label><br /><textarea name="cust_requirement[]" style="width:200px; height: 150px;" /></textarea><br/><br/><label>Do you have a style</label><br /><select name="sketch_code" id="sketch_code" onchange="showfield(this.options[this.selectedIndex].value,this)"><option value="">I don&#39t have a style code</option><option value="iHaveStyle">I have a style code</option></select><div id="div1"></div><br /><a href="#" class="remove_field">Remove</a></div>'); //add input box
      }
    });
$(wrapper).on("click",".remove_field", function(e){ //user click on remove  text
  e.preventDefault(); $(this).parent('div').remove(); x--;
})
});
</script>

函数显示字段(名称、事件){
如果(名称=='iHaveStyle'){
$(event).next('#div1').html('输入样式代码
'); }否则{ $(event.next('#div1').html(''); } } $(文档).ready(函数(){ var max_fields=10;//允许的最大输入框数 var wrapper=$(“.form group”);//字段包装器 var add_button=$(“.add_字段_button”);//添加按钮ID var x=1;//初始文本框计数 $(添加按钮)。单击(函数(e){//在添加输入按钮上单击 e、 预防默认值(); 如果(x






您有样式吗
我没有样式代码我有样式代码
);//添加输入框 } }); $(包装器)。在(“单击“,”.remove_字段)上,函数(e){//用户单击remove text e、 preventDefault();$(this).parent('div').remove();x--; }) });
HTML:




我在我的所有页面上都使用了这个标题,它们都很好。

数组映射函数将strip_tags()应用于数组的每个元素-但最可能的原因是您的$POST看起来像这样['test1',['test2','test3],$POST[1]=['test2','test3]是一个数组,无法应用strip标签。您可以使用循环并检查项是否不是要剥离的数组,或者使用递归遍历$POST数组

数组映射函数将剥离标记()应用于数组的每个元素-但最可能的原因是您的$POST看起来像这样['test1'、['test2'、'test3]]、$POST[1]=['test2'、'test3]是数组,无法应用条带标记。您可以使用循环并检查项是否不是要剥离的数组,或者使用递归遍历$POST array

您的POST superglobal包含数组,这就是为什么您会收到array\u map警告的原因。尝试将其替换为
array\u walk\u recursive

您的POST superglobal包含数组,这就是为什么您会收到array\u map警告的原因。尝试将其替换为
数组\u walk\u recursive

为什么这是一个数组
cust\u requirement[]
$\u POST['cust\u requirement']
是数组而不是字符串…这正是错误告诉您的。和其他人一样,比如
$\u POST[sample\u material]
@charlietfl,你有什么办法可以帮我解决吗?你可能在这段代码中有SQL注入和XSS漏洞。在上线之前,最好向安全分析公司提交申请,或者告诉客户这样做。始终在数据库中使用绑定参数(
mysql\u real\u escape\u string
),并确保通过转义特殊字符(
htmlspecialchars
)在视图中呈现字符串。我已经修复了它,现在它可以完美地工作。谢谢你否决了这个问题,取消了话题,这是解决这个问题的最好方法。为什么这是一个数组
cust\u requirement[]
$\u POST['cust\u requirement']
是数组而不是字符串…这正是错误告诉您的。和其他人一样,比如
$\u POST[sample\u material]
@charlietfl,你有什么办法可以帮我解决吗?你可能在这段代码中有SQL注入和XSS漏洞。在上线之前,最好向安全分析公司提交申请,或者告诉客户这样做。始终在数据库中使用绑定参数(
mysql\u real\u escape\u string
),并确保通过转义特殊字符(
htmlspecialchars
)在视图中呈现字符串。我已经修复了它,现在它可以完美地工作。谢谢你否决了这个问题并取消了它的主题,这是解决这个问题的最好方法。谢谢,但我仍然不太擅长PHP,我该怎么做?你能发布echo“”的输出吗;打印(邮政美元);回声';这是输出:数组([cust_requirement]=>[sketch_code]=>iHaveStyle[style]=>[submit_val]=>Continue Order)谢谢,但我的PHP还是不太好,我该怎么做?你能发布echo的输出吗;打印(邮政美元);回声';这是输出:数组([cust\u requirement]=>[sketch\u code]=>iHaveStyle[style]=>[submit\u val]=>Continue Order)请,你能指导我怎么做吗?请,你能指导我怎么做吗?
<form action="orderadd1.php?id=<?php echo "".$order_id; ?>" method="post" enctype="multipart/form-data">
<div class="form-group">
<button class="add_field_button">Add another sub-order</button>
<div style="margin-top:20px;">
  <label>Upload Sample Material</label><br />
  <input type="file" name="sample_material[]" style="width:200px; height: 40px;" /><br/><br/>
  <label>Customer's Requirement</label><br />
  <textarea name="cust_requirement[]" style="width:200px; height: 150px;" /> </textarea><br/><br/>
  <label>Do you have a style</label><br />
  <select name="sketch_code" id="sketch_code"  onchange="showfield(this.options[this.selectedIndex].value,this)">
    <option value="">I don't have a style code</option>
    <option value="iHaveStyle">I have a style code</option>
  </select>
  <div id="div1"></div>
  </div>
  </div>
  <input type="submit" class="btn btn-lg btn-color btn-block" value="Continue Order" name="submit_val">
  </form>
<?php

$order_id = $_REQUEST['id'];

if (isset($_POST['submit_val'])) {

if(is_array($_POST['cust_requirement']))
{
for($i=0; $i < count($_POST['cust_requirement']); $i++ ) {

$cust_requirement = mysql_real_escape_string($_POST['cust_requirement'][$i]);
$style = mysql_real_escape_string($_POST['style'][$i]);
$folder = "sample_material/";
$extention = strrchr($_FILES['sample_material']['name'], ".");
$new_name = $order_id."-".$i++;
$sample_material = $new_name.'.jpg';
$uploaddir = $folder . $sample_material;
move_uploaded_file($_FILES['submit_material']['tmp_name'], $uploaddir);

$data_submit = $pdo->query("INSERT INTO `order_desc` (order_id, sample_photo_url, cust_requirements, style_code) VALUES ('".$order_id."', '".$uploaddir."', '".$cust_req."', '".$style."')");

}}
}

?>
<?php
 $_POST = array_map('strip_tags', $_POST);
 ?>