2013-10-29 36 views
0

正如您在此代码中看到的,我通过从数据库中的表中选择模型来创建表。 但是,我将选择查询的返回值与主列这个表,并把它放到while循环,所以它一直产生行,直到与选择查询来的模型完成 现在我得到了一个问题,当我试图让这个模型在$ _Post [''] supergloble它保持只发送我从循环中获取的最后一个值 我的问题是如何从此循环中获取每个值以便在我的数据库中的单个插入查询中使用它?无法从while循环中获取值php

对不起,对不起英语: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()); 
} 
+0

'$ POST'可能会引发错误未定义的变量 - 更好地修复它:'$ _POST' –

+0

也,把你的插入查询的'foreach'循环内,否则你每次迭代时重写你的值 –

+0

在你编写任何**更多的SQL代码之前,你必须阅读[SQL注入漏洞](http://bobby-tables.com/)和[正确转义](http ://bobby-tables.com/php)。在未来的版本中,'mysql_query'也将被从PHP中删除,因为它很容易被滥用。 [PDO不难学习](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)并且使写起来更容易正确逃避查询。 – tadman

回答

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... 
} 
+0

它仍然无法正常工作,现在它不会向插入脚本发送任何数据,即使是模型 跳过一行并缩进八个空格。 这是列表 的四个空格,四个用于触发代码块。 –

+0

@MahmoudAhmed这是因为这还没有改变/修正'$ mode = $ POST ['mode'] [$ key];'notice'$ POST'?它需要'$ _POST' –

+0

好吧我修好了它,但现在我已经把模型值加入到数据库中,但是我没有得到其它的值,它一直给我发送什么:S –

0

我会把我的意见转换成你的答案......

你有$POST作为你的$mode价值,解决这个问题。 (或删除它,$mode已经从foreach定义)

把你的查询foreach循环,否则你只是简单地覆盖这些变量在每次迭代的时间,然后在结尾处

最后一个把mysql_errordie回调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已被弃用一段时间了。而且,使用mysqli_real_escape_string或类似escape your POST variables and save you from SQL Injection

+0

PDO比'mysqli'更可取,因为命名的占位符。更好的是像[Propel](http://propelorm.org/)或[Doctrine](http://www.doctrine-project.org/projects/orm.html)这样的正确的ORM。 – tadman

+0

感谢您的评论男人现在唯一的问题是我如何从while循环中的动态值现在我修复了问题后,我得到了模型在数据库中,但但我没有得到其他值,所以有什么建议? –