2013-02-05 62 views
0

我想知道爲什麼我的foreach循環在我的mysql表中創建一個額外的行,並只插入一列與數據。我是新來的PHP和MySQL,所以任何幫助,非常感激。下面是從我的形式foreach循環在我的查詢中添加額外的一行

<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,品牌方面,hwstamp列,origin,cases,report_id)id是主鍵,而report_id是外鍵。 當我向兩個表中輸入數據時,它會正確插入創建的兩行和列中的所有數據,當我只將數據輸入到一個表中時,它會在表中創建一行並創建第二行除了report_id列以外,所有列都是空的。

+4

強制[PDO blurb](http://stackoverflow.com/questions/866860/mysql-versus-pdo)? POST的樣子是什麼?它實際上是聯想嗎? – ficuscr

+2

在addslashes上,而不是使用該:http://stackoverflow.com/questions/1286419/escaping-using-slashes-and-then-using-stripslashes-php 此外,你可能想明確指定你的列名稱隱含地依賴他們的秩序和存在。 'insert into lots(column,another,another,terms,etc)values('','$ brand'...' – Kzqai

+0

* foreach *或* POST *系統不可能失敗,所以它必須在你的HTML ,用戶輸入或你有一箇舊行仍然存在於數據庫... –

回答

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); 
} 

應該避免空行。

+0

是foreach循環中的「if」語句,在開頭的大括號中出現語法錯誤 – jmartinez916

+0

有一個缺失) ),它仍然插入第二行,其中包含數據的report_id列從窗體上的隱藏輸入傳遞。 – jmartinez916

0

謝謝大家的意見。我能夠解決空白行的問題,我檢查了我的html像ring0建議並做了print_r($ _ post),看看發佈的內容和數組有空鍵。數組([brand] => Array([0] => test [1] =>)[terms] =>數組([0] => test [1] =>)[hwstamp] =>數組([數組] ([0] => yes [1] =>)[origin] => Array([0] => mex [1] =>)[cases] => Array([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注入。感謝大家的輸入