会话变量未以 php 和 mysql 形式插入数据库
session variables are not inserting in database in php and mysql form
它没有插入像 name, id ,email, number
这样的会话变量,它存储在 $a,$b,$c,$d
中 pseller.php
这是我正在检查用户名和密码的登录页面
login.php
<?php
error_reporting(E_ALL); // to see if there is error in code
include "connect_to_mysql.php";
if(isset($_POST['log']))
{
$user= $_POST['user'];
$pass= md5($_POST['pass']);
$sql=mysql_query( "select * from reg where username= '$user' AND password='$pass' AND category='product seller' LIMIT 1 ") or die( mysql_error());
$data=mysql_num_rows($sql);
if ($data == 1) {
$_SESSION['name']=$name;
$_SESSION['id']=$id;
$_SESSION['phone_no']=$number;
$_SESSION['email_id']=$email;
header("location:pseller.php");
}
else {
header("location:login.php?error");
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> Log In </title>
<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
</head>
<body>
<div id="mainWrapper">
<div id="pageContent"><br /><br /><br />
<div align="right" style="margin-right:24px; color:#FF0000">
<br /><br />
<form id="form" name="form" method="post" action="login.php">
<h2 style="padding-right:200px;">User Name:</h2>
<input name="user" type="text" id="user" size="40" style="height:30px;" required placeholder="Enter Email"/>
<br /><br />
<h2 style="padding-right:210px;">Password:</h2>
<input name="pass" type="password" id="pass" size="40" style="height:30px;" required/>
<br />
<br />
<br />
<img style="padding-right:190px;" src="generate.php"><br /><br />
<input type="text" name="secure" size="10" required placeholder="Enter The Value" style="padding-right:210px; height:30px;">
<br />
<br />
<br />
<input type="submit" name="log" id="log" value="Log In" style="padding-right:40px;" />
</form>
<p> </p>
</div>
<br />
<br />
<br />
</div>
</div>
</body>
</html>
这是 pseller
页面,我试图在其中将会话值存储在变量中,然后插入到数据库中。但是会话变量没有在数据库中插入数据并显示 v_id v_number as 0
.
的值
pseller.php
<?php
// Parse the form data and add inventory item to the system
include_once('connect_to_mysql.php');
session_start();
if (isset($_POST['p_name'])) {
$target_dir = "pics/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file) ;
$img_name = $_FILES["fileToUpload"]["name"];
$a=$_SESSION['name'];
$b=$_SESSION['id'];
$c=$_SESSION['phone_no'];
$d=$_SESSION['email_id'];
$product_name = mysql_real_escape_string( $_POST['p_name']);
$price = mysql_real_escape_string($_POST['price']);
$category = mysql_real_escape_string($_POST['category']);
$subcategory = mysql_real_escape_string($_POST['subcategory']);
$category2 = mysql_real_escape_string($_POST['category2']);
$details = mysql_real_escape_string($_POST['details']);
// See if that product name is an identical match to another product in the system
// Add this product into the database now
$sql = mysql_query("INSERT INTO product (p_name, price, details, category, sub_category, category2, img_name, v_id, v_name, v_number, v_email, date) VALUES('$product_name','$price','$details','$category','$subcategory','$category2','$img_name','$b','$a','$c','$d',now())") or die (mysql_error());
}
?>
请帮我从这里出来。
$_SESSION['id']=$id;
$_SESSION['phone_no']=$number;
仅当 select 用户名和密码的行数为 1
时才会更新
在pseller.php
中成为变量$b
和$c
因此,如果 $user 和 $pass 没有让你在 select 上从数据库中获得一行,你就会在 SESSION
.
中得到垃圾
mysql_num_rows returns
行数。您正在执行 LIMIT 3。因此,如果您是 0、2 或 3,会话有问题。为什么,因为你的 if 语句说 =1.
此外,您正在使用已弃用的 mysql_* 函数库并直接作用于用户提供的值,这些值可能会导致 sql 注入攻击。使用 mysqli 或 pdo,并查看 this.
包括session_start(); in your
login.php
$sql=mysql_query("select * from reg where username= '$user'
AND password='$pass' AND category='product seller'") or die( mysql_error());
在上述查询中,请进行更改。
避免使用空格制作列名category='product seller'
现在回显 SELECT * FROM
查询和 $a, $b, $c, $d
下的值,以了解您是否真的将这些值带到下一页。我非常确定你不是,而且@Drew 建议,转移到 msqli/PDO
。
编辑:
在您的第二页中 pseller.php
尝试回显并查看您得到了什么。
echo $_SESSION['name'];
echo $_SESSION['id'];
echo $_SESSION['phone_no'];
echo $_SESSION['email_id'];
运气不好?好吧,我们就这样试试看会发生什么;
$sql=mysql_query("select * from reg where username= '$user' AND password='$pass'") or die( mysql_error());
if ($sql) {
while($row=mysql_fetch_array($sql))
{
echo $row['name'];
echo $row['id'];
echo $row['phone_no'];
echo $row['email_id'];
}
// header("location:pseller.php");
}
现在输入正确的用户名和密码(存在于数据库中),如果您可以看到回显值,使用会话存储并稍后使用它们,同时取消注释 header();
行,您可以去吧。
好的,从评论中的问题和讨论来看,您在 login.php
中缺乏对用户数据的正确处理。
您的代码中还有其他几点有点不对劲:
- 您不应该使用 mysql 库,因为它已被弃用。您应该使用 mysqli,如果您已经习惯了 mysql,这是一个相当容易的切换,或者使用 PDO
- 您的代码容易受到 SQL 注入攻击。在 SQL 查询中使用用户输入时,您应该使用准备好的语句。更多信息 here 例如
- MD5 不是一个非常安全的密码选项。你可以阅读更多here
下面是 login.php
的 PHP 部分的一个简单示例,我根据从您的问题中收集到的信息拼凑而成。对于您的特定数据库结构和需求,它并不完整,但应该可以帮助您解决问题:
<?php
// Define database connection using mysqli
$mysqli = new mysqli("localhost", "username", "password", "dbname");
if(isset($_POST['log']))
{
$user= $_POST['user'];
$pass= md5($_POST['pass']); // Should be replaced by secure alternatives
// Define the SQL query string
$sql = "SELECT id, name, phone_no, email FROM reg WHERE email = ? AND password = ? LIMIT 1";
$stmt = $mysqli->prepare($sql); // Prepare the query string
$stmt->bind_param("ss", $user, $pass); // Define prepared statement parameters
// Execute the prepared stament
if ($stmt->execute())
{
$result = $stmt->get_result(); // Get the result
$data = $result->num_rows; // Get number of rows
if ($data == 1)
{
$userdata = $result->fetch_array(MYSQLI_ASSOC); // Get an associative array from the result
$_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");
}
}
?>
它没有插入像 name, id ,email, number
这样的会话变量,它存储在 $a,$b,$c,$d
中 pseller.php
这是我正在检查用户名和密码的登录页面
login.php
<?php
error_reporting(E_ALL); // to see if there is error in code
include "connect_to_mysql.php";
if(isset($_POST['log']))
{
$user= $_POST['user'];
$pass= md5($_POST['pass']);
$sql=mysql_query( "select * from reg where username= '$user' AND password='$pass' AND category='product seller' LIMIT 1 ") or die( mysql_error());
$data=mysql_num_rows($sql);
if ($data == 1) {
$_SESSION['name']=$name;
$_SESSION['id']=$id;
$_SESSION['phone_no']=$number;
$_SESSION['email_id']=$email;
header("location:pseller.php");
}
else {
header("location:login.php?error");
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> Log In </title>
<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
</head>
<body>
<div id="mainWrapper">
<div id="pageContent"><br /><br /><br />
<div align="right" style="margin-right:24px; color:#FF0000">
<br /><br />
<form id="form" name="form" method="post" action="login.php">
<h2 style="padding-right:200px;">User Name:</h2>
<input name="user" type="text" id="user" size="40" style="height:30px;" required placeholder="Enter Email"/>
<br /><br />
<h2 style="padding-right:210px;">Password:</h2>
<input name="pass" type="password" id="pass" size="40" style="height:30px;" required/>
<br />
<br />
<br />
<img style="padding-right:190px;" src="generate.php"><br /><br />
<input type="text" name="secure" size="10" required placeholder="Enter The Value" style="padding-right:210px; height:30px;">
<br />
<br />
<br />
<input type="submit" name="log" id="log" value="Log In" style="padding-right:40px;" />
</form>
<p> </p>
</div>
<br />
<br />
<br />
</div>
</div>
</body>
</html>
这是 pseller
页面,我试图在其中将会话值存储在变量中,然后插入到数据库中。但是会话变量没有在数据库中插入数据并显示 v_id v_number as 0
.
pseller.php
<?php
// Parse the form data and add inventory item to the system
include_once('connect_to_mysql.php');
session_start();
if (isset($_POST['p_name'])) {
$target_dir = "pics/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file) ;
$img_name = $_FILES["fileToUpload"]["name"];
$a=$_SESSION['name'];
$b=$_SESSION['id'];
$c=$_SESSION['phone_no'];
$d=$_SESSION['email_id'];
$product_name = mysql_real_escape_string( $_POST['p_name']);
$price = mysql_real_escape_string($_POST['price']);
$category = mysql_real_escape_string($_POST['category']);
$subcategory = mysql_real_escape_string($_POST['subcategory']);
$category2 = mysql_real_escape_string($_POST['category2']);
$details = mysql_real_escape_string($_POST['details']);
// See if that product name is an identical match to another product in the system
// Add this product into the database now
$sql = mysql_query("INSERT INTO product (p_name, price, details, category, sub_category, category2, img_name, v_id, v_name, v_number, v_email, date) VALUES('$product_name','$price','$details','$category','$subcategory','$category2','$img_name','$b','$a','$c','$d',now())") or die (mysql_error());
}
?>
请帮我从这里出来。
$_SESSION['id']=$id;
$_SESSION['phone_no']=$number;
仅当 select 用户名和密码的行数为 1
时才会更新在pseller.php
中成为变量$b
和$c
因此,如果 $user 和 $pass 没有让你在 select 上从数据库中获得一行,你就会在 SESSION
.
mysql_num_rows returns
行数。您正在执行 LIMIT 3。因此,如果您是 0、2 或 3,会话有问题。为什么,因为你的 if 语句说 =1.
此外,您正在使用已弃用的 mysql_* 函数库并直接作用于用户提供的值,这些值可能会导致 sql 注入攻击。使用 mysqli 或 pdo,并查看 this.
包括session_start(); in your
login.php
$sql=mysql_query("select * from reg where username= '$user'
AND password='$pass' AND category='product seller'") or die( mysql_error());
在上述查询中,请进行更改。
避免使用空格制作列名category='product seller'
现在回显 SELECT * FROM
查询和 $a, $b, $c, $d
下的值,以了解您是否真的将这些值带到下一页。我非常确定你不是,而且@Drew 建议,转移到 msqli/PDO
。
编辑:
在您的第二页中 pseller.php
尝试回显并查看您得到了什么。
echo $_SESSION['name'];
echo $_SESSION['id'];
echo $_SESSION['phone_no'];
echo $_SESSION['email_id'];
运气不好?好吧,我们就这样试试看会发生什么;
$sql=mysql_query("select * from reg where username= '$user' AND password='$pass'") or die( mysql_error());
if ($sql) {
while($row=mysql_fetch_array($sql))
{
echo $row['name'];
echo $row['id'];
echo $row['phone_no'];
echo $row['email_id'];
}
// header("location:pseller.php");
}
现在输入正确的用户名和密码(存在于数据库中),如果您可以看到回显值,使用会话存储并稍后使用它们,同时取消注释 header();
行,您可以去吧。
好的,从评论中的问题和讨论来看,您在 login.php
中缺乏对用户数据的正确处理。
您的代码中还有其他几点有点不对劲:
- 您不应该使用 mysql 库,因为它已被弃用。您应该使用 mysqli,如果您已经习惯了 mysql,这是一个相当容易的切换,或者使用 PDO
- 您的代码容易受到 SQL 注入攻击。在 SQL 查询中使用用户输入时,您应该使用准备好的语句。更多信息 here 例如
- MD5 不是一个非常安全的密码选项。你可以阅读更多here
下面是 login.php
的 PHP 部分的一个简单示例,我根据从您的问题中收集到的信息拼凑而成。对于您的特定数据库结构和需求,它并不完整,但应该可以帮助您解决问题:
<?php
// Define database connection using mysqli
$mysqli = new mysqli("localhost", "username", "password", "dbname");
if(isset($_POST['log']))
{
$user= $_POST['user'];
$pass= md5($_POST['pass']); // Should be replaced by secure alternatives
// Define the SQL query string
$sql = "SELECT id, name, phone_no, email FROM reg WHERE email = ? AND password = ? LIMIT 1";
$stmt = $mysqli->prepare($sql); // Prepare the query string
$stmt->bind_param("ss", $user, $pass); // Define prepared statement parameters
// Execute the prepared stament
if ($stmt->execute())
{
$result = $stmt->get_result(); // Get the result
$data = $result->num_rows; // Get number of rows
if ($data == 1)
{
$userdata = $result->fetch_array(MYSQLI_ASSOC); // Get an associative array from the result
$_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");
}
}
?>