php - 如何将HTML表格数据插入MySQL

时间:2017-10-10 07:02:28

标签: php html mysql

我有一个带有文本和无线电输入的HTML表,我希望用PHP将每一行插入到我的MySQL表中

MySQL表如下所示:

================================
|     Name      | Status | Ext |
================================

HTML表格

===============================================================
|     Name      | Present | Excused | Unexcused |     Ext     | 
===============================================================
|  text input1  |    o    |    o    |     o     |  textarea   |
---------------------------------------------------------------
|  text input2  |    o    |    o    |     o     |  textarea   |
and so on...
*o's are radios

它从MySQL查询循环获取值,我希望它是 只能点击其中一个无线电,并将点击的无线电发送到状态列

代码

 <form method="post" action="insert.php" enctype="multipart/form-data">
    <table>
        <tr>
            <th>Name</th>
            <th>Present</th>
            <th>Excused</th>
            <th>Unexcused</th>
            <th>Ext</th>
        </tr>
        <?php         
        echo "<tr>";
        $query = "select * from TbCard";
        $sql = mysqli_query($connect, $query);
            while ($data = mysqli_fetch_array($sql)) {
                echo '<tr>';
                echo"<td><input id='name' type='text' value='" . $data['Name'] . "' readonly style='border:none;width:350px'></input></td>";
                echo"<td><input type='radio'></td>";
                echo"<td><input type='radio'></td>";
                echo"<td><input type='radio'></td>";
                echo"<td><textarea></textarea></td>";
                echo '</tr>';
            }
        }
        echo "</tr>";
        ?>
    </table>
<input type="submit" value="Insert">
</form>

编辑:该表位于表单标记中,并对另一个.php执行操作 我想要一个提交按钮来插入它

3 个答案:

答案 0 :(得分:0)

将名称属性添加到单选按钮。但是,每个表行的名称应该是唯一的,因此最终可能会生成自动生成的名称。像这样:

...
$index = 0;
while ($data = mysqli_fetch_array($sql)) {
    echo '<tr>';
    echo"<td><input id='name' name='name_$index' type='text' value='" . $data['Name'] . "' readonly style='border:none;width:350px'></input></td>";
    echo"<td><input type='radio' name='status_$index'></td>";
    echo"<td><input type='radio' name='status_$index'></td>";
    echo"<td><input type='radio' name='status_$index'></td>";
    echo"<td><textarea name='Ext_$index'></textarea></td>";
    echo '</tr>';
    $index++;
}
...

事实上,您需要为每个字段添加唯一名称,包括text和textarea,以确保分别插入每行的值。

现在要检索在db中保存的值,你可以这样做:

foreach($_POST as $key => $val)
{
    if(strpos($key, 'name_') === 0 )
    {
        $criteria = explode("_", $key);
        $index = $criteria[2];
        //now you can get the rest of the fields
        $status = $_POST["status_$index"];
        $name = $_POST["name_$index"];
        $ext = $_POST["Ext_$index"];
        //assuming you have a SaveFunction:
        SaveFunction($name, $status, $ext);
    }
}

答案 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){
    echo $row['dataName'].' '.$row['status'].'<br/>';
}

那应该显示你在表中每行选择的值,我不使用mysqli所以我不会提供将它插入数据库的函数,但重要的是你现在有了需要的数据

要查看数组的内容,请使用print_r($tableRow)

注意: 我删除了表格中的echo部分,我可能错过了一些引号或一些拼写错误,只是评论澄清< / em>的

答案 2 :(得分:0)

首先,您没有正确发送数据

            echo"<td><input id='name' type='text' value='" . $data['Name'] . "' readonly style='border:none;width:350px'></input></td>";
            echo"<td><input type='radio' name='status' value='Present' ".isset($data['Status']) && $data['Status']=='Present'? checked='checked':null."></td>";
            echo"<td><input type='radio' name='Status' value='Excused' ".isset($data['Status']) && $data['Status']=='Excused'? checked='checked':null."></td>";
            echo"<td><input type='radio' name='Status' value='Unexcused' ".isset($data['Status']) && $data['Status']=='Unexcused'? checked='checked':null."></td>";
            echo"<td><textarea name='Ext'></textarea></td>";

这只是正确查看和插入的部分。如果您在insert.php方面需要帮助,请告诉我