2013-07-30 15 views
0

我有一個形式,教練可以進入多個投手遊戲。該表格允許用戶根據需要添加行,看起來像這樣:PHP循環添加數組[0]而不是數據到MySQL分貝

<tr><td><select name="pitcherteam[]" size="1"> 
<option>PLEASE SELECT TEAM 
<option>Team 1 
<option>Team 2 
<option>Team 3 
</select></td><td> 
<input type=text size=50 name="pitcher[]"></td><td> 
<select name="pitcherage[]" size="1"> 
<option>AGE 
<option>8 
<option>9 
</select></td> 
<td><input type="text" size=3 name="pitcherpitches[]"></td></tr> 

的PHP代碼我使用遍歷投手,如果他們不爲空不插入到MySQL數據庫:

$size_array = count($_POST['pitcher']); 
for ($i=0; $i<$size_array; $i++){ 
    if($_POST['pitcher'][$i] != ''){ 
    $sql2="INSERT INTO pitchcounts (pitcherteam, pitcher, pitcherage, pitches) 
VALUES 
    ('$_POST[date]','$_POST[pitcherteam][$i]','$_POST[pitcher][$i]',' 
$_POST[pitcherage][$i]','$_POST[pitches][$i]')"; 

    if (!mysqli_query($con,$sql2)) 
     { 
    die('Error: ' . mysqli_error($con)); 
    } 
} 
} 
從形式,而不是價值觀 - -

循環實際上是在更新數據庫 - 但它的投入零和數組標誌是這樣的:

pitcherteam pitcher pitcherage pitches 
Array[0] Array[0] 0 0 
Array[1] Array[1] 0 0 
Array[3] Array[3] 0 0 

上這是怎麼回事任何想法?謝謝!

+0

在執行之前檢查查詢。 – sudhakar

回答

3

連接你的字符串和變量!

$date = trim(mysqli_real_escape_string($_POST['date'])); //example variable clean 
$sql2=" INSERT INTO 
      `pitchcounts` 
      (`pitcherteam`, `pitcher`, `pitcherage`, `pitches`) 
     VALUES 
      ('".$date."','".$_POST['pitcherteam'][$i]."','".$_POST['pitcher'][$i]."' 
      ,'".$_POST['pitcherage'][$i]."','".$_POST['pitches'][$i]."')"; 

你也應該清潔您的輸入 - 你永遠不應該把$_POST數據直接進入數據庫。

當清洗陣列處理,存在通過單獨應用清洗方法的每個值無需循環,對於那些情況下,你可以使用array_map

function clean($val) 
{ 
    return trim(strip_tags(mysqli_real_escape_string($val))); 
} 
$pitchers = array_map('clean',$_POST['pitcher']); 

然而,正如下面的哈姆扎提到處理這種情況的最佳方法是使用prepared statements。雖然取決於您的經驗,但這可能需要一些額外的時間和精力才能將代碼轉換爲該風格。

表和字段的名稱也應與反引號包圍`,以避免與保留關鍵字

除了清洗變量,你也會做的很好驗證輸入以及衝突。例如,對於數字字段調用intvalfloatval,也可以使用其他專業清潔方法,因爲其他字符串修復方法將是不必要的。

+2

觀看一個完整的越野車代碼被實時更新和修復是有趣的:P – MightyPork

+1

lolwut?你爲什麼不使用準備好的陳述向他展示「正確」的方式? – HamZa

+1

@MightyPork是的,每次我保存編輯時都會注意到一些問題lol – SmokeyPHP