[英]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所述,處理此類情況的最佳方法是使用准備好的語句 。 盡管取決於您的經驗,但這可能需要一些額外的時間和精力才能將代碼轉換為該樣式。
表名和字段名也應該用反引號`
包圍,以避免與保留關鍵字沖突
除了清理變量之外,您也將很好地驗證輸入。 也可以使用其他專門的清洗方法,例如,對於數字字段調用intval
或floatval
,因為其他字符串固定方法將是不必要的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.