我試圖將表單數據插入MySQL 4.1數據庫。我遇到的問題是包含空格的表單字段在插入前被截斷。 POST變量是完整的,空格和全部。只是在某處被切斷。例如,「南太浩湖」簡稱爲「南」。帶破折號的郵政編碼和電話號碼也很好。我正在使用的網站由Yahoo Small Business託管,他們仍在使用MySQL 4.1。我不知道這是否是問題,但我確實知道我從未遇到過使用MySQL 5+的問題。用戶填寫表單以添加新成員。一旦提交,表單數據發佈到另一個頁面進行處理:用空格向mysql插入表單值4.1
$k = array();
$v = array();
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$result = mysql_query("SELECT * FROM members WHERE first_name='$first_name' AND last_name='$last_name'");
if(mysql_num_rows($result)>0){
mysql_free_result($result);
exit("Duplicate User in Database");
}
mysql_free_result($result);
array_pop($_POST);//Don't need the Submit value
foreach($_POST as $key=>$value){
array_push($k, "$key");
array_push($v, "$value");
}
$fields = implode(", ", $k);
$values = array();
foreach($v as $key=>$value){
array_push($values, '"'.$value.'"');
}
$values_string = implode(", ", $values);
$result = mysql_query("INSERT INTO members($fields) VALUES($values_string)");
我敢肯定有這樣做的更好的辦法,但我仍然在路上學習曲線。請指出我思想中的任何明顯的缺陷。 任何建議,非常感謝。
編輯:在MySQL中的字段類型是正確的,足夠長。例如,City的字段被設置爲VARCHAR(30)。
謝謝了, 馬克
爲什麼你使用一個危險的舊的mysql版本? – 2011-10-03 02:30:37
我不知道完整的答案。爲了讓你在調試時提前打開它,試着打印你的INSERT語句的內容以確保它真的是你想要的:'echo「INSERT INTO members($ fields)VALUES($ values_string)」;' – Mansour
有些人會發布此代碼是如何隨時打開SQL注入的,哦,那裏是:-) – 2011-10-03 02:39:58