Проблема получения нескольких данных для вставки в БД

У меня проблемы с получением записи для вставки нескольких данных. Он хочет вставить только последний элемент. У меня в то время как цикл quantity, item_name, amount, а также item number, Поэтому, если есть 3 элемента, мне нужно вставить все 3 вместе с информацией о пользователе. lanId, employee_name, department, cost_center,

action.php

<form action="test.php" method="post">';

$uid = $_SESSION["uid"];
$sql = "SELECT * FROM cart WHERE user_id = '$uid'";
$run_query = mysqli_query($con,$sql);
while($row=mysqli_fetch_array($run_query)){
$x++;
echo

'<br>'.'<input type="text" name="item_name" value="'.$row["product_title"].'">
<input type="text" name="quantity" value="'.$row["qty"].'">
<input type="text" name="amount" value="'.$row["price"].'">
<input type="text" name="item_number" value="'.$x.'">';
}echo"<br>
<label>Lan ID</label>
<input type='text' name='lanId' id='lanId'  autocomplete='off'  class='form-control' >
<label>Employee Name</label>
<input type='text' name='employee_name' id='name'   autocomplete='off'  class='form-control'>
<label>Department</label>
<select name='department' id='department'  class='form-control'>
<option value =''>Select Department...</option>
<option value ='OTHER'> OTHER</option>

</select>

<label>Cost Center</label>
<input type='text' class='form-control' name='cost_center' value=''>
<label>Total amount</label>
<input type='text' class='form-control' name='total_amt' value='$total_amt'>
<br><br><br>
<input type='submit' class='btn btn-primary' value='Submit'>

</form>";

test.php

    <?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
include('db.php');

$item_name = $_POST["item_name"];
$amount = $_POST["amount"];
$quantity = $_POST['quantity'];
$lanId = $_POST["lanId"];
$employee_name = $_POST["employee_name"];
$department = $_POST['department'];
$cost_center = $_POST['cost_center'];
$total_amt = $_POST['total_amt'];

$sql = "INSERT INTO `order`
( `item_name`, `amount`, `quantity`,
`lanId`, `employee_name` , `department`, `cost_center`, `total_amt`)
VALUES ('$item_name', '$amount', '$quantity',
'$lanId', '$employee_name', '$department', '$cost_center','$total_amt')";
$run_query = mysqli_query($con,$sql);
if($run_query){
echo "<div class='alert alert-success'>
<a href='http://a0319p528/project2/profile.php' class='close' data-dismiss='alert' aria-label='close'>&times;</a>
<b>data inserted successfully..!</b>
</div>
";
}

?>

-3

Решение

Первая проблема заключается в том, что вы получаете только последние входные данные из формы, потому что вы перезаписываете их на каждой итерации цикла. Вы можете рассматривать их как «массивы HTML», имея name="amount[]", Это сделает $_POST['amount'] массив, а не одна строка, которую вы можете затем зациклить, когда форма отправляется и обрабатывается в PHP.

<input type="text" name="item_name[]" value="'.$row["product_title"].'">
<input type="text" name="quantity[]" value="'.$row["qty"].'">
<input type="text" name="amount[]" value="'.$row["price"].'">
<input type="text" name="item_number[]" value="'.$x.'">';

Кроме того, вы должны использовать подготовленные операторы вместо обычного запроса по двум причинам.

  1. Он будет обрабатывать все проблемы цитирования внутри, так что вам не нужно об этом беспокоиться. Это, в свою очередь, предотвращает внедрение SQL (улучшение безопасности)
  2. Вы сможете выполнить один и тот же запрос несколько раз с разными значениями.

Используя подготовленное утверждение, вы можете свести свой запрос к тому, что показано ниже. Это зациклит элементы, которые имеют несколько значений (как показано выше), и выполнит запрос для каждой итерации.

$lanId = $_POST["lanId"];
$employee_name = $_POST["employee_name"];
$department = $_POST['department'];
$cost_center = $_POST['cost_center'];
$total_amt = $_POST['total_amt'];

$stmt = $con->prepare("INSERT INTO `order` (`item_name`, `amount`, `quantity`, `lanId`, `employee_name` , `department`, `cost_center`, `total_amt`)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
foreach ($_POST['item_name'] as $key=>$item_name) {
$amount = $_POST['amount'][$key];
$quantity = $_POST['quantity'][$key];

$stmt->bind_param("ssssssss", $item_name, $amount, $quantity, $lanId, $employee_name, $department, $cost_center, $total_amt);
$stmt->execute();
}
if ($stmt->affected_rows) {
echo "<div class='alert alert-success'>
<a href='http://a0319p528/project2/profile.php' class='close' data-dismiss='alert' aria-label='close'>&times;</a>
<b>data inserted successfully..!</b>
</div>
";
}
$stmt->close();
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector