会话变量在PHP和MySQL表单中没有插入到数据库中。
问题出现的原因是,当从数据库中选择的用户名和密码没有返回任何行时,变量$user和$pass将不会被赋值,导致在SESSION
中保存的值是错误的。此外,mysql_num_rows
函数返回的是行数,而你的代码中使用了LIMIT 3
,所以如果返回的行数是0、2或3,会导致SESSION
出现问题。另外,你使用了已经废弃的mysql_*
函数库,并直接使用用户提供的值,这可能导致SQL注入攻击。建议使用mysqli
或pdo
来防止注入攻击。
解决这个问题,你可以在代码中添加一些变量值的输出,例如在设置SESSION
变量的if语句中添加一个echo
,以确保成功获取了用户名和密码的组合。可以尝试进行调试,查看你已经做了什么。我建议你从那些等于0的地方开始调试。
至于login.php
代码,你需要做一些改变来解决这个问题。具体的改动代码我无法确定,因为我不清楚你的具体情况。你可以尝试在代码中添加一些调试语句,以及检查你的数据库查询语句是否正确。
问题:在PHP和MySQL表单中,会话变量无法插入数据库。
原因:
1. 在login.php文件中没有包含session_start();
。
2. SQL查询语句中存在错误,使用了带有空格的列名category='product seller'
。
解决方法:
1. 在login.php文件中包含session_start();
。
2. 修改SQL查询语句中的错误,避免使用带有空格的列名category='product seller'
。
3. 在第二个页面pseller.php中使用echo
语句来检查是否成功获取了会话变量的值。
4. 尝试使用修改后的SQL查询语句来获取数据库中的数据,并使用echo
语句来检查是否成功获取了数据。
5. 如果成功获取了数据,使用会话变量来存储这些值,并取消注释header();
语句。
6. 检查是否在login.php文件中定义了要存储在会话变量中的变量($name,$id,$number,$email)。
7. 避免使用过时的mysql库,改用mysqli或PDO库。
8. 使用mysqli的fetch_assoc函数来处理查询结果。
9. 使用准备语句来提高安全性。
以上是关于“session variables are not inserting in database in php and mysql form”问题的原因和解决方法。
在这个问题中,会话变量没有插入到PHP和MySQL表单中的数据库。这个问题出现的原因是在login.php文件中没有正确处理用户数据。另外,代码中还有一些其他问题:
1. 你不应该使用mysql库,因为它已经被弃用了。你应该使用mysqli,如果你已经习惯了mysql,这是一个相对容易的转换,或者使用PDO。
2. 你的代码易受SQL注入攻击。当在SQL查询中使用用户输入时,你应该使用预处理语句。
3. MD5对于密码来说不是一个非常安全的选项。
以下是一个基于你的问题中提供的信息所组成的login.php文件的PHP部分的简单示例。它并不适用于你特定的数据库结构和需求,但应该能帮助你解决问题:
prepare($sql); // 准备查询字符串 $stmt->bind_param("ss", $user, $pass); // 定义预处理语句参数 // 执行预处理语句 if ($stmt->execute()) { $result = $stmt->get_result(); // 获取结果 $data = $result->num_rows; // 获取行数 if ($data == 1) { $userdata = $result->fetch_array(MYSQLI_ASSOC); // 从结果中获取关联数组 $_SESSION['name'] = $userdata['name']; $_SESSION['id'] = $userdata['id']; $_SESSION['phone_no'] = $userdata['phone_no']; $_SESSION['email_id'] = $userdata['email']; header("location:pseller.php"); } } else { header("location:login.php?error"); } } ?>
通过上述代码示例,你可以解决会话变量没有插入到数据库的问题。同时,你还可以改进代码的安全性,以避免SQL注入攻击。