gpt4 book ai didi

php - 外键链接不正确

转载 作者:行者123 更新时间:2023-11-29 03:10:04 25 4
gpt4 key购买 nike

在表“users”中注册我的第一个用户时,id 与链接表 1(语言)中的 user_id 的值相同。但是,当我注册另一个用户(用户中的 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();

非常感谢任何帮助!

最佳答案

我认为这是因为您的初始选择查询选择了所有未被禁止的用户

因此需要更改查询以按新用户过滤:

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

user_id 字段一直填充为 1 的原因是因为 mysql_fetch_row 获取的第一条记录是用户 id 1。

所以如果你按新用户过滤,mysql_fetch_row应该得到新用户的id。

编辑

我刚刚再次查看代码,看起来您在插入用户 ID 后并未将其存储在 php 中,因此 $_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

关于php - 外键链接不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9911432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com