无法从php中的while循环中获取值

时间:2013-10-29 00:59:35

标签: php mysql

正如您在此代码中看到的那样,我通过从数据库中的表中选择模型来制作表格。 但是我发布了select查询的返回类似于该表的主列并将其放入while循环中,因此它一直生成行,直到select查询附带的模型完成 现在我遇到了一个问题,当我试图在$ _Post [''] supergloble中获取这个模型时,它一直向我发送它从循环中得到的最后一个值 我的问题是如何从这个循环中获取每个值,以便在我的数据库中的单个插入查询中使用它?

抱歉英语不好:S !!

<form class="form-signin" action="<?php $_SERVER['PHP_SELF'];?>" method="Post">
<?php
$models = mysql_query("SELECT `Model_Name` FROM `models` WHERE `Brand` = 20");
while($row = mysql_fetch_array($models))
    {
    echo '
    <tr>
    <td><input type="text" name="mode[]" value="'.$row['Model_Name'].'"></td>
    <td><input type="text" name="sellout[]" value=""></td>
    <td><input type="text" name="shelfshare[]" value=""></td>
    <td><input type="text" name="price[]" value=""></td>
    <td><input type="text" name="Shortage[]" value=""></td>
    <td><input type="text" name="Inventory[]" value=""></td>
     </tr>

    ';
    }

    ?>

</form>

插入脚本

$date = date("Y-m-d");
foreach($_POST['mode'] as $key => $mode){
$sellout = $_POST['sellout'][$key];
$shelfshare = $_POST['shelfshare'][$key];
$price = $_POST['price'][$key];
$shortage = $_POST['shortage'][$key];
$inventory = $_POST['inventory'][$key];
mysql_query("INSERT INTO `smartdailyreport`(`SFO_Code`, `Model`, `Sell_Out`, `Shelf_Share`, `Price`, `Shortage`, `Inventory`, `Date`) VALUES ('".mysql_real_escape_string($_SESSION['idd'])."','".mysql_real_escape_string($mode)."','".mysql_real_escape_string($sellout)."','".mysql_real_escape_string($shelfshare)."','".mysql_real_escape_string($price)."','".mysql_real_escape_string($shortage)."','".mysql_real_escape_string($inventory)."','".mysql_real_escape_string($date)."')") or die(mysql_error());
}

2 个答案:

答案 0 :(得分:1)

将这些输入的名称设为数组:

 <tr>
<td><div class="col3" align="center"><input type="text" name="mode[]" class="form-control" value="'.$row['Model_Name'].'"></div></td>
<td><div class="col3" align="center"><input type="text" name="sellout[]" class="form-control" value=""></div></td>
<td><div class="col3" align="center"><input type="text" name="shelfshare[]" class="form-control" value=""></div></td>
<td><div class="col3" align="center"><input type="text" name="price[]" class="form-control" value=""></div></td>
<td><div class="col3" align="center"><input type="text" name="Shortage[]" class="form-control" value=""></div></td>
<td><div class="col3" align="center"><input type="text" name="Inventory[]" class="form-control" value=""></div></td>
 </tr>

然后当你处理表格时:

foreach($_POST['mode'] as $key=>$mode){
    $thisIsOne = $_POST['mode'][$key];
    $alsoThisOne = $_POST['sellout'][$key];
    etc...
}

答案 1 :(得分:0)

我会把你的评论写给你答案......

您已$POST作为$mode值,请将其修复。 (或删除$mode已经从foreach

定义

将您的查询置于您的foreach循环中,否则您只需在每次迭代时覆盖这些变量,然后在最后插入最后一个

mysql_error放入die的{​​{1}}回调中,以便在存在错误时显示错误(如果您愿意)

mysql_query

最后,使用$date = date("Y-m-d"); foreach($_POST['mode'] as $key => $mode){ $sellout = $_POST['sellout'][$key]; $shelfshare = $_POST['shelfshare'][$key]; $price = $_POST['price'][$key]; $shortage = $_POST['shortage'][$key]; $inventory = $_POST['inventory'][$key]; mysql_query("INSERT INTO `smartdailyreport`(`SFO_Code`, `Model`, `Sell_Out`, `Shelf_Share`, `Price`, `Shortage`, `Inventory`, `Date`) VALUES ('".mysql_real_escape_string($_SESSION['idd'])."','".mysql_real_escape_string($mode)."','".mysql_real_escape_string($sellout)."','".mysql_real_escape_string($shelfshare)."','".mysql_real_escape_string($price)."','".mysql_real_escape_string($shortage)."','".mysql_real_escape_string($inventory)."','".mysql_real_escape_string($date)."')") or die(mysql_error()); } 代替mysqli_*因为mysql已被弃用了一段时间。此外,使用mysql或类似于escape your POST variables and save you from SQL Injection