2013-05-31 85 views
0

我有以下代碼在提交時試圖追上多達15個條目,但它僅捕獲數據庫中的第一個條目,並且收到以下錯誤消息:PHP Array只寫第一條記錄到MySQL數據庫

你的SQL語法有錯誤;檢查對應於你的MySQL服務器版本在第1行

<?php 

for($i = 0; $i < 15; $i++) 
{ 
$tournament = $_POST['tournament']; 
$agegroup = $_POST['agegroup']; 
$teamname = $_POST['teamname']; 
$coach = $_POST['coach']; 
$coachaau = $_POST['coachaau']; 
$phone = $_POST['phone']; 
$email = $_POST['email']; 
$astcoach = $_POST['astcoach']; 
$astno = $_POST['astno']; 
$astphone = $_POST['astphone']; 
$astemail = $_POST['astemail']; 
$manager = $_POST['manager']; 
$managerno = $_POST['managerno']; 
$managerphone = $_POST['managerphone']; 
$manageremail = $_POST['manageremail']; 
$name = $_POST['name'][$i]; 
$grade = $_POST['grade'][$i]; 
$bday = $_POST['bday'][$i]; 
$aauno = $_POST['aauno'][$i]; 

if(empty($name) || empty($grade) || empty ($bday) || empty ($aauno)) 
{ 
echo ' '; 
} 
elseif(

$result = mysql_query("INSERT INTO roster (tournament, agegroup, teamname, coach, coachaau, phone, email, astcoach, astno, astphone, astemail, manager, managerno, managerphone, manageremail, name, grade, bday, aauno) 
    VALUES ( 
'". mysql_real_escape_string($tournament) . "', 
'". mysql_real_escape_string($agegroup) . "', 
'". mysql_real_escape_string($teamname) . "', 
'". mysql_real_escape_string($coach) . "', 
'". mysql_real_escape_string($coachaau) . "', 
'". mysql_real_escape_string($phone) . "', 
'". mysql_real_escape_string($email) . "', 
'". mysql_real_escape_string($astcoach) . "', 
'". mysql_real_escape_string($astno) . "', 
'". mysql_real_escape_string($astphone) . "', 
'". mysql_real_escape_string($astemail) . "', 
'". mysql_real_escape_string($manager) . "', 
'". mysql_real_escape_string($managerno) . "', 
'". mysql_real_escape_string($managerphone) . "', 
'". mysql_real_escape_string($manageremail) . "', 
'". mysql_real_escape_string($name) . "', 
'". mysql_real_escape_string($grade) . "', 
'". mysql_real_escape_string($bday) . "', 
'". mysql_real_escape_string($aauno) . "');")); 
@mysql_query($result)or die(mysql_error()); 
}; 
?> 
+0

您的for循環完全沒用,因爲數據總是相同的。例如。 $ _POST ['錦標賽']是同等價值的15倍。 – djot

+0

請停止使用'@'來抑制錯誤。 – Kermit

回答

1

的問題用接近「1」正確的語法手冊是,你有兩個mysql_query通話這裏,雖然第一個在工作有效的查詢字符串,第二個 - @mysql_query($result)處理其結果 - 即字符串'1'。但你實際上不需要這樣的調用,因爲第一個查詢應該已經將數據發送到數據庫。

速戰速決將檢查$result本身(而不是@mysql_query($result)or die(mysql_error());線):

if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

說了這麼多,我想提醒你的是mysql_query(作爲整個家庭的mysql_功能)已被棄用。如果您使用PDO或MySQLi,則可以使用單個準備好的語句,並在每次迭代時填入新數據。

此外(對@djot的提及)在循環之前一次又一次從$ _POST中提取非數組變量並不是一種有效的方法,而是僅僅執行一次。這樣(如果你留在mysql),你也不必每次都逃脫它們。其實,我會在這裏使用類似的東西:

$fieldsToInsert = array('tournament', 'agegroup', 'teamname', ...); 
$valuesToInsert = []; 
foreach ($fieldsToInsert as $field) { 
    if (! isset($_POST[$field])) { 
    // actually it's not clear what to do here: 
    // should we signal an error immediately with, or use some fallback value 
    } 
    else { 
    $valuesToInsert[$field] = mysql_real_escape_string($_POST[$field]); 
    } 
} 

這樣你就可以簡化創建查詢的代碼。

+0

啊哈,謝謝。我剛剛刪除了第二個mysql查詢命令。 – user2233333

相關問題