【问题标题】:session variables are not inserting in database in php and mysql form会话变量未以 php 和 mysql 形式插入数据库
【发布时间】:2015-11-08 21:03:58
【问题描述】:

它没有插入像name, id ,email, number 这样存储在$a,$b,$c,$dpseller.php 中的会话变量

这是我正在检查用户名和密码的登录页面

登录.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());



   }
   ?>

请帮我从这里出来。

【问题讨论】:

  • 你的第二个块没有显示任何东西表明 v_id 和 v_number 不是 0。$b $c。做一个回声
  • 喜欢...我没听懂你。
  • 在您的 login.php 中尝试添加 session_start();在顶部,一旦启动,您就可以设置变量(您已在页面下方进一步完成),当您调用 pseller.php 并在那里开始会话时,它们将转移
  • $b 是第一个,$c 是第二个
  • 我在页面的前面部分打开了 session_start() .. 所以这不是错误兄弟。 @benjayhutton

标签: php html mysql session session-variables


【解决方案1】:

好吧,从 cmets 中的问题和讨论来看,您对 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");
      }
    }
?>

【讨论】:

    【解决方案2】:

    包括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(); 行,您就可以开始了。

    【讨论】:

    • man.. 它没有改变视图.. 面临同样的问题.. 我试过这个。
    • 我应该在哪里回显 $a、$b 和所有?在 pseller.php 页面中
    • 我也尝试了这个编辑版本..但仍然无法正常工作..它没有显示任何回显会话语句的值。
    • v_id,v_number 为 0 而其他两个 v_email, v_user 在它显示的数据库中为空白。
    • @komal deep singh chahal 但是你从哪里得到这些值?我认为您是从 MySQL 查询中获取它们的?您的代码没有显示您处理 MySQL 结果集并定义所述值。
    【解决方案3】:
    $_SESSION['id']=$id;
    $_SESSION['phone_no']=$number;
    

    仅当使用用户名和密码选择的行数为 1 时才会更新

    这些在 pseller.php 中成为变量 $b$c

    因此,如果 $user 和 $pass 在从 db 中选择时没有让您获得一行,那么您会在 SESSION 中获得垃圾。

    mysql_num_rows returns 行数。您正在执行 LIMIT 3。因此,如果您是 0、2 或 3,则 会话有问题。为什么,因为你的 if 语句说 =1。

    此外,您正在使用已弃用的 mysql_* 函数库,并直接对用户提供的值进行操作,从而导致 sql 注入攻击。使用mysqli或pdo,见this

    【讨论】:

    • 你能解释一下我必须在这里做什么......才能得到这些变量。
    • 那么我必须在我的 login.php 代码中做哪些更改.. 告诉我这些东西兄弟...然后可能我会得到你.. 我怎么不给这些参数
    • 我会先回显一些变量值。也许在 if 语句中也有一个回显来设置这两个 SESSION 变量,这样你就知道你甚至成功地获得了用户/密码组合
    • 玩它。我没看到你做了什么。我在暗示为什么它们等于 0
    猜你喜欢
    • 2019-03-25
    • 2015-04-17
    • 2015-10-09
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2020-03-02
    • 2017-03-16
    • 2011-06-13
    相关资源
    最近更新 更多