2012-04-24 256 views
1

我有這個頁面從html表格插入數據。沒有錯誤顯示,但也沒有插入數據。這裏是我給出的代碼。mysql插入查詢不起作用

<?php 
mysql_connect("localhost","root",""); 
mysql_select_db("hcp"); 

$queryUserType = "select * from user_type"; 
$resultUserType = mysql_query($queryUserType) or die(mysql_error()); 

$queryTitle = "select * from name_titles"; 
$resultTitle = mysql_query($queryTitle) or die(mysql_error()); 

$time = time(); 
$date = date("d-m-y"); 
$nowDateTime=$time.$date; 

if($_REQUEST['btnUserSubmit']) 
{ 
    $queryInsertUser="INSERT INTO users (`title_id`, `first_name`, `last_name`, `email`, `utid`, `residence_address1`, `residence_address2`, `residence_city`, `residence_state`, `residence_country`, `residence_zipcode`, `phone_no`, `username`, `password`, `created`, `date_of_birth`, `gender`) VALUES ('".mysql_real_escape_string($_REQUEST['$rowTitle[0]'])."', '".mysql_real_escape_string($_REQUEST['txtFirstName'])."', '".mysql_real_escape_string($_REQUEST['txtLastName'])."', '".mysql_real_escape_string($_REQUEST['txtEmail'])."', '".mysql_real_escape_string($_REQUEST['rowUserType[0]'])."', '".mysql_real_escape_string($_REQUEST['txtAddressLine1'])."', '".mysql_real_escape_string($_REQUEST['txtAddressLine2'])."', '".mysql_real_escape_string($_REQUEST['txtCity'])."', '" .mysql_real_escape_string($_REQUEST['txtState'])."', '".mysql_real_escape_string($_REQUEST['txtCountry'])."', '".mysql_real_escape_string($_REQUEST['txtPhone'])."', '".mysql_real_escape_string($_REQUEST['txtUserName'])."', '".mysql_real_escape_string($_REQUEST['txtUserPassword'])."', '".$nowDateTime."', '".mysql_real_escape_string($_REQUEST['txtdateofbirth'])."', '".mysql_real_escape_string($_REQUEST['rdGender'])."');"; 

$resultinsert=mysql_query($queryInsertUser) or die(mysql_error()); 
} 
?> 

我沒有任何問題,頁面重定向。表單驗證仍然存在。在這個表中,只有email,utid,username,password這四個字段都不是NULL。其餘都是空允許的。

+1

會幫助我們/您在INSERT請求已被填充後打印其內容。 – 2012-04-24 17:14:01

+1

將它放置在腳本'error_reporting(1);'的頂部並檢查它是否給出任何錯誤 – 2012-04-24 17:14:19

+2

我的頭部只是試圖讀取它而感到痛苦。 – luckytaxi 2012-04-24 17:17:52

回答

7

正如你所看到的,你缺場11,見下圖:

<?php 
$QueryCol = array('title_id',    // Field 1 
        'first_name',   // Field 2 
        'last_name',   // Field 3 
        'email',    // Field 4 
        'utid',     // Field 5 
        'residence_address1', // Field 6 
        'residence_address2', // Field 7 
        'residence_city',  // Field 8 
        'residence_state',  // Field 9 
        'residence_country', // Field 10 
        'residence_zipcode', // Field 11 
        'phone_no',    // Field 12 
        'username',    // Field 13 
        'password',    // Field 14 
        'created',    // Field 15 
        'date_of_birth',  // Field 16 
        'gender');    // Field 17 

