按表单将多行插入单个数据库

时间:2012-02-26 15:10:35

标签: php mysql insert

第一次这样做,看它是一个非常明显/容易解决的问题......

基本上我尝试使用单个插入查询插入多行,但是,我显然失败了,因此它无法正常工作。

通过在表格中搜索与其相关的相关条目来生成表单,因此如果您在部门A中它将获取您的名称并在表单上形成输入行。这一切都很好我可以生成表单,但是当我尝试插入表单时问题就出现了。

目前它做了这件事,而不是插入通过表单输入的数据,它在大多数字段中输入字母A(COUNT,STATUS和TYPE不受此限制,因为它们仅通过表集限制为某些数据类型自己)。

目前这是我在脚本中设置表单的方式:

<?php
if ($action == "editrecord") {
?>
<form name="form1" method="post" action="">
<table>
<tr><td colspan="2" align="left">
<?php //Getting Title for Record
        $resultTITLE = queryDB("SELECT * FROM merit_subdepts WHERE subdeptID = '$subdeptID'");
        while($rowTITLE = mysql_fetch_array($resultTITLE)) {
        $recordTITLE = $rowTITLE["subdeptNAME"];
            echo "$recordTITLE";
        }
?>
</td></tr>
<tr><td>Member Name</td><td>Choose Award</td><td>Reason</td><td></td></tr>
<?php
        $resultMERIT = queryDB("SELECT * FROM merit_members WHERE memberPRIMARY = '$subdeptID'");
        while($rowMERIT = mysql_fetch_array($resultMERIT)) {
        $memberID = $rowMERIT["memberID"];  
        $memberNAME = $rowMERIT["memberNAME"];
            ?>
            <tr>
                <td><?php echo $memberNAME; ?></td>
                <td><select name="count[]" class="ui-state-default">
                        <option value="0">0</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                    </select>
                </td>
                <td><input name="reason[]" type="text" id="reason" class="blackInput" value="Monthly Award <?php echo date("F, Y") ?>"></td> 
                <td><input name="type[]" type="hidden" id="type" value="Civil">
                    <input name="awarder[]" type="hidden" id="awarder" value="<?php $usersname; ?>">
                    <input name="datea[]" type="hidden" id="datea" value="<?php $stamp83; ?>">
                    <input name="status[]" type="hidden" id="status" value="Check">
                    <input name="id[]" type="hidden" id="id" value"<?php $memberID; ?>">
                    <input name="dept[]" type="hidden" id="dept" value"<?php $recordTITLE; ?>">
                </td>
            </tr>

        <?php } //end of sub-division membership list ?>
<tr><td colspan="4"><center>
       <div class="butDiv"><input name="submitRECORDS" type="submit" id="submitRECORDS" value="Submit Records"></div>
       </center>
     </td>
  </tr>
</table>
</form>
<?php
} //End of Edit Merit Records
?>

这是使用的插入查询:

if ($submitRECORDS) {

for($i = 0; $i<count($_POST['id']); $i++) //Getting total # var submitted and running loop 
{ $fromID = $_POST['id'][$i]; //var
  $fromTYPE = $_POST['type'][$i]; //var
  $fromCOUNT = $_POST['count'][$i]; //var
  $fromDATEA = $_POST['datea'][$i]; //var
  $fromAWARDER = $_POST['awarder'][$i]; //var
  $fromREASON = $_POST['reason'][$i]; //var
  $fromDEPT = $_POST['dept'][$i]; //var
  $fromSTATUS = $_POST['status'][$i]; //var
if ($fromID != "0") { 
queryDB("INSERT INTO merit_precord (NAME,TYPE,COUNT,DATEA,AWARDER,REASON,DEPT,STATUS) VALUES ('$fromID','$fromTYPE','$fromCOUNT','$fromDATEA','$fromAWARDER','$fromREASON','$fromDEPT',$fromSTATUS')"); } }
$action="";
$msg=1;
}

在我脱掉头发之前,我非常感激。 :)

1 个答案:

答案 0 :(得分:0)

这可能不是你问题的唯一来源(只是我注意到的第一个),但是当使用<?php $varname ?>时,实际上什么都不会打印到屏幕上。相反,您需要使用<?php echo $varname; ?>

            <td><input name="type[]" type="hidden" id="type" value="Civil">
                <input name="awarder[]" type="hidden" id="awarder" value="<?php echo $usersname; ?>">
                <input name="datea[]" type="hidden" id="datea" value="<?php echo $stamp83; ?>">
                <input name="status[]" type="hidden" id="status" value="Check">
                <input name="id[]" type="hidden" id="id" value"<?php echo $memberID; ?>">
                <input name="dept[]" type="hidden" id="dept" value"<?php echo $recordTITLE; ?>">
            </td>

您看到的AArray的第一个字母。当上面的值插入为空并且您尝试在[]的for循环中访问它们时,字符串Array可以通过字符索引访问,就像数组一样。

如评论中所述,您的INSERT语句易受SQL注入攻击。用mysql_real_escape_string()转义它们。

  $fromID = mysql_real_escape_string($_POST['id'][$i]);
  $fromTYPE = mysql_real_escape_string($_POST['type'][$i]);
  $fromCOUNT = mysql_real_escape_string($_POST['count'][$i]);
  ...
  ...  
  $fromSTATUS = mysql_real_escape_string($_POST['status'][$i]);