Вставить данные из цикла while в таблицу с помощью php

0

Я создаю форму с использованием 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));
  • 0
    Вам нужно отправить свои данные из таблицы?
  • 0
    Посмотрите на ваш массив $_POST . Также вы открыты для инъекций SQL. Спараметрировать. Также используйте mysqli везде, не более mysql_* .
Показать ещё 4 комментария
Теги:
while-loop

2 ответа

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();
    }
}
?>

Вы также можете проверить, являются ли значения post пустыми с другой необходимой проверкой перед вставкой

  • 0
    спасибо, сэр, вы лучший
0

Поскольку таблица динамически заполнена, вам необходимо использовать массив в качестве атрибута name

<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

  • 0
    хорошо, я попробую, большое спасибо за помощь, и я дам вам знать результат

Ещё вопросы

Сообщество Overcoder
Наверх
Меню