2012-03-28 70 views
2

在表'用戶'中註冊我的第一個用戶時,id與鏈接表中的user_id相同,爲1(語言)。然而,當我註冊的其他用戶(ID2中的用戶)的語言USER_ID仍爲1請參見SQL:外鍵無法正確鏈接

CREATE TABLE `language` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`user_id` int(11) NOT NULL, 
`native` varchar(30) NOT NULL, 
`other` varchar(30) NOT NULL, 
`other_list` varchar(9) NOT NULL, 
`other_read` varchar(9) NOT NULL, 
`other_spokint` varchar(9) NOT NULL, 
`other_spokprod` varchar(9) NOT NULL, 
`other_writ` varchar(9) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `user_id` (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; 


CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `md5_id` varchar(200) NOT NULL, 
    `full_name` tinytext CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    `user_name` varchar(10) NOT NULL, 
    `user_email` varchar(30) NOT NULL, 
    `user_level` tinyint(4) NOT NULL DEFAULT '1', 
    `pwd` varchar(220) NOT NULL, 
    `nationality` varchar(30) NOT NULL, 
    `department` varchar(20) NOT NULL, 
    `birthday` date NOT NULL, 
    `date` date NOT NULL DEFAULT '0000-00-00', 
    `users_ip` varchar(200) NOT NULL, 
    `activation_code` int(10) NOT NULL DEFAULT '0', 
    `banned` int(1) NOT NULL, 
    `ckey` varchar(200) NOT NULL, 
    `ctime` varchar(220) NOT NULL, 
    `approved` int(1) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 

這是我的PHP代碼:

if(empty($_SESSION['$user_id'])) { // user not logged in; redirect to somewhere else } 
if (!empty($_POST['doLanguage']) && $_POST['doLanguage'] == 'Submit') 
{ 
$result = mysql_query("SELECT `id` FROM users WHERE `banned` = '0'") or 
die (mysql_error()); 


list($id) = mysql_fetch_row($result); 

session_start(); 
$_SESSION['user_id']= $id; 

sql_insert = "INSERT into `language` 
(`user_id`,`native`,`other`,`other_list`,`other_read`, `other_spokint` 
,`other_spokprod`,`other_writ` ) 
VALUES 
('$id','$native','$other','$other_list','$other_read','$other_spokint', 
'$other_spokprod','$other_writ') "; 

mysql_query($sql_insert,$link) or die("Insertion Failed:" . mysql_error());  
} 

header("Location: myaccount.php?id=' . $_SESSION[user_id] .'"); 
exit(); 

希望得到任何幫助!

+3

$ id在哪裏填充?或者是這條線向後寫:「$ _SESSION ['user_id'] = $ id;」 – Yamikuronue 2012-03-28 16:06:24

+0

@Yamikuronue - 它來自與獲取結果集一起工作的'list'構造。 – 2012-03-28 16:32:01

+0

@Yamikuronue我試圖寫它的另一種方式,但仍然有user_id 1的問題,當它應該是2.thanks – user1296762 2012-03-28 16:38:24

回答

1

我想這是因爲你最初的選擇查詢是選擇沒有被禁止

所有用戶因此需要更改查詢由新用戶過濾:

"SELECT `id` FROM users WHERE `banned` = '0' and id=" . $_SESSION['$user_id']; 

之所以USER_ID字段不斷填充爲1,因爲mysql_fetch_row獲得了第一個記錄,即用戶標識1.

因此,如果您按新用戶過濾它,mysql_fetch_row應該獲得新用戶的標識。

編輯

我只是在看代碼再次,它看起來像你沒有保存在PHP的用戶ID插入後,讓你的$ _SESSION user_id是空。

所以我上面的例子不會工作。而不是上述查詢,使用以下函數來獲取您新創建的用戶的ID。在運行插入查詢後調用此函數。該功能將獲得新創建的用戶。

mysql_insert_id()

http://php.net/manual/en/function.mysql-insert-id.php

EDIT 2

OK,既然mysql_insert_id()爲您沒有工作,也許你可以嘗試以下。我只是通過id desc來改變你的select查詢。

$result = mysql_query("SELECT `id` FROM users WHERE `banned` = '0' order by id desc") 

只是說明一下,這可能不是最好的解決方案。但在低流量的網站上應該沒問題。爲了使查詢更精確一點,您需要根據用戶名或電子郵件等唯一字段來搜索用戶標識。這將確保你得到正確的身份證。

編輯3 以下是檢查用戶電子郵件的示例。這只是mysql的查詢,你必須調整這個php。對不起,我現在正在上課。

"SELECT `id` FROM users WHERE `banned` = '0' and email='[email protected]' limit 1 
+0

添加mysql_insert_id()沒有好運。仍然user_id 1 :(我加入後 - mysql_query($ sql_insert,$鏈接)或死亡(「插入失敗:」。mysql_error());} – user1296762 2012-03-28 20:42:10

+0

你做了像'$ userId = mysql_insert_id()'? – Gohn67 2012-03-28 20:55:04

+0

是嘗試$ id = mysql_insert_id();和$ user_id = mysql_insert_id(); – user1296762 2012-03-28 20:57:59