2011-11-15 42 views
0

我開發一個Web應用程序,允許用戶通過Web表單條目添加到MySQL數據庫MySQL的條目。 Web表單的帖子在同一個頁面,一些PHP代碼捕獲數據並將其發送到MySQL。無論出於何種原因,任何事情都不會讓它成爲MySQL。這是我的代碼至今不工作:添加從PHP網頁

<?php 
    include("config.inc.php"); 
    $Name=$_POST['AddName']; 
    $Group=$_POST['AddGroup']; 
    $Grade=$_POST['AddGrade']; 
    $Position=$_POST['AddPosition']; 
    $Email=$_POST['AddEmail']; 
    $HomeAddress=$_POST['AddHomeAddress']; 
    $City=$_POST['AddCity']; 
    $State="SC"; 
    $Zip=$_POST['AddZIP']; 
    $CellPhone=$_POST['AddCellNumber']; 
    $HomePhone=$_POST['AddHomeNumber']; 
    $FirstPeriod=$_POST['AddFirstPeriod']; 
    $SecondPeriod=$_POST['AddSecondPeriod']; 
    $ThirdPeriod=$_POST['AddThirdPeriod']; 
    $FourthPeriod=$_POST['AddFourthPeriod']; 
    $FifthPeriod=$_POST['AddFifthPeriod']; 
    $SixthPeriod=$_POST['AddSixthPeriod']; 
    $SeventhPeriod=$_POST['AddSeventhPeriod']; 
    $Homeroom=$_POST['AddHomeroom']; 
    $dbpassword=$_POST['AddPassword']; 

    $con = mysql_connect("127.0.0.1","$username","******"); 
    if (!$con) 
     { 
     die(); 
     }   

    mysql_select_db("$database", $con); 
    $sql="INSERT INTO names  (Name,Grp,Grade,Position,Email,HomeAddress,City,State,Zip,CellPhone,HomePhone,FirstPeriod,SecondPeriod,ThirdPeriod,FourthPeriod,FifthPeriod,SixthPeriod,SeventhPeriod,Homeroom) 
    VALUES('$Name','$Group','$Grade','$Position','$Email','$HomeAddress,'$City','$State','$Zip','$CellPhone','$HomePhone','$FirstPeriod','$SecondPeriod','$ThirdPeriod','$FourthPeriod','$FifthPeriod','$SixthPeriod','$SeventhPeriod','$Homeroom')"; 

    if (!mysql_query($sql,$con)) 
     { 
     die(); 
     } 
    echo "1 record added"; 

    mysql_close($con) 
    ?> 
      </body> 
    </html> 
+5

建議:羅斯閱讀有關SQL注入 –

+7

二忠告:永遠不會離開密碼,當您發佈的代碼! –

+0

用你的'die()'迴應一些錯誤信息,你可能會得到一個線索是什麼問題...... – weltraumpirat

回答

2

試試這個,看看它說:

if (!mysql_query($sql,$con)) 
{ 
    die(mysql_error()); 
} 
+0

這幫了很大忙。我的SQL字符串有問題。 '你的SQL語法有錯誤;檢查對應於您的MySQL服務器版本的手冊,以在'City','SC','ZIP','Cell','Home','First','Second','Third','第四','第五','第六''第二行' – Ross

+1

您的''HomeAddress'缺少單引號。應該是''HomeAddress'' – budwiser

+0

即使修補程序(除了excape_string)仍然會出現下面的錯誤。 – Ross

0

mysql_close($con)應該在最後一個分號。

檢查你的日誌中的錯誤。

使用mysql_real_escape_string

+0

分號沒有解決它。奇怪的是,日誌中沒有任何MySQL錯誤與此有關。我還應該嘗試什麼? – Ross

+0

我剛剛嘗試了轉義字符串,並殺死了表單。我的錯誤日誌充滿了現在這樣: '[星期二11月15日19時05分36秒2011] [錯誤] [客戶XX.XX.XX.XX] PHP公告:未定義的變量:AddSixthPeriod在/ var/WWW/ /directory/dbadd2.php在線25上,引用者:HTTP:// /目錄/ dbadd.php' '[星期二年11月15 19點05分36秒2011] [錯誤] [客戶端XX.XX.XX.XX] PHP Warning:mysql_real_escape_string():拒絕用戶''@'localhost'(使用密碼:NO)/ var/www/ /directory/dbadd2.php第25行,引用者:http:// /目錄/ dbadd.php' – Ross

1

嘗試插入echo mysql_error();。這應該給你至少開始的地方到您的查詢是不正確。

0

PHP隱藏的錯誤。

print_r(mysql_fetch_array(mysql_query("SHOW WARNINGS", $con)));

:要進行調試,通過將這兩行作爲第一線的<?php標籤

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

情況下也錯誤是在MySQL中,你可以做內開始print_r(mysql_fetch_array(mysql_query("SHOW ERRORS", $con)));

後直接MySQL查詢您認爲可能已失敗。

0

改變你的數據庫選擇到

mysql_select_db("database name") 

mysql_select_db($database); 

您嘗試選擇指定的數據庫「$數據庫」,在變量美元符號的字符串,而不是名字。 也可以使用

mysql_real_escape_string($ sql)來轉義這些變量(避免sql注入),你可以在其他註釋中找到它的鏈接。

+0

感謝您的escape_string提示。會改變它。 – Ross

+0

而$數據庫是一個從config.inc.php中取得的變量。 – Ross

+0

刪除引號 mysql_select_db($ database); –

0

die(mysql_error()); 將解決它。 也看看逃跑。注入當前代碼很容易。

如果你不想逃跑(我不知道你什麼時候可以這樣做),那麼你可以使用$_POST而不是分配給變量並使用變量。

+0

試過逃跑,但得到了上面看到的錯誤消息。 – Ross

0

變化

$sql="INSERT INTO names  (Name,Grp,Grade,Position,Email,HomeAddress,City,State,Zip,CellPhone,HomePhone,FirstPeriod,SecondPeriod,ThirdPeriod,FourthPeriod,FifthPeriod,SixthPeriod,SeventhPeriod,Homeroom) 
    VALUES('$Name','$Group','$Grade','$Position','$Email','$HomeAddress,'$City','$State','$Zip','$CellPhone','$HomePhone','$FirstPeriod','$SecondPeriod','$ThirdPeriod','$FourthPeriod','$FifthPeriod','$SixthPeriod','$SeventhPeriod','$Homeroom')"; 

$sql="INSERT INTO names  (Name,Grp,Grade,Position,Email,HomeAddress,City,State,Zip,CellPhone,HomePhone,FirstPeriod,SecondPeriod,ThirdPeriod,FourthPeriod,FifthPeriod,SixthPeriod,SeventhPeriod,Homeroom) 
    VALUES('$Name','$Group','$Grade','$Position','$Email','$HomeAddress','$City','$State','$Zip','$CellPhone','$HomePhone','$FirstPeriod','$SecondPeriod','$ThirdPeriod','$FourthPeriod','$FifthPeriod','$SixthPeriod','$SeventhPeriod','$Homeroom')"; 
+0

注意$ homeAddress之後的額外內容。 – encodes

+0

你有沒有試過上面的代碼,它修復了問題中的問題 – encodes