【问题标题】:Insert data from forms inside a while loop php在while循环php中插入表单中的数据
【发布时间】:2020-07-04 09:47:49
【问题描述】:

美好的一天。我只想问如何从while循环生成的表单中插入数据。这是我到目前为止所尝试的。我添加了一个循环,它们将具有不同的 id 或名称,但是当我尝试单击按钮时,第一个表单是唯一有效的表单。非常感谢您。

<?php
include "../config/dbconfig.php";

$data['productCode'] = "1"; // sample data
$stmt = $conn->prepare("SELECT * FROM tbl_category");
//$stmt->bind_param("i", $data['productCode']);
$stmt->execute();
$result = $stmt->get_result();
$i = 1;
while ($stuff = $result->fetch_assoc()) {
?>
    <div class="col-sm-6" style="margin-top:20px;">
        <div class="card">
            <div class="card-header"><?php echo $stuff['categoryname']; ?>
            </div>
            <div class="card-body outermydiv">
                <div class="myDIV">
                    <form method="POST" name="itemform" action="">
                        <div class="form-row">
                            <div class="col-5">
                                <input type="text" class="form-control" name="name[<?php echo $i; ?>]" id="itemname[<?php echo $i; ?>]" placeholder="Item name" required autocomplete="off">
                            </div>
                            <div class="col">
                                <input type="number" class="form-control" name="cost[<?php echo $i; ?>]" id="itemcost[<?php echo $i; ?>]" placeholder="Cost" required>
                            </div>
                            <div class="col">
                                <input type="number" class="form-control" name="price[<?php echo $i; ?>]" id="itemprice[<?php echo $i; ?>]" placeholder="Price" required>
                                <input type="hidden" class="form-control" name="code[<?php echo $i; ?>]" id="forcatcode[<?php echo $i; ?>]" value="<?php echo $stuff['categorycode'] ?>">
                            </div>
                            <div class="col">
                                <button type="submit" class="btn btn-success" name="btnsaveitem" id="btnsaveitem">Save</button>
                            </div>
                            <?php $i++; ?>
                            <input type="hidden" name="count" value="<?php echo $i; ?>" />
                        </div>
                    </form>

                </div>
                <br>

            </div>
        </div>
    </div>
<?php
}
?>

这是我的插入代码

<?php
    if (isset($_POST['btnsaveitem'])) {
      $count = $_POST['count'];
      for ($i = 1; $i < $count; $i++) {
          //$code = $_POST['code'][$i]; // check empty and check if interger
          $foritemname = $_POST['name'][$i]; // check empty and strip tags
          //$qty = $_POST['qty'][$i]; // check empty and check if interger
          $stmt = $conn->prepare("INSERT INTO tbl_items(`itemname`) VALUES ('".$foritemname."')");
          //$stmt->bind_param("iss",$name);
          $stmt->execute();
      }
  }
?>

【问题讨论】:

  • 您的插入查询不安全/不稳定,因为您没有使用准备好的语句。为什么不在您的问题中包含一些诊断结果?行为不端时的提交数据是什么?
  • 感谢您回复 mickmackusa 先生。当我尝试发送数据时它只是刷新并且在检查数据库时它不会插入并且只有第一个按钮有效。
  • 您在错误日志中看到了哪些错误?大部分代码都应该重写。
  • 先生,我一直在刷新错误日志,但没有显示任何内容。

标签: php html forms sql-insert


【解决方案1】:

从重写表单开始...

  1. 您不需要 $i 来做任何事情,但我会留下声明以防您需要它来做其他事情。
  2. 不要提交数组类型的数据,每个表单都会提交自己的一组字段。
  3. $stuff['categorycode'] 添加为每个提交的value 可能更有意义,以避免需要隐藏字段。我现在就交给你了。

表格:

foreach ($stmt->get_result() as $i => $stuff) { ?>
    <div class="col-sm-6" style="margin-top:20px;">
        <div class="card">
            <div class="card-header"><?php echo $stuff['categoryname']; ?></div>
            <div class="card-body outermydiv">
                <div class="myDIV">
                    <form method="POST">
                        <div class="form-row">
                            <div class="col-5">
                                <input type="text" class="form-control" name="name" placeholder="Item name" required autocomplete="off">
                            </div>
                            <div class="col">
                                <input type="number" class="form-control" name="cost" placeholder="Cost" required>
                            </div>
                            <div class="col">
                                <input type="number" class="form-control" name="price" placeholder="Price" required>
                            </div>
                            <div class="col">
                                <button type="submit" class="btn btn-success" name="btnsaveitem">Save</button>
                            </div>
                        </div>
                        <input type="hidden" class="form-control" name="code" value="<?php echo $stuff['categorycode']; ?>">
                    </form>
                </div>
                <br>
            </div>
        </div>
    </div>
    <?php
}        

接收脚本:(根据需要扩展其他字段)

if (isset($_POST['btnsaveitem'])) {
    $stmt = $conn->prepare("INSERT INTO tbl_items(`itemname`) VALUES (?)");
    $stmt->bind_param("s",$_POST['name']);
    $stmt->execute();
}

这都是未经测试的代码。

【讨论】:

  • 谢谢先生。我试过了,所有按钮现在都发送数据,但它似乎还没有插入数据库。我尝试更改文本框的名称,但没有帮助。
  • 您的反馈缺乏特异性和诊断细节。插入不工作的原因可能有 10 个。请研究如何在屏幕上显示错误并打印出您的 $_POST 变量以确认它包含您期望的所有数据。
  • 非常感谢先生!它现在工作。我的代码有错字。非常感谢先生。
猜你喜欢
  • 2018-10-04
  • 2019-04-30
  • 1970-01-01
  • 2021-06-03
  • 2020-05-13
  • 2012-04-23
  • 2019-01-21
  • 1970-01-01
  • 2018-05-21
相关资源
最近更新 更多