$QueryData = array((isset($_REQUEST[$rowTitle[0]])  ? $_REQUEST[$rowTitle[0]]   : null), // Field 1 
        (isset($_REQUEST['txtFirstName']) ? $_REQUEST['txtFirstName']  : null), // Field 2 
        (isset($_REQUEST['txtLastName'])  ? $_REQUEST['txtLastName']   : null), // Field 3 
        (isset($_REQUEST['txtEmail'])  ? $_REQUEST['txtEmail']   : null), // Field 4 
        (isset($_REQUEST[$rowUserType[0]]) ? $_REQUEST[$rowUserType[0]]  : null), // Field 5 
        (isset($_REQUEST['txtAddressLine1']) ? $_REQUEST['txtAddressLine1']  : null), // Field 6 
        (isset($_REQUEST['txtAddressLine2']) ? $_REQUEST['txtAddressLine2']  : null), // Field 7 
        (isset($_REQUEST['txtCity'])   ? $_REQUEST['txtCity']    : null), // Field 8 
        (isset($_REQUEST['txtState'])  ? $_REQUEST['txtState']   : null), // Field 9 
        (isset($_REQUEST['txtCountry'])  ? $_REQUEST['txtCountry']   : null), // Field 10 
                             // Field 11 
        (isset($_REQUEST['txtPhone'])  ? $_REQUEST['txtPhone']   : null), // Field 12 
        (isset($_REQUEST['txtUserName'])  ? $_REQUEST['txtUserName']   : null), // Field 13 
        (isset($_REQUEST['txtUserPassword']) ? $_REQUEST['txtUserPassword']  : null), // Field 14 
        $nowDateTime,                  // Field 15 
        (isset($_REQUEST['txtdateofbirth']) ? $_REQUEST['txtdateofbirth']  : null), // Field 16 
        (isset($_REQUEST['rdGender'])  ? $_REQUEST['rdGender']   : null); // Field 17 

foreach($QueryData as $Key => $Value){ 
    $QueryData[$Key] = mysql_real_escape_string($Value); 
} 

$QueryInsertUser = 'INSERT INTO users (`'.implode('`, `', $QueryCol).'`)'. 
         'VALUES ("'.implode('", "', $QueryData).'")'; 
$resultinsert  = mysql_query($QueryInsertUser) 
         or die(mysql_error()); 

?> 

提示:

  1. 停止使用$ _REQUEST。可以使用$ _GET或$ _POST
  2. 避免像你一樣使用大型線條。您無法快速找到錯誤。
  3. 使用數組編寫較少的代碼。
  4. 使用array_walk函數將函數映射到數組中的每個條目。
  5. 使您的代碼甜蜜的閱讀,更容易調試
  6. 變量一樣,$_REQUEST['$Blabla']不會起作用,因爲使用「解析變量不工作,請使用」,而不是像$_REQUEST["{$Blabla}"]。但是,避免因爲PHP需要解析意味着更多的權力馬需要,使用$_REQUEST[$Blabla]代替
  7. 在開發,我建議以下行的腳本的頂部:。

    error_reporting(-1); 
    ini_set('display_errors', 'On'); 
    

    它會顯示所有的錯誤連一個都沒有真的是錯誤,它會幫助你寫出完美的代碼以及可在任何地方使用的標準代碼。

  8. 對於每個$ _POST,$ _GET,$ _REQUEST,$ _FILES等使用函數isset,因爲它會產生錯誤。請記住,每個錯誤加載頁面的時間加倍。試着創建一個頁面,讓我們說10000行沒有錯誤,平均可能是0.01秒。每行有錯誤,可能需要0.5秒。注意一下。
+0

鷹的眼睛=) – Gerep 2012-04-24 17:37:42

+0

@Gerep謝謝,我只是花時間去做它。默認情況下,這應該在編寫代碼時完成,因此調試非常簡單,而且速度更快。此外,你可以避免像失蹤這樣的愚蠢錯誤。 )(或者別的什麼),但是,我會推薦使用PDO,寫得更安全,更快速,也需要更少的調試。 – 2012-04-24 17:46:41

+0

謝謝@DavidBélanger。你的每個提示都是對我的教訓,但是我沒有完成,警告:mysql_real_escape_string()期望參數2是資源,在第59行中的C:\ wamp \ www \ HCP \ login.php中給出的整數「? – 2012-04-24 18:48:42

0

具有u試圖改變

if($_REQUEST['btnUserSubmit']) 

if (isset($_POST['btnUserSubmit'])) 

編輯!

我想想也是,在你的INSERT查詢結束

'".mysql_real_escape_string($_REQUEST['rdGender'])."');"; 

U可以替換爲:

'".mysql_real_escape_string($_REQUEST['rdGender'])."')"; // Lose the ; after "') 

你爲什麼不只是使用$ _ POST [];而不是$ _REQUEST []; ?

+0

The;最後是可選的。請參閱:http://dev.mysql.com/doc/refman/5.0/en/entering-queries.html'命令通常由一個SQL語句和一個分號組成。 (有些例外可以省略分號,前面提到的QUIT就是其中之一,以後我們會去找其他人。)# – 2012-04-24 17:59:35

0

嘗試消除在生產線末端的第一個分號,所以它讀取這樣:

...($_REQUEST['rdGender'])."')";