簡體   English   中英

PHP循環將Array [0]而不是數據添加到MySQL數據庫

[英]PHP loop adding Array[0] instead of data to MySQL db

我有一張表格,教練可以輸入多個投手參加比賽。 該表單允許用戶根據需要添加行,如下所示:

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

循環實際上是在更新db-BUT-而不是表單中的值-它將像這樣放入零和數組標記:

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

有什么想法嗎? 謝謝!

連接您的字符串和變量!

$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']);

但是,如下面的HamZa所述,處理此類情況的最佳方法是使用准備好的語句 盡管取決於您的經驗,但這可能需要一些額外的時間和精力才能將代碼轉換為該樣式。

表名和字段名也應該用反引號`包圍,以避免與保留關鍵字沖突

除了清理變量之外,您也將很好地驗證輸入。 也可以使用其他專門的清洗方法,例如,對於數字字段調用intvalfloatval ,因為其他字符串固定方法將是不必要的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM