Php url中的id不正确

Php url中的id不正确,php,mysql,Php,Mysql,我在mysql中的外键有问题。 用户中的我的主键id应=语言表中的用户id。 更新代码: 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`

我在mysql中的外键有问题。 用户中的我的主键id应=语言表中的用户id。 更新代码:

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 ;

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 ;
当我登录到应用程序时,url中的ID是正确的id1=myaccount.php?ID='%20.%201%20' 但是,当我转到language.php并返回时,url已更改为myaccount.php?id='%20.%203%20'

因此,语言表中的用户id是3,而它应该是1

Php代码:

$result = mysql_query("SELECT `id` FROM `users` WHERE `banned` = '0' ORDER BY 
`id`  DESC");
$err = array();
if(isset($_SESSION['user_id']))  {  }
if (!empty($_POST['doLanguage']) && $_POST['doLanguage'] == 'Submit')
{

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

session_start();
// this sets variables in the session
$_SESSION['user_id'] = $id;
foreach($_POST as $key => $value)

$stamp = time();
$ckey = GenKey();
mysql_query("update users set `ctime`='$stamp', `ckey` = '$ckey' where id='$id'") 
or  die(mysql_error());

//set a cookie

if(isset($_POST['remember'])){
    setcookie("user_id", $_SESSION['user_id'], time()+60*60*24*COOKIE_TIME_OUT, "/");
    setcookie("user_key", sha1($ckey), time()+60*60*24*COOKIE_TIME_OUT, "/");
    setcookie("user_name",$_SESSION['user_name'], time()+60*60*24*COOKIE_TIME_OUT, "/");
}


if(empty($err)) {
for($i = 0; $i < count($_POST["other"]); $i++)
{

$native = mysql_real_escape_string($_POST['native'][$i]);
 $other = mysql_real_escape_string($_POST['other'][$i]);
  $other_list = mysql_real_escape_string($_POST['other_list'][$i]);
   $other_read = mysql_real_escape_string($_POST['other_read'][$i]);
    $other_spokint = mysql_real_escape_string($_POST['other_spokint'][$i]);
     $other_spokprod = mysql_real_escape_string($_POST['other_spokprod'][$i]);
      $other_writ = mysql_real_escape_string($_POST['other_writ'][$i]);
  $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();
    } 

我并不是什么都读,但我看到了这里的大问题:

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

您正在不一致地混合单引号和双引号字符串 您正在使用常量user\u id而不是字符串“user\u id”访问表索引user\u id 请尝试:

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

将用户_id声明为外键。非常奇怪这行:ifempty$_SESSION['$user _id']{//用户未登录;重定向到其他地方}..请注意//正在注释}谢谢。仍然id=3,但设置如下/myaccount.php?id=3