使用php将while循环中的数据插入表中

时间:2018-04-24 15:06:57

标签: php html mysql while-loop

我正在使用HTML和PHP创建表单。我创建了一个表单,我想提交并将数据保存在数据库中。

我正在尝试提交一个包含来自while循环的数据的表单。所有输入值都是通过while循环生成的。

代码看起来像这样。

<table width="1348" border="0" class="table table-striped" >
        <tr>
          <td width="106">&nbsp;</td>

          <td width="332"><strong>Product Code</strong></td>
          <td width="375"><strong>Product Name</strong></td>
          <td width="211"><strong>QTY</strong></td>


      </tr>
                <?php
    $i = 0;
    $rowset = mysql_query("select * from product_detail where productID='".$data['productCode']."'");
    while($stuff = mysql_fetch_array($rowset)){
    ?>
    <tr>

        <td><input type="text" name="code[<?php echo $i?>]" value="<?php enter code hereecho $stuff['code'];?>"/></td>
        <td><input type="text" name="name[<?php echo $i?>]" value="<?php echo $stuff['name'];?>" size="50"/></td>
        <td><input type="text" name="qty[<?php echo $i?>]"  value="<?php echo $stuff['qty'];?>" size="10"/></td>

    </tr>
    <?php $i++; }?>
    <tr id="last">
</table>
<input type="submit" name="save id="save" class="btn btn-primary btn-lg"/>

这是将数据添加到数据库的代码。

$code=$_POST['code'.$i];
$name=$_POST['name'.$i];
$qty=$_POST['qty'.$i];
$query = mysqli_query($con,"insert into stock(productCode, productName, qty) values ('".$code."', '".$name."','".$qty."')") or die(mysqli_error($con));

2 个答案:

答案 0 :(得分:1)

首先,使用带有bind_param的预准备语句,因为您的脚本完全暴露于SQL注入。

其次,您可以为行数添加隐藏的输入类型

<form action="" method="POST">
    <table width="1348" border="0" class="table table-striped" >
                <tr>
                        <td width="106">&nbsp;</td>
                        <td width="332"><strong>Product Code</strong></td>
                        <td width="375"><strong>Product Name</strong></td>
                        <td width="211"><strong>QTY</strong></td>
                </tr>
<?php
    $data['productCode'] = "1"; // sample data
    $stmt = $con->prepare("SELECT * FROM product_detail WHERE productID = ?");
    $stmt->bind_param("i", $data['productCode']);
    $stmt->execute();
    $result = $stmt->get_result();
    $i = 0;
    while($stuff = $result->fetch_assoc()) {
?>
            <tr>
                    <td></td>
                    <td><input type="text" name="code[<?php echo $i; ?>]" value="<?php echo $stuff['code'];?>"/></td>
                    <td><input type="text" name="name[<?php echo $i; ?>]" value="<?php echo $stuff['name']; ?>" size="50" /></td>
                    <td><input type="text" name="qty[<?php echo $i; ?>]"  value="<?php echo $stuff['qty']; ?>" size="10" /></td>

            </tr>
<?php
        $i++;
    }
?>
                    <input type="hidden" name="count" value="<?php echo $i; ?>" />
            <tr id="last">
    </table>
<input type="submit" name="save" id="save" class="btn btn-primary btn-lg"/>
</form>

使用表单

发布计数
<?php
if (isset($_POST['save'])) {
    $count = $_POST['count'];
    for ($i = 0; $i < $count; $i++) {
        $code = $_POST['code'][$i]; // check empty and check if interger
        $name = $_POST['name'][$i]; // check empty and strip tags
        $qty = $_POST['qty'][$i]; // check empty and check if interger

        $stmt = $con->prepare("INSERT INTO stock (productCode, productName, qty) VALUES (?, ?, ?)");
        $stmt->bind_param("iss",$code,$name,$qty);
        $stmt->execute();
    }
}
?>

您可能还想在插入

之前检查帖子值是否为空以及其他必要的验证

答案 1 :(得分:0)

由于表是动态填充的,因此您需要使用数组作为名称属性

<table>
        <tr>
            <th>Name</th>
            <th>Present</th>
            <th>Excused</th>
            <th>Unexcused</th>
            <th>Ext</th>
        </tr>
        <?php         
        $query = "select * from TbCard";
        $sql = mysqli_query($connect, $query);
        $count = 0;
            while ($data = mysqli_fetch_array($sql)) {
        ?>
                <tr>
                <td>
                    <input name="tableRow[<?php echo $count; ?>]['dataName']" id='name' type='text' value="<?php echo $data['Name'];?>" readonly style='border:none;width:350px'></input>
                </td>
                <td>
                    <input name="tableRow[<?php echo $count; ?>]['status']" type="radio" value="Present"> Present
                </td>
                <td>
                    <input name="tableRow[<?php echo $count; ?>]['status']" type="radio" value="Excused"> Excused
                </td>
                <td>
                    <input name="tableRow[<?php echo $count; ?>]['status']" type="radio" value="Unexcused"> Unexcused
                </td>
                </tr>;
        <?php
             $count++;
            }
        ?>
    </table>

php 就是这样的,假设数据中包含值:

$tableRow = $_POST['tableRow'];
foreach($tableRow as $row){
   /* here insert data from post */
    echo $row['dataName'].' '.$row['status'].'<br/>';
}

要查看数组的内容,请使用 print_r($ tableRow) 在这种情况下,我使用名称tableRow