0

我想知道为什么我的 foreach 循环会在我的 mysql 表中创建一个额外的行,并且只插入一个包含数据的列。我是 php 和 mysql 的新手,所以非常感谢任何帮助。下面是我表格中的代码

<form name="insert_test" action="inserttest.php" method="post">
<table>

    <tr>
        <td>Brand</td><td>terms</td><td>HW Stamp</td><td>Origin</td><td>Cases</td>
    </tr>

    <tr>
        <td><input type="text" name="brand[]" /></td>
        <td><input type="text" name="terms[]" /></td>
        <td><input type="text" name="hwstamp[]" /></td>
        <td><input type="text" name="origin[]" /></td>
        <td><input type="text" name="cases[]" /></td>
        </tr>




</table>

    <table>

    <tr>
        <td>Brand</td><td>terms</td><td>HW Stamp</td><td>Origin</td><td>Cases</td>
    </tr>

    <tr>
        <td><input type="text" name="brand[]" /></td>
        <td><input type="text" name="terms[]" /></td>
        <td><input type="text" name="hwstamp[]" /></td>
        <td><input type="text" name="origin[]" /></td>
        <td><input type="text" name="cases[]" /></td>
        </tr>




</table>



<input type="hidden" name="report_id" value="<?php echo $report_id;?>" />

<input type="submit" value="Submit" />

这是我的php代码:

foreach ($_POST['brand'] as $key => $brand) {


 $terms = addslashes($_POST['terms'][$key]);
    $hwstamp = addslashes($_POST['hwstamp'][$key]);
    $origin = addslashes($_POST['origin'][$key]);
    $cases = addslashes($_POST['cases'][$key]);
    $report_id = addslashes($_POST['report_id'][$key]);





$queryreg= "INSERT INTO lots VALUES('',' $brand', '$terms',' $hwstamp', '$origin', '$cases','$report_id')" or die(mysql_error());




    mysql_query($queryreg);

}

echo mysql_error();

我表中的列是 (id,brand,terms,hwstamp,origin,cases,report_id) id 是主键,report_id 是外键。当我在两个表中输入数据时,它会正确插入并创建两行并在列中包含所有数据,当我只将数据输入到一个表中时,它会在表中创建包含所有数据的一行,然后创建第二行除 report_id 列外,所有列都为空。

4

2 回答 2

0

改变这个

$terms = addslashes($_POST['terms'][$key]);
$hwstamp = addslashes($_POST['hwstamp'][$key]);
$origin = addslashes($_POST['origin'][$key]);
$cases = addslashes($_POST['cases'][$key]);
$report_id = addslashes($_POST['report_id'][$key]);

$queryreg= "INSERT INTO lots VALUES('',' $brand', '$terms',' $hwstamp', '$origin', '$cases','$report_id')" or die(mysql_error());

mysql_query($queryreg);

进入这个:

if (trim($_POST['terms'][$key])!='' {
$terms = addslashes($_POST['terms'][$key]);
$hwstamp = addslashes($_POST['hwstamp'][$key]);
$origin = addslashes($_POST['origin'][$key]);
$cases = addslashes($_POST['cases'][$key]);
$report_id = addslashes($_POST['report_id'][$key]);

$queryreg= "INSERT INTO lots VALUES('',' $brand', '$terms',' $hwstamp', '$origin', '$cases','$report_id')" or die(mysql_error());
mysql_query($queryreg);
 }

它应该防止空行。

于 2013-02-05T17:40:37.877 回答
0

谢谢大家的意见。我能够解决空白行的问题,我像 ring0 建议的那样检查了我的 html,并执行了 print_r($_post) 以查看发布的内容并且数组有空键。

Array ( [brand] => Array ( [0] => test [1] => ) [terms] => Array ( [0] => test [1] => ) [hwstamp] => Array ( [0] => 是 [1] => ) [origin] => 数组 ( [0] => mex [1] => ) [cases] => 数组 ( [0] => 1234 [1] => ) )

因此,在我的 foreach 循环中,我执行了以下操作,以确保用户是否没有使用所有表单字段来创建包含空数据的第二行。

foreach ($_POST['brand'] as $key => $brand) 



{

if($brand !=''){


$terms = addslashes($_POST['terms'][$key]);

$hwstamp = addslashes($_POST['hwstamp'][$key]);
$origin = addslashes($_POST['origin'][$key]);
$cases = addslashes($_POST['cases'][$key]);



$queryreg= "INSERT INTO lots VALUES('',' $brand', '$terms',' $hwstamp', '$origin', '$cases','$report_id')" or die(mysql_error());

mysql_query($queryreg);
}

echo mysql_error();
}   

现在它正在工作,我可以进去清理代码以防止 sql 注入。感谢大家的意见

于 2013-02-06T21:17:29.207 回答