【问题标题】:Why I am getting notice error if I directly paste the link of a page which is checking if the session is set or not?如果我直接粘贴正在检查会话是否设置的页面的链接,为什么我会收到通知错误?
【发布时间】:2025-12-29 15:50:06
【问题描述】:

我有两个页面,即 login.php 页面和 add_product.php 页面。我在登录页面中存储会话并在 add_poduct.php 上获取它。问题是当我直接将“add_product.php”的url粘贴到url时,它返回一个通知错误。并且它将返回一个通知错误,因为 SESSION 中使用的索引在该页面上是未知的。我该如何解决这个问题,如果我直接粘贴产品页面的链接,它会将我返回到 login.php 而不会出现通知错误。我的 login.php 如下-

<?php
session_start();
$link = mysqli_connect("localhost", "root", "", "youtube_project");
 ?>
 <?php
 if(isset($_POST['submit1'])){
   $username = mysqli_real_escape_string($link, $_POST['username']);
   $pwd = mysqli_real_escape_string($link, $_POST['pwd']);
   $sql = mysqli_query($link, "SELECT * FROM admin_login WHERE username='$username' && password='$pwd'");
   if(mysqli_num_rows($sql) >= 1){
     while($row=mysqli_fetch_array($sql)){
       $_SESSION["admin"]=$row["username"];
       //print_r($_SESSION); //Getting values
     }
     ?>
     <script type="text/javascript">
       window.location="add_product.php";
     </script>
 <?php
   } else {
     $msg = "Invalid Username/Password combination";
   }
 }
  ?>
<!DOCTYPE html>
<html >
  <head>
    <meta charset="UTF-8">
    <title>Login Form</title>
        <link rel="stylesheet" href="css/style.css">
  </head>
  <body>
    <div class="login">
  <div class="login-triangle"></div>

  <h2 class="login-header">Log in</h2>
  <form class="login-container" name="form1" action="" method="post">
    <p style="color:red;"><?php if(isset($msg)){ echo $msg; } ?></p>
    <p><input type="text" placeholder="Username" name="username" required></p>
    <p><input type="password" placeholder="Password" name="pwd" required></p>
    <p><input type="submit" name="submit1" value="Log in"></p>
  </form>
</div>
    <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>

  </body>
</html>

而add_product.php页面如下:

<?php
session_start();
print_r($_SESSION); //Can't get values, empty array
if($_SESSION["admin"]==""){
  ?>
<script type="text/javascript">
  //window.location="admin_login.php";
</script>
<?php
}
$link = mysqli_connect("localhost", "root", "", "youtube_project");
 ?>
 <?php
if(isset($_POST['submit1'])){
  $v1=rand(1111, 9999);
  $v2=rand(1111, 9999);
  $v3=$v1.$v2;
  $v3=md5($v3);
  $fnm=$_FILES["pimage"]["name"];
  $dst="../product_image/".$v3.$fnm;
  move_uploaded_file($_FILES["pimage"]["tmp_name"], $dst);
  $name = $_POST['pnm'];
  $price = $_POST['pprice'];
  $qty = $_POST['pqty'];
  $dst1="product_image/".$v3.$fnm;
  $cat = $_POST['pcategory'];
  $desc = $_POST['ptext'];

  $sql = "INSERT INTO product VALUES ('', '$name', $price, $qty, '$dst1', '$cat', '$desc')";
  mysqli_query($link, $sql);
}
  ?>
<?php include('header.php'); ?>
<?php include('menu.php'); ?>
        <div class="grid_10">
            <div class="box round first">
                <h2>
                    Add Product</h2>
                <div class="block">
                    <form name="form1" action="" method="post" enctype="multipart/form-data">
                      <table>
                        <tr>
                          <td>Product Name</td>
                          <td><input type="text" name="pnm"></td>
                        </tr>
                        <tr>
                          <td>Product Price</td>
                          <td><input type="text" name="pprice"></td>
                        </tr>
                        <tr>
                          <td>Product Quantity</td>
                          <td><input type="text" name="pqty"></td>
                        </tr>
                        <tr>
                          <td>Product Image</td>
                          <td><input type="file" name="pimage"></td>
                        </tr>
                        <tr>
                          <td>Product Category</td>
                          <td>
                            <select name="pcategory">
                              <option value="Gents_Clothes">Gents Clothes</option>
                              <option value="Ladies_Clothes">Ladies Clothes</option>
                              <option value="Gents_Shoes">Gents Shoes</option>
                              <option value="Ladies_Shoes">Ladies Shoes</option>
                            </select>
                          </td>
                        </tr>
                        <tr>
                          <td>Product Description</td>
                          <td><textarea name="ptext">Enter text here...</textarea></td>
                        </tr>
                        <tr>
                          <td colspan="2" align="center"><input type="submit" name="submit1" value="Upload"></td>
                        </tr>
                      </table>
                    </form>
                </div>
            </div>

<?php include('footer.php'); ?>

【问题讨论】:

  • 可能在将用户名保存到会话之前先执行 javascript 重定向,尝试使用 php 标头函数重定向

标签: php


【解决方案1】:

您在分配后立即在登录页面中打印 $_SESSION,因此即使 session_start 不存在也会打印。如果您想正确检查,请重新加载登录页面并在顶部打印 $_SESSION 。另外请参考下面的线程。

参考this

【讨论】:

    【解决方案2】:
    <?php
        session_start();
        $link = mysqli_connect("localhost", "root", "", "youtube_project");
    
     if(isset($_POST['submit1'])){
         $username = mysqli_real_escape_string($link, $_POST['username']);
         $pwd = mysqli_real_escape_string($link, $_POST['pwd']);
         $sql = mysqli_query($link, "SELECT * FROM admin_login WHERE username='$username' && password='$pwd'");
         if(mysqli_num_rows($sql) >= 1){
             while($row=mysqli_fetch_array($sql)){
             $_SESSION["admin"]=$row["username"];
    
             // I personally recommend this redirect
             header('Location:to/path/add_product.php
    
              /**OR IN YOUR HTML IF I HAVE RESULTS PRESENT BY DOING WITH OUT THE USE OF HEADER**/
              echo "<script>location.href='add_product.php';</script>";
              }    
        } else {
         $msg = "Invalid Username/Password combination";
       }
     }
    ?>
    

    【讨论】:

      最近更新 更多