2013-03-13 58 views
0

我正嘗試使用會話中的數據更新我的事務表中的列。我有存儲會話數據如下將會話數據發佈到我的Mysql數據庫的列中

$session_mem_id = $_SESSION['mem_id']; 
$member_data = member_data($session_mem_id, 'mem_id', 'mem_email', 'mem_password', 'mem_address', 'mem_city', 'mem_postcode', 'mem_county', 'mem_country', 'mem_first_name', 'mem_last_name', 'password_recover', 'allow_email', 'admin', 'mem_tel'); 

而且我用這個數據如下

function createTransaction($member_data){ 
    // Insert into the transactions table 
    $query1 = mysql_query("INSERT INTO `transactions` (mem_id, OrderDate, ship_phone, ship_address, ship_city, ship_county, ship_postcode, ship_country) VALUES('{$_SESSION['mem_id']}', NOW(), '{$member_data['mem_tel']}', '{$member_data['mem_address']}', '{$member_data['mem_city']}', '{$member_data['mem_county']}', '{$member_data['mem_postcode']}', '{$member_data['mem_country']}')") or die(mysql_error()); 
} 

更新我的表我沒有得到一個錯誤,但是唯一的列,其更新在我的表mem_id,orderdate and OrderId作爲其auto_increment。沒有數據分析存儲在我的$member_data 如果我的var_dump($ member_data)我得到以下

array(14) { ["mem_id"]=> string(2) "11" ["mem_email"]=> string(26) "[email protected]" ["mem_password"]=> string(8) "password" ["mem_address"]=> string(16) "54 bvcbv drive" ["mem_city"]=> string(9) "Mggbone" ["mem_postcode"]=> string(8) "gb14 4gb" ["mem_county"]=> string(4) "Kent" ["mem_country"]=> string(14) "United Kingdom" ["mem_first_name"]=> string(4) "Bob" ["mem_last_name"]=> string(12) "Smith" ["password_recover"]=> string(1) "0" ["allow_email"]=> string(1) "1" ["admin"]=> string(1) "1" ["mem_tel"]=> string(11) "07900186785" } 

我member_data功能是 功能member_data($ mem_id){$ 數據=陣列(); $ mem_id =(int)$ mem_id;

$func_num_args = func_num_args(); 
$func_get_args = func_get_args(); 

if($func_num_args > 1) { 
    unset ($func_get_args[0]); 

    $fields = '`' . implode('`, `', $func_get_args) . '`'; 
    $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM members WHERE mem_id = '$mem_id'")); 

    return $data; 
} 
} 
+1

你不應該使用mysql_query。它已被棄用。看看[PHP的PDO對象](http://php.net/manual/en/pdo.prepared-statements.php) – christopher 2013-03-13 10:44:01

+0

@ChrisCooney麻煩是我新來的PHP和試圖學習,我正在拼湊的教程一起使用mysql,所以我不知道如何使用PDO – jhetheringt7 2013-03-13 10:45:27

+0

'$ member_data'如何看起來像?你確定它是一個數組嗎?你能證明它的價值嗎? – Ander2 2013-03-13 10:48:17

回答

1

問題可能是會話尚未啓動。

在這種情況下:

session_start();

的事情之前已經輸出將解決這個問題。

嘗試輸出$_SESSION['mem_id'];的內容,然後將其存儲在數據庫中以確保其已設置。

此外,請確保在將變量存儲到數據庫之前將其轉義。

所以,你的變量賦值應該是這樣的:

$session_mem_id = mysql_real_escape_string($_SESSION['mem_id']);

這是對一個SQL injection attack安全預防措施。

我希望這會有所幫助。

+0

mem_id已設置並使用正確的mem_id更新數據庫。它使用$ member_data的值不會更新 – jhetheringt7 2013-03-13 10:56:26

0

我會嘗試重寫查詢是這樣的:

$query = sprintf("INSERT INTO `transactions` (mem_id, OrderDate, ship_phone, ship_address, ship_city, ship_county, ship_postcode, ship_country) VALUES('%s','%s','%s','%s','%s','%s','%s','%s')", $_SESSION['mem_id'], NOW(), $member_data['mem_tel'], $member_data['mem_address'], $member_data['mem_city'], $member_data['mem_county'], $member_data['mem_postcode'], $member_data['mem_country']); 
    $query1 = mysql_query($query) or die(mysql_error()); 

您還可以插入符合$query begining後echo,並檢查您的查詢語句是正確的。

相關問題