2012-08-07 113 views
0

我正在嘗試使用html和php來更新mysql數據庫。數據庫更新(自動增量)鍵,但不會將任何字符串添加到值中。我已經搜索過類似問題的人,但因爲他們的代碼與我的不同,我無法理解它(我是一個使用PHP和MySQL的noob)我認爲我的問題是,我使用html來獲取值的方式,但我可以錯無法使用html和php更新mysql中的值

<form action=submitform.php method=GET> 
    Name:<input type="text" name="cuName" size=20 maxlength=20><br>  
    Password:<input type="password" name="password" size=20 maxlength=45><br> 
    Account:<input type="text" name="account" size=20 maxlength=45><br> 
    Phone:<input type="tel" name="phone" size=10 maxlength=10><br> 
    Email:<input type="text" name="email" size=20 maxlength=45><br> 
<input type=submit> 
</form> 

和我的PHP是

<?php 
     mysql_connect(localhost, myUsername, "myPassword"); 
     mysql_select_db(myDatabaseName); 
     mysql_query("INSERT INTO Customer (cuName, password, 
         account, phone, email) 
        Values('$cuName', '$password', '$account', 
          '$phone', '$email')"); 
     echo $cuName ." thank you for reserving!"; 
     print ($cuName); 
    ?> 

在此先感謝您的幫助

回答

1

你的代碼是依靠REGISTER_GLOBALS被打開;它出於安全原因通常關閉。

您應該將$cuName替換爲$_GET['cuName']以獲取從表單發送的值。

此外,你應該轉義任何值到數據庫,否則你可能會暴露自己的SQL注入漏洞。

清理代碼對於這兩種情況,結果是這樣的:

<?php 
     if (!mysql_connect(localhost, myUsername, "myPassword")) { 
       print 'There was an error connecting to the database'.mysql_error(); 
       exit(); 
     } 
     if (!mysql_select_db(myDatabaseName)) { 
       print 'Could not select db. The error was: '.mysql_error(); 
       exit(); 
     } 
     $query = "INSERT INTO Customer (`cuName`, `password`, `account`,`phone`,`email`)"; 
     $query .= "VALUES ("; 
     $query .= "'".mysql_real_escape_string($_GET['cuName'])."','"; 
     $query .= mysql_real_escape_string($_GET['password'])."','"; 
     $query .= mysql_real_escape_string($_GET['phone'])."','"; 
     $query .= mysql_real_escape_string($_GET['email'])."'"; 

     if (!mysql_query($query)) { 
      print 'There was an error inserting '.$query.'. Error was '.mysql_error(); 
     } else { 
      echo $_GET['cuName']." thank you for reserving!"; 
     } 
     print $_GET['cuName']; 
    ?> 

我還添加了一些錯誤檢查。你應該總是檢查依賴外部系統(比如數據庫)的函數的結果,因爲你永遠不知道數據庫的狀態是什麼(它可能是down,not working等等)。所以你應該總是檢查並打印任何錯誤消息。

+0

非常感謝,我也會試試。 – aldito2 2012-08-07 23:04:06

0

你不定義任何的GET值的任何地方。 $ cuName等沒有定義。

每個值都需要關聯到$ _GET。 IE,

$cuName = $_GET['cuName']

但你還需要確保你不插入尚未清洗,以防止SQL注入數據。這方面的一個例子是:

$cuName = mysql_real_escape_string($_GET['cuName']);

所以,試試這個:

<?php 
     mysql_connect(localhost, myUsername, "myPassword"); 
     mysql_select_db(myDatabaseName); 

     //Define Variables 
     $cuName = mysql_real_escape_string($_GET['cuName']); 
     $password = mysql_real_escape_string($_GET['password']); 
     $account = mysql_real_escape_string($_GET['account']); 
     $phone = mysql_real_escape_string($_GET['phone']); 
     $email = mysql_real_escape_string($_GET['email']); 

     mysql_query("INSERT INTO Customer (cuName, password, 
         account, phone, email) 
        Values('$cuName', '$password', '$account', 
          '$phone', '$email')") or die (mysql_error()); 
     echo $cuName ." thank you for reserving!"; 
     print ($cuName); 
    ?> 
+2

不要忘記強制性使用mysqli_ *評論。 – gcochard 2012-08-07 22:57:31

+0

我只是試着告訴我,但由於某種原因,我的數據庫正在獲取更新,但沒有名稱,密碼等,它只是增加了我的自動增量鍵。 – aldito2 2012-08-07 23:02:29

+0

你試過我更新的代碼嗎? – 2012-08-07 23:03:34

0

最好使用:

$cuname = $_GET['cuname']; 

這樣.... 因爲你的形式方法是 「GET」,我的建議是POST比GET數據。