【发布时间】:2020-04-13 07:08:48
【问题描述】:
我遇到了以下问题:我做了一个表格,根据数据库中满足一定要求的产品数量有一定的输入。这是我的代码:
<?php
if (isset($submissionid) && isset($producttitle)) {
$sql3 = "SELECT * FROM submissies WHERE submissie_id = '$submissionid' ";
$data = $conn ->query($sql3);
$result2 = mysqli_fetch_assoc($data);
$nrofproducts = $result2[$producttitle];
settype($nrofproducts, "integer");
}
$psql = "SELECT * FROM product_status WHERE task_id = '$submissionid' AND product_title = '$producttitle'";
$pdata = $conn ->query($psql);
$presult = (isset($pdata))? mysqli_fetch_assoc($pdata) : '';
//GEBRUIK HASH VOOR PID< OM ZE TOCH IETS UNIEK TE GEVEN
if (!empty($presult)) {
if (isset($_POST['submit'])) {
for ($b = 0; $b < $nrofproducts; $b++ ) {
$sql6 = "DELETE FROM product_status WHERE task_id = '$submissionid' AND product_title = '$producttitle'";
mysqli_query($conn, $sql6);
}
for ( $b = 0; $b < $nrofproducts; $b++ ) {
$serialnr = $_POST['serialnr'. $b];
$pstatus = $_POST['pstatus' . $b];
$additional_info = $_POST['bijzonderheden' . $b];
$merk = $_POST['merk' . $b];
$type = $_POST['type' . $b];
$datechecked = date("d-m-Y");
$sql8 = "INSERT INTO product_status ( product_title, serie_nr, product_status, task_id, bijzonderheden, merk, type, datum_gekeurd) VALUES ('$producttitle', '$serialnr', '$pstatus', '$submissionid', '$additional_info', '$merk', '$type', '$datechecked')";
mysqli_query( $conn, $sql8);
}
header('Location: task.php?id='.$submissionid);
}
} else {
if (isset($_POST['submit'])) {
for ( $a = 0; $a < $nrofproducts; $a++ ) {
$serialnr = $_POST['serialnr'. $a];
$pstatus = $_POST['pstatus' . $a];
$additional_info = $_POST['bijzonderheden' . $a];
$merk = $_POST['merk' . $a];
$type = $_POST['type' . $a];
$datechecked = date("d-m-Y");
$sql4 = "INSERT INTO product_status ( product_title, serie_nr, product_status, task_id, bijzonderheden, merk, type, datum_gekeurd) VALUES ('$producttitle', '$serialnr', '$pstatus', '$submissionid', '$additional_info', '$merk', '$type', '$datechecked')";
mysqli_query( $conn, $sql4);
header('Location: task.php?id='.$submissionid);
}
}
}
?>
<html elements etc>
<?php
for ($i=0; $i < $nrofproducts; $i++):
if ($producttitle == "blusslang" || $producttitle == "vluchtset" ||
$producttitle == "ademluchtslang" || $producttitle == "ademluchtkap" ||
$producttitle == "h2s_meter" || $producttitle == "bhv_verbandtrommer" ||
$producttitle == "aed")
{
$showbrand = "no";
} else {
$showbrand = "yes";
}
?>
<form action="product.php?product=<?=$producttitle;?>&submissionid=<?=$submissionid ;?>" method="post">
<tr>
<th scope="row"><?=$i + 1; ?></th>
<td style="text-align:center"><input type="<?=($showbrand == "yes")? "text": "hidden";?>" class="form-control" name="merk<?= $i;?>" placeholder="Merk"></td>
<td style="text-align:center"><input type="<?=($producttitle == "aed" || $producttitle == "bhv_verbandtrommel")? "hidden" : "text";?>" class="form-control" name="serialnr<?= $i;?>" placeholder="Serienummer" value="<?=($producttitle == "aed" || $producttitle == "bhv_verbandtrommel")? "1" : "" ;?>"></td>
<td style="text-align:center">
<select class="custom-select mr-sm-2" name="pstatus<?php echo $i;?>">
<option value="gekeurd">Gekeurd</option>
<?=($producttitle == "gasmasker" ||
$producttitle == "vluchtset" ||
$producttitle == "ademluchtslang" ||
$producttitle == "ademluchtkap")?""
: '<option value="gerepareerd">Gerepareerd</option>';
?>
<option value="afgekeurd">Afgekeurd</option>
</select>
</td>
<td style="text-align:center">
<input type="text" class="form-control" name="bijzonderheden<?= $i;?>" placeholder="bijzonderheden">
</td>
</tr>
<?php
endfor;
?>
</tbody>
</table>
<input type="submit" class="btn btn-info" name="submit" value="Opslaan">
<!-- KNOP MET CHECKBOX, VOOR NIEUWLEVERING. HIERONDER DAN 1 VELD DIE ZE KUNNEN INVULLEN MET NIEUW PRODUCT EN DAN KUNNEN SUBMITTEN< DAT GAAT DAN NAAR DE FACTUREREN DATABASE. -->
<button class="btn btn-info"><a style="text-decoration: none; color: white;" href="task.php?id=<?=$submissionid; ?>">Ga terug</a></button>
</form>
结果是这样的: Form dynamically created
你可以看到这个有 10 行,但根据产品的不同,行数会有所不同,标题也会有所不同。
我想要的是从我的数据库中填写数据,以防表格已经填写过一次(我已经知道如何检查表格是否已填写)。然后我希望用户能够填写/编辑所有表格并重新提交。我遇到的问题是我不能简单地添加一个填充字段的while循环,这会干扰for循环。我能做什么?
我将使用数据库中的数据填充它的 while 循环示例:
$data = $conn->query("SELECT * FROM table WHERE status = 'something");
<?php while($row = mysqli_fetch_assoc($data)): ?>
<tr>
<th scope="row"><?=$row['name'];?></th>
<td><input value="<?=$row['age'];?>"></td>
<td><input value="<?=$row['whatver'];?>"></td>
<td><input value="<?=$row['something'];?>"></td>
</tr>
<?php endwhile; ?>
提前致谢!
编辑:
我试过这段代码:
<?php while($row = mysqli_fetch_assoc($conn->query("SELECT * FROM product_status WHERE task_id = '$submissionid' AND product_title = '$producttitle'"))): ?>
<?php for ($i=0; $i < $nrofproducts; $i++):
if ($producttitle == "blusslang" || $producttitle == "vluchtset" || $producttitle == "ademluchtslang" || $producttitle == "ademluchtkap" || $producttitle == "h2s_meter" || $producttitle == "bhv_verbandtrommer" || $producttitle == "aed") {
$showbrand = "no";
} else {
$showbrand = "yes";
}
?>
<form action="product.php?product=<?=$producttitle;?>&submissionid=<?=$submissionid ;?>" method="post">
<tr>
<th scope="row"><?=$i + 1; ?></th>
<td style="text-align:center"><input type="<?=($showbrand == "yes")? "text": "hidden";?>" class="form-control" name="merk<?= $i;?>" placeholder="Merk" value="<?=$row['product_title'];?>"></td>
<td style="text-align:center"><input type="<?=($producttitle == "aed" || $producttitle == "bhv_verbandtrommel")? "hidden" : "text";?>" class="form-control" name="serialnr<?= $i;?>" placeholder="Serienummer" value="<?=($producttitle == "aed" || $producttitle == "bhv_verbandtrommel")? "1" : "" ;?>"></td>
<td style="text-align:center">
<select class="custom-select mr-sm-2" name="pstatus<?php echo $i;?>">
<option value="gekeurd">Gekeurd</option>
<?=($producttitle == "gasmasker" || $producttitle == "vluchtset" || $producttitle == "ademluchtslang" || $producttitle == "ademluchtkap")?"" : '<option value="gerepareerd">Gerepareerd</option>' ;?>
<option value="afgekeurd">Afgekeurd</option>
</select>
</td>
<td style="text-align:center">
<input type="text" class="form-control" name="bijzonderheden<?= $i;?>" placeholder="bijzonderheden">
</td>
</tr>
<?php endfor; ?>
<?php endwhile; ?>
好处是它显示了产品的标题,坏的是它是一个永无止境的循环。 Image of ouput (infinite rows)
我尝试的代码的另一个问题是,当产品不在数据库中时,它不会显示任何表行,但它应该显示,因此用户可以第一次填写它。 enter image description here
【问题讨论】:
-
你想插入数据库吗?不清楚
-
我想显示已经在数据库中的信息,然后再次提交所有数据。
-
编辑了我的帖子,现在更清楚了吗?
-
更好!你可以在你的while循环中插入查询并插入从select查询中获取的数据:跨度>
-
感谢您的回复!所以我想知道,我应该把while循环放在for循环下面吗?
标签: php sql for-loop while-loop