2013-10-29 64 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循環中的動態值現在我修復了問題後,我得到了模型在數據庫中,但但我沒有得到其他值,所以有什麼建議? –