PHP数组复制条目,不记录数据值
我想知道是否有人有时间看一下我的代码并帮我一把。基本上,我下载了一个表单,它允许我点击AddRow,并根据需要添加任意多的输入框,效果很好 问题是,当我将它们添加到数据库中时,它会复制条目,此外,我不会获取数组值,只获取单个值 例如:如果我添加2个条目,我在数据库中得到4个条目,它们都如下所示: 客户ID |项目日期|项目代码|项目名称|数量|成本|添加用户 5 | 2020-07-06 |数组|数组|数组|数组| Me PHP代码PHP数组复制条目,不记录数据值,php,arrays,Php,Arrays,我想知道是否有人有时间看一下我的代码并帮我一把。基本上,我下载了一个表单,它允许我点击AddRow,并根据需要添加任意多的输入框,效果很好 问题是,当我将它们添加到数据库中时,它会复制条目,此外,我不会获取数组值,只获取单个值 例如:如果我添加2个条目,我在数据库中得到4个条目,它们都如下所示: 客户ID |项目日期|项目代码|项目名称|数量|成本|添加用户 5 | 2020-07-06 |数组|数组|数组|数组| Me PHP代码 function escape($html) { re
function escape($html) {
return htmlspecialchars($html, ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8");
}
if (isset($_POST['add_items'])) {
$entries = array( $item_code, $item_name, $qty, $cost);
$client_id = $_POST['client_id'];
$item_date = date("Y-m-d");
$added_user = $_SESSION['usr'];
foreach ($entries as $row) {
$data = array(
'client_id' => $client_id,
'item_date' => $item_date,
'item_code' => $item_code,
'item_name' => $item_name,
'qty' => $qty,
'cost' => $cost,
'added_user' => $added_user
);
$query = "INSERT INTO `invoiceitems` SET ";
$fields = array();
foreach ($data as $field => $value) {
$fields[] = "`$field` = '$value'";
}
$fields = implode(', ', $fields);
$query .= $fields;
mysqli_query($con, $query);
}
}
HTML表单
<tr class="item-row">
<td><input name="item_code[]" autocomplete="off" /></td>
<td><input name="item_name[]" autocomplete="off" /></td>
<td><input name="cost[]" autocomplete="off" /></td>
<td><input name="qty[]" autocomplete="off" /></td>
<td><span class="price"></span></td>
</tr>
我看了很多例子,我被卡住了。如果有人能帮我,我将不胜感激。提前谢谢
完整代码:
<?php
include('../includes/main.php');
include_once('../includes/config.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="keywords" content="" />
<meta name="description" content="" />
<title>J.D. Auto Center</title>
<link rel="stylesheet" href="../css/style.css" type="text/css" media="screen" charset="utf-8" />
<script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
<script src="../js/global.js" type="text/javascript" charset="utf-8"></script>
<script src="../js/modal.js" type="text/javascript" charset="utf-8"></script>
<link rel='stylesheet' type='text/css' href='css/style.css' />
<link rel='stylesheet' type='text/css' href='css/print.css' media="print" />
<script type='text/javascript' src='js/jquery-1.3.2.min.js'></script>
<script type='text/javascript' src='js/example.js'></script>
</head>
<body>
<?php include_once('../includes/header.php'); ?>
<div id="wrapper">
<div id="minwidth">
<div id="holder">
<?php $current = 3; include_once('../includes/navigation.php');
if(!isset($_SESSION['usr']))
{
echo "<p align='center'><font color='#F78181'>You need to be logged in to view this page.</font></p>";
}
else{
$client_id = $_POST['client_id'];
$query = "select * from clients where id = '$client_id'";
$result = mysqli_query($con, $query);
//$client_id = $_POST['client_id'];
$item_code = $_POST['item_code'];
$item_name = $_POST['item_name'];
$qty = $_POST['qty'];
$cost = $_POST['cost'];
/// /// ADD INVOICE ITEMS
function escape($html) {
return htmlspecialchars($html, ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8");
}
if (isset($_POST['add_items'])) {
/////////////////////////////////////////////////////////////////////////
$entries = array( $item_code, $item_name, $qty, $cost);
$client_id = $_POST['client_id'];
$item_date = date("Y-m-d");
$added_user = $_SESSION['usr'];
foreach ($entries as $row) {
$data = array(
'client_id' => $client_id,
'item_date' => $item_date,
'item_code' => $item_code,
'item_name' => $item_name,
'qty' => $qty,
'cost' => $cost,
'added_user' => $added_user
);
$query = "INSERT INTO `invoiceitems` SET ";
$fields = array();
foreach ($data as $field => $value) {
$fields[] = "`$field` = '$value'";
}
$fields = implode(', ', $fields);
$query .= $fields;
mysqli_query($con, $query);
}
}
/// end ADD INVOICE ITEMS
?>
<div id="desc">
<div class="body">
<div id="html" class="help">
<div id="page-wrap">
<textarea id="header">INVOICE</textarea>
<div id="identity">
<textarea id="address">
<?php
if (mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_assoc($result) )
{
echo "$row[first_name] $row[last_name]";
echo "\n$row[address] $row[address2]";
echo "\n$row[riding] $row[postal_code]";
echo "\n$row[city] $row[province]";
echo "\n$row[whatsapp]";
echo "\n$row[phone1]";
echo "\n$row[phone2]";
echo "\n$row[phone3]";
}
}
?>
</textarea>
<div id="logo">
<div id="logoctr">
<a href="javascript:;" id="change-logo" title="Change logo">Change Logo</a>
<a href="javascript:;" id="save-logo" title="Save changes">Save</a>
|
<a href="javascript:;" id="delete-logo" title="Delete logo">Delete Logo</a>
<a href="javascript:;" id="cancel-logo" title="Cancel changes">Cancel</a>
</div>
<div id="logohelp">
<input id="imageloc" type="text" size="50" value="" /><br />
(max width: 540px, max height: 100px)
</div>
<img id="image" src="images/logo.png" alt="logo" />
</div>
</div>
<div style="clear:both"></div>
<div id="customer">
<textarea id="customer-title">J.D. Auto Center</textarea>
<form name="add_items" enctype="multipart/form-data" accept-charset="UTF-8" method="POST" action="<?php $_SERVER['PHP_SELF']; ?>" />
<?php
echo "<input type='hidden' name='client_id' value='$_POST[client_id]' />"; ?>
<table id="meta">
<tr>
<td class="meta-head">Invoice #</td>
<td><textarea>000123</textarea></td>
</tr>
<tr>
<td class="meta-head">Date</td>
<td><textarea id="date"></textarea></td>
</tr>
<tr>
<td class="meta-head">Amount Due</td>
<td><div class="due"></div></td>
</tr>
</table>
</div>
<table id="items">
<tr>
<th>Item</th>
<th>Descrição</th>
<th>Preço de Unidade</th>
<th>Quantidade</th>
<th>Total</th>
</tr>
<tr class="item-row">
<td><input name="item_code[]" autocomplete="off" /></td>
<td><input name="item_name[]" autocomplete="off" /></td>
<td><input name="cost[]" autocomplete="off" /></td>
<td><input name="qty[]" autocomplete="off" /></td>
<td><span class="price"></span></td>
</tr>
<tr id="hiderow">
<td colspan="5"><a id="addrow" href="javascript:;" title="Add a row">Add a row</a></td>
</tr>
<tr>
<td colspan="2" class="blank"> </td>
<td colspan="2" class="total-line">Subtotal</td>
<td class="total-value"><div id="subtotal"></div></td>
</tr>
<tr>
<td colspan="2" class="blank"> </td>
<td colspan="2" class="total-line">Total</td>
<td class="total-value"><div id="total"></div></td>
</tr>
<tr>
<td colspan="2" class="blank"> </td>
<td colspan="2" class="total-line">Amount Paid</td>
<td class="total-value"><textarea id="paid"></textarea></td>
</tr>
<tr>
<td colspan="2" class="blank"> </td>
<td colspan="2" class="total-line balance">Balance Due</td>
<td class="total-value balance"><div class="due"></div></td>
</tr>
</table>
<input type="submit" class="button" name="add_items" value="SALVAR" /></p>
</form>
<div id="terms">
<h5>Terms</h5>
<textarea>Agradecemos a preferencia.</textarea>
<?php
var_dump($_POST);
var_dump($entries);
?>
</div>
</div>
</div>
</div>
<div class="clear"></div>
</div>
<div class="clear"></div>
</div>
<div class="clear"></div>
<div id="body_footer">
<div id="bottom_left"><div id="bottom_right"></div></div>
</div>
</div>
</div>
</div>
</div>
<?php include_once('../includes/footer.php'); ?>
</body>
</html>
<?php
}
?>
我需要在html方面看到更多的代码,但我的第一个想法是,每个条目的名称都是重复的,没有任何错误。例如如果它添加了一个name=name的新标记,并且您添加的下一个标记也会在应该添加类似name=name1的迭代的位置提供name=name。之后,post页面需要能够获取所有具有未知数量变量名的post数据。我很幸运地使用了whileiset$\u POST和for循环来迭代name变量。但我需要看到一个更完整的代码集循环遍历$entries=array$item\u code、$item\u name、$qty、$cost;这是不对的。您必须循环查看发票中每个项目的post数据数组
$query = "INSERT INTO `invoiceitems` (`client_id`, `item_date`, `item_code`, `item_name`, `qty`, `cost`, `added_user`) VALUES ";
$insert_rows = array();
//loop through item_code post data, inside this loop we will get other row data
foreach ($_POST['item_code'] as $k => $item_code_data) {
$insert_fields = array($client_id, $item_date, $item_code_data, $_POST['item_name'][$k], $_POST['qty'][$k], $_POST['cost'][$k], $added_user);
$insert_rows[] = implode("', '", $insert_fields);
}
if(count($insert_rows) > 0){
$insert_rows_data = " ('" . implode("'), ('", $insert_rows) . "') ";
mysqli_query($con, $query . $insert_rows_data);
}
var_dump$_POST;和var_dump$条目;因此,您可以了解数据的结构。此外,您根本没有在foreach循环中使用$row。要解决这个问题,1。了解你的数据,2。理解你的代码做什么,不要简单地模仿例子,3。把你的错误报告打开到最大限度,这样你就可以洞察到你的错误,这些错误很多,但你目前还没有看到。嗨,杰弗里。我在问题中公布了全部代码。感谢您感谢您解释这一点并提供有效的代码。虽然数据插入正确,但它只插入一行,而忽略所有其他行。有什么想法吗?循环是基于item_代码中的值工作的,所以如果它为空,整个过程将无法正常工作。我的假设是项目代码是强制性的。