John Davidson

html - Form send data to php with multiple inputs with the same name

0 comments
Message:


I'm trying make a form where me or user can insert data. Some parts are coming form data base like: Work name and work price. In input fields can insert work amount. In each input row have checkbox, if checkbox ar checked, that row will be seen in php.


<table class="table">

<thead>
<tr>
<th scope="col">*</th>
<th scope="col">Work name</th>
<th scope="col">Quantity</th>
<th scope="col">Price for unit</th>
<th scope="col">Total price</th>
</tr>
</thead>

<form method="POST" action="process/pdf.process.php">
<tbody>
<?php
$works = ORM::for_table('work')->find_many();
foreach($works as $work){
?>
<tr id="<?php echo $work->id; ?>">
<td><input type="checkbox" name="useit[]" value="<?php echo $work->id; ?>"/></td>
<td><?php echo $work->name; ?></td>
<td><input type="text" placeholder="" class="amount"/> <?php echo $work->unit; ?></td>
<td class="work_price" data="<?php echo $work->price; ?>"><?php echo $work->price.'€/'.$work->unit; ?></td>
<td class="total_price">0€</td>

<input type="" name="work_id[]" value="<?php echo $work->id; ?>" />
<input type="hidden" name="work_name[]" value="<?php echo $work->name; ?>" />
<input type="hidden" name="amount[]" class="<?php echo $work->id; ?>_copy_amount" value="" />
<input type="hidden" name="unit[]" value="<?php echo $work->unit; ?>" />
<input type="hidden" name="unit_price[]" value="<?php echo $work->price; ?>€" />
<input type="hidden" name="unit_total[]" class="<?php echo $work->id; ?>_copy_total" value="" />

</tr>

<?php
}
?>
</tbody>
<input type="submit" name="do_pdf" value="Pga jkāuztaisa ar jquery" />
</form>

</table>

Now, there is php, but how can i show only checked rows in while loop?


<?php

$data = array();
$work_id = array();
$work_names = $_POST['work_name'];
$amounts = $_POST['amount'];
$units = $_POST['unit'];
$units_prices = $_POST['unit_price'];
$units_total = $_POST['unit_total'];


if(isset($_POST['useit'])){
$work_id = $_POST['useit'];


}

$data = array($work_id, $work_names, $amounts, $units, $units_prices, $units_total);

echo '<pre>';
echo htmlspecialchars(print_r($data, true));
echo '</pre>';

?>


My Answer:
To show only the checked rows in the while loop, you can modify your PHP code as follows:

php

$data = array();
$work_id = array();
$work_names = $_POST['work_name'];
$amounts = $_POST['amount'];
$units = $_POST['unit'];
$units_prices = $_POST['unit_price'];
$units_total = $_POST['unit_total'];

if(isset($_POST['useit'])){
$checked_work_ids = $_POST['useit'];

foreach($checked_work_ids as $checked_work_id){
$key = array_search($checked_work_id, $_POST['work_id']);
$data[] = array(
'work_id' => $_POST['work_id'][$key],
'work_name' => $_POST['work_name'][$key],
'amount' => $_POST['amount'][$key],
'unit' => $_POST['unit'][$key],
'unit_price' => $_POST['unit_price'][$key],
'unit_total' => $_POST['unit_total'][$key]
);
}
}

echo '
';
echo htmlspecialchars(print_r($data, true));
echo '
';

?>


This code will loop through the checked work IDs and retrieve the corresponding data for those IDs from the POST variables. It will then store this data in the `$data` array, which you can use to display only the checked rows in your while loop.

Rate this post

5 of 5 based on 4698 votes

Comments




© 2024 Hayatsk.info - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us