2013-11-21 83 views
0

的先生簡單的PHP形式,誤差與MySQL

我是從我的PHP腳本,可能是查詢得到一個錯誤,但我想不通這是怎麼回事。我可以連接數據庫,但仍然會出現de「echo ERROR」行的錯誤。

有人知道我的代碼有什麼問題嗎?我感謝任何幫助!我花了幾個小時來解決這個問題,但是一無所獲。

HTML表單

<form action="insert-info.php" method="post"> 
<input class="form1" type="text" value="TEXT ONE" name="textone" onfocus="if (this.value=='NTEXT ONE') this.value='';"/> 
<input class="form1" type="text" value="TEXT TWO" name="texttwo" onfocus="if (this.value=='TEXT TWO') this.value='';"/> 
<input class="form2" type="text" value="TEXT THREE" name="textthree" onfocus="if (this.value=='TEXT THREE') this.value='';"/> 
</form> 

數據庫連接,並插入

<?php 

$host="localhost"; // Host name 
$username="***"; // Mysql username 
$password="***"; // Mysql password 
$db_name="***"; // Database name 
$tbl_name="insertinfo"; // Table name 

// Connect to server and select database. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// Get values from form 
$textone=$_POST['textone']; 
$texttwo=$_POST['texttwo']; 
$textthree=$_POST['textthree']; 

// Insert data into mysql 
$sql="INSERT INTO $tbl_name('textone', 'texttwo', 'textthree') VALUES ('$textone', '$texttwo', '$textthree')"; 
$result=mysql_query($sql); 

// if successfully insert data into database, displays message "Successful". 
if($result){ 
echo "Successful"; 
echo "<br />"; 
echo "<a href='insert.php'>Back to main page</a>"; 
} 

else { 
echo "ERROR"; 
} 
?> 

<?php 
// close connection 
mysql_close(); 
?> 

數據庫結構

# Type     Collation Null   Pattern  Extra 
1 id int(4)       None   (none)  AUTO_INCREMENT 
2 textone varchar(50)  utf8_bin None   (none) 
3 texttwo varchar(50)  utf8_bin None   (none) 
4 textthree varchar(50) utf8_bin None   (none) 
+1

你正在查詢開放給sql注入。請學習使用'prepared statements'或'mysqli'而不是mysql。 – NoobEditor

回答

3

看起來問題只是您的INSERT查詢的列名稱。你不需要單引號。

$sql="INSERT INTO $tbl_name(textone, texttwo, textthree) VALUES ('$textone', '$texttwo', '$textthree')"; 

這應該工作。

編輯:echo_Me和Mayank的警告和建議是必要考慮的生產代碼!

+0

謝謝!我解決了這個問題。我現在將與Mayank的提示一起工作,即使該系統不會在線(僅供內部使用)。 – Anna

+0

@Anna太棒了!試驗總是很有趣,但是在生產系統時要記住保持警惕(不要丟失任何重要數據!)。PDO和MySQLi可以幫助您避免常見的錯誤,併爲舊的MySQL驅動程序提供許多便利。 – russellc

+0

我很感謝你的建議,Russellc!我會嘗試使用Vipin Soni在這裏發佈的代碼來實現。 – Anna

0

交流你沒有選擇數據庫和連接變量。因爲你正在使用字符串。你需要刪除這樣的引號

mysql_connect($host, $username, $password)or die("cannot connect"); 
    mysql_select_db($db_name)or die("cannot select DB"); 

有一些事情需要在代碼中修復。

  • 轉義您的POST變量。

  • 更改爲PDO或MYSQLI。

  • 通過回顯系統錯誤來追蹤錯誤。

0

使用mysql_error()打印錯誤消息。它會告訴你更多關於查詢失敗的原因。請注意,此功能已棄用。我建議使用mysqli或PDO數據庫類。

0
$sql=sprintf(
"INSERT INTO 
     $tbl_name(textone, texttwo, textthree) 
     VALUES ('%s','%s','%s')", 
mysql_real_escape_string($textone), 
mysql_real_escape_string($texttwo), 
mysql_real_escape_string($textthree) 
); 
+0

謝謝!我會試着用這個。 – Anna

0

嘗試像這樣

沒有必要在INSERT查詢給columnnames' '

$sql="INSERT INTO $tbl_name(textone,texttwo,textthree) VALUES ('$textone', '$texttwo', '$textthree')"; 
    $result=mysql_query($sql);