会话变量未以 php 和 mysql 形式插入数据库

session variables are not inserting in database in php and mysql form

它没有插入像 name, id ,email, number 这样的会话变量,它存储在 $a,$b,$c,$dpseller.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>&nbsp; </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 yourlogin.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 中缺乏对用户数据的正确处理。

您的代码中还有其他几点有点不对劲:

  1. 您不应该使用 mysql 库,因为它已被弃用。您应该使用 mysqli,如果您已经习惯了 mysql,这是一个相当容易的切换,或者使用 PDO
  2. 您的代码容易受到 SQL 注入攻击。在 SQL 查询中使用用户输入时,您应该使用准备好的语句。更多信息 here 例如
  3. 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");
      }
    }
?>