这就是页面的样子:
这就是数据库的样子:
现在,我将这一切都与文本字段一起使用。 (按保存时,文本字段将插入bogie_nr
。
现在,我不想要文本字段,只有复选框
因此,如果我选择前2个复选框,请按保存。我希望数据库按1
1和2插入数字axle_nr
现在,我希望禁用前两个框(因此您无法再次检查它们)。
现在,当您选择第3和第4个框时,请按保存。我希望数据库在第3和第4 2
位置插入数字axle_nr
。
当所有内容都填写完毕后,我想要一个按钮,将我重定向到新页面。 我该怎么做?
代码(仅限复选框):
<tr>
<?php
$show_axle = $database->bogies($_GET['train_id']);
foreach($show_axle as $bogiebox){ ?>
<input type='hidden' name='bogie_id[<?php echo $bogiebox['bogie_id']?>]' value='<?php echo $bogiebox['bogie_id']?>'>
<td>
<input type='checkbox' id="bogie_axle_fields" name='bogie_nr[<?php echo $bogiebox['bogie_id']?>]' placeholder = "enter bogie number">
</td>
<?php
}
?>
</tr>
功能:
function bogies($id){
$sql = "SELECT * FROM bogie WHERE train_id = :id2";
$sth = $this->pdo->prepare($sql);
$sth->bindParam(":id2", $id, PDO::PARAM_STR);
$sth->execute();
return $sth->fetchAll();
}
修改
我的保存按钮后面是一个页面:end_result.php
。就在那里,我有一个功能:
function update_bogie($id) {
$sql = "UPDATE bogie SET bogie_nr = :bogie_nr WHERE bogie_id = :bogie_id";
$sth = $this->pdo->prepare($sql);
$sth->bindParam(':bogie_id', $id, PDO::PARAM_INT);
$sth->bindParam(":bogie_nr", $_POST['bogie_nr'][$id], PDO::PARAM_STR);
$sth->execute();
}
这会更新转向架表(当我将复选框更改为文本字段时工作)
我现在想要的是什么: 复选框。当我检查前2个框时,按保存。我希望数字1在轴1中插入2次,在数据库中插入2 之后,我希望选中前两个框。因此,您无法再次选择它们。
修改
ids的样子:
几乎正在进行的编辑:
好的,所以复选框现在插入数据库中。当它们插入数据库时它们也被禁用。现在只有一些问题:
NULL
。但它应该保留旧的价值。我现在的代码:
<form method='POST'>
<input type="hidden" value="true" id="y" name="y">
<div id="axle_bogie_border">
<div id="train_adjusted">
<h2>
Train
</h2>
</div>
<table id="distance_margin">
<div id="bogiebox">
<tr>
<?php
$x = 1;
foreach($show_axle as $bogiebox){ ?>
<input type='hidden' name='bogie_id[<?php echo $bogiebox['bogie_id']?>]' value='<?php echo $bogiebox['bogie_id']?>'>
<td>
<?php
if($bogiebox['bogie_nr'] == ''){
?>
<input type='checkbox' id="bogie_axle_fields" value="<?= $x ?>" name='bogie_nr[<?php echo $bogiebox['bogie_id']?>]' placeholder = "enter bogie number"></td>
<?php
}
else{
?>
<input type='checkbox' id="bogie_axle_fields" checked disabled value="<?= $x ?>" name='bogie_nr[<?php echo $bogiebox['bogie_id']?>]' placeholder = "enter bogie number"></td><?php } }
?>
</tr>
</div>
</table>
<input type='submit' id="add_train_button1" value='Save'>
<?php
if(isset($_POST['y'])){
$validbogies = false;
//validate
if(($_POST['bogie_id']) >0){
if($_POST['bogie_id'] >0){
$validbogies = true;
}elseif($_POST['bogie_id'] <= 0){
echo "Error!";
}
else{
echo "Error!." . "<br>";
}
}else{
echo "Error!" . "<br>";
}
//If valid, then insert.
if($validbogies){
foreach($_POST['bogie_id'] as $id) {
$update_axle = $database->update_bogie($id);
}
$x++;
unset($_POST['y']);
echo "Yea! Things have been moved to the database :)";
}
}
?>
</div>
</form>
该功能仍然与旧功能相同。
修改 :
这是一个例子:
答案 0 :(得分:0)
<?php
$show_axle = $database->bogies($_GET['train_id']);
// First question : When everything is filled in,
// i want a button that redirects me to a new page.
if(count($show_axle) == 4)
echo "<button type=\"button\" onClick=location.href=''>Click Me!</button>";
// Second question :
// WE display the missing checkboxes
// We will display until we found the first value axle_nr
// (i.e. the checkbox the user click last time)
// when we found we need to move to the next value of axle_nr
else
{
$j = 0;
for($i = 0; $i < 4; ++$i)
{
if($show_axle[$j]['axle_nr'] != ($i + 1))
{
echo "<input type='hidden' name='bogie_id[" .
$bogiebox['bogie_id']. "]' value='" .
$bogiebox['bogie_id'] . "'><td>";
echo "<input type='checkbox' id='bogie_axle_fields'
name='bogie_nr[" . $bogiebox['bogie_id'] .
"]' placeholder='enter bogie number'></td>";
}
else
++$j;
}
?>
应该这样做(mb在回声上有些错误,但算法没问题。)
答案 1 :(得分:0)
在保存按钮后面的代码中尝试以下操作:(我假设您的复选框的ID是这样的:bogie_nr [455]
function update_bogie($id) {
$sql = "UPDATE bogie SET bogie_nr = :bogie_nr WHERE bogie_id = :bogie_id";
$sth = $this->pdo->prepare($sql);
$sth->bindParam(':bogie_id', $id, PDO::PARAM_INT);
if(isset($_POST['bogie_nr' . '[' . $id .']' ]){
$sth->bindParam(":bogie_nr", $_POST['bogie_nr' . '[' . $id .']' ], PDO::PARAM_STR);
}
else {
$sth->bindParam(":bogie_nr", 'NULL', PDO::PARAM_STR);
}
$sth->execute();
}
编辑正确的号码: 让你的号码尝试做这样的查询:
SELECT COUNT(*)
FROM bogie
WHERE train_id = @youridhere;
这将返回您已经为该列车提供的转向架数量,只需要+1或+2,具体取决于您添加的元素数量(在for循环中使用计数器)并且您有正确的数字要插入