PDA

View Full Version : سوال: فرم html - php داینامیک



amihd1378
پنج شنبه 25 مرداد 1397, 09:56 صبح
سلام برنامه نویسان عزیز خسته نباشید. یه پروژه ای دارم انجام میدم که کارفرما گفته میخاد توی یکی از صفحه ها یه فرمی باشه که کاربر بتونه فیلد های اونو اضافه کنه و به همراه اون یه سری قابلیت های ویژه.خلاصش کنم.من فرمو کامل درآوردم و بخام حدودی چجوری در اومده مثل عکس زیر:

148707

و جدول های پایگاه داده هم به شکل زیر هستن :
جدول services :



title
id


service1
1


service2
2


service3
3


service4
4


service5
5



جدول unit :



basicprice
title
id



جدول unit_service:


unit_id
service_id
id





لیست سرویس ها رو میره از دیتابیس میاره.خوب من مشکلی نداشتم با این موردش و کد هاشم درآوردم و زدم فقط مشکل من اینجاست : موقعی که کاربر ثبت میکنه اون چک باکس ها نمیره برای هر کدوم سطر ها جدا ثبت بشه و همه چک باکس های توی کل فرم را میره توی جدول برای هر کدوم ذخیرش میکنه.

کد من به شکل زیره :



<form method="post">
<table id="unit">
<tr id="row1">
<td>
<input placeholder='Title' type='text' name='unit_title[]'>
<input placeholder='Basic price' type='text' name='unit_basic_price[]'>
<div>
<?php
include_once '../db.php';
$sql = mysqli_query($connection, 'SELECT * FROM services');
while ($row = $sql->fetch_assoc()) {
echo "<label><input name='checkbox[]' value='$row[id]' type='checkbox'>$row[title]</label>";
}
?>
</div>
</td>
</tr>
</table>
<button type="button" onclick="add_row()">Add room</button>
<input value="Submit" type="submit" name="submit"/>
</form>

<script type="text/javascript">
function add_row() {
$rowno = $("#unit tr").length;
$rowno = $rowno + 1;
$phpcode = "<?php $sql = mysqli_query($connection, 'SELECT * FROM services'); while ($row = $sql->fetch_assoc()) {
echo " <label><input name='checkbox[]' value='$row[id]' type='checkbox'>$row[title]</label> ";
} ?>";
$("#unit tr:last").after("<hr/><tr id='row" + $rowno + "'><td><input placeholder='Title' type='text' name='unit_title[]'><input placeholder='Basic price' type='text' name='unit_basic_price[]'><div>" + $phpcode + "</div></td> </tr>");
}
</script>




<?php
if (isset($_POST['submit'])) {
include_once "../db.php";

$unit_title = $_POST['unit_title'];
$unit_basic_price = $_POST['unit_basic_price'];
$unit_checkbox = $_POST['checkbox'];

for ($i = 0; $i < count($unit_title); $i++) {

$sql_insert_boomgardi_unit = "insert into unit (title,basicPrice) values('$unit_title[$i]','$unit_basic_price[$i]')";

if ($connection->query($sql_insert_boomgardi_unit) === true) {

$last_id_unit = mysqli_insert_id($connection);

for ($k = 0; $k < count($unit_checkbox); $k++) {

$sql_insert_boomgardi_unit_service = "insert into unit_service (service_id, unit_id)
values('$unit_checkbox[$k]','$last_id_unit')";

if ($connection->query($sql_insert_boomgardi_unit_service) === true) {
$unit_status = "OK";
}
}
}
}
$connection->close();
}

دوستان اگه وقتشو دارن کد را ران کنن بیشتر دستشون میاد.ممنون

parsidev
پنج شنبه 25 مرداد 1397, 12:12 عصر
خروجی منطقیه!
هر چند شیوه کارت غلطه اما؛
با این حال با فرض اینکه تعداد فیلدهای چک باکست در هر آیتم 5 تا باشه کد php رو می تونی با یه تغییرات جزئی به صورت زیر بنویسی تا اونی که می خوای در بیاد:


<?php
if (isset($_POST['submit'])) {
include_once "../db.php";

$unit_title = $_POST['unit_title'];
$unit_basic_price = $_POST['unit_basic_price'];
$unit_checkbox = $_POST['checkbox'];


$checkboxs_in_row = 5;
$current_checkbox_index = 0;

for ($i = 0; $i < count($unit_title); $i++) {

$sql_insert_boomgardi_unit = "insert into unit (title,basicPrice) values('$unit_title[$i]','$unit_basic_price[$i]')";

if ($connection->query($sql_insert_boomgardi_unit) === true) {

$last_id_unit = mysqli_insert_id($connection);

for ($k = $current_checkbox_index; $k < ($current_checkbox_index + $checkboxs_in_row); $k++) {

$sql_insert_boomgardi_unit_service = "insert into unit_service (service_id, unit_id)
values('$unit_checkbox[$k]','$last_id_unit')";

if ($connection->query($sql_insert_boomgardi_unit_service) === true) {
$unit_status = "OK";
}
}
$current_checkbox_index = $k;
}
}
$connection->close();
}

parsidev
پنج شنبه 25 مرداد 1397, 12:14 عصر
این دوتا متغییر رو من اضافه کردم:


$checkboxs_in_row = 5;
$current_checkbox_index = 0;

و با استفاده از اونا در حلقه دوم مشکل رو رفع کردم.

amihd1378
پنج شنبه 25 مرداد 1397, 13:08 عصر
این دوتا متغییر رو من اضافه کردم:


$checkboxs_in_row = 5;
$current_checkbox_index = 0;

و با استفاده از اونا در حلقه دوم مشکل رو رفع کردم.

سلام ممنون.من کد را تست کردم خطا میده . اوکی نشده مثل اینکه