在表'users'中注册我的第一个用户时,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();
非常感谢任何帮助!
答案 0 :(得分:1)
我认为这是因为您的初始选择查询是选择所有未被禁止的用户
因此需要更改查询以供新用户过滤:
"SELECT `id` FROM users WHERE `banned` = '0' and id=" . $_SESSION['$user_id'];
user_id字段保持填充为1的原因是因为mysql_fetch_row获取了第一条用户ID为1的记录。
因此,如果您通过新用户过滤它,mysql_fetch_row应该获得新用户的ID。
修改强>
我只是再次查看代码,看起来你插入后不会在php中存储用户ID,所以$ _SESSION的user_id为空。
所以我上面的例子不起作用。而不是上面的查询,使用以下函数来获取新创建的用户的ID。运行插入查询后调用此函数。该功能将获得新创建的用户的新功能。
mysql_insert_id()
http://php.net/manual/en/function.mysql-insert-id.php
编辑2
好的,因为mysql_insert_id()不适合你,也许你可以尝试以下方法。我刚刚将你的选择查询更改为id desc。
$result = mysql_query("SELECT `id` FROM users WHERE `banned` = '0' order by id desc")
请注意,这可能不是最佳解决方案。但在流量较低的网站上应该没问题。为了使查询更准确一些,您需要根据用户名或电子邮件等唯一字段搜索用户ID。这样可以确保您获得正确的ID。
编辑3 以下是检查用户电子邮件的示例。这只是mysql查询,你必须为php调整这个。对不起,我现在在课堂上。
"SELECT `id` FROM users WHERE `banned` = '0' and email='user@email.com' limit 1