【问题标题】:$_GET or $_SESSION for passing variable$_GET 或 $_SESSION 用于传递变量
【发布时间】:2016-06-29 21:54:00
【问题描述】:

你好编程的怪物。我只想问一个关于使用$_SESSION$_GET 的问题。何时使用$_GET$_SESSION?传递变量的最佳方法是什么?我只是 php 和 html 的新手,我不知道什么是最佳实践。有人可以帮我理解它们吗?

这是我的代码示例。我使用$_SESSION 传递变量$newsid;

这里是edit.php

  <?php
          session_start();
           include_once('connection.php');
           $sql ="SELECT * FROM news ORDER BY news_id";
           $result = mysqli_query($con, $sql);

           while($row = mysqli_fetch_array($result)){
                   $newsid = $row['news_id'];
                    $title = $row['news_title'];
                     $date = $row['news_date'];
                     $content = $row['news_content'];
                     $newsimage = $row['news_image'];

                     ?>
                     <div class="fix single_news">
                       <div class="single_image">
                           <img src="<?php echo $newsimage; ?>" style="width:200px; height:140px; alt="court">
                       </div>
                       <a href="#"><?php echo $title; ?></a>
                       <p><?php echo $date; ?></p>
                     <p><?php echo $content; ?></p>
                     </div>
                     <form  action="" method="post">
                       <input type='hidden' name="news_id" value="<?php echo $newsid;?>">
                     <input type="submit" name="esubmit" value="edit" />
                     </form>
                      <hr>
                    <?php
                     }
                   if(isset($_POST['esubmit'])){
                     $_SESSION['news_id'] = $_POST['news_id'];
                      header('Location: edit2.php');
                      }
                     ?> 

这里是edit2.php

<?php
session_start();

$id = $_SESSION['news_id'];
include_once('connection.php');
$sql = "SELECT * FROM news WHERE news_id = '$id'";
$result = mysqli_query($con,$sql);


                         while($row = mysqli_fetch_array($result)){
                         $title = $row['news_title'];
                         $date = $row['news_date'];
                         $content = $row['news_content'];
                         $newsimage = $row['news_image'];
                         }

                         ?>   
<!DOCTYPE HTML>
<html>
<head>

</head>
<body>


    <form method="post" action ="" enctype="multipart/form-data">
    Title<input type ="text" name ="title" value="<?php echo $title;?>"/><br>
        Date<input type ="text" name="date" value="<?php echo $date;?>" /><br>
        Content<textarea name="content"><?php echo $content;?></textarea>
        <input type="submit" name="submit" value="Update" />
        <input class="form-control" id="image" name="image" type="file" accept="image/*" onchange='AlertFilesize();'/>
        <img id="blah" src="<?php echo $newsimage;?>" alt="your image" style="width:200px; height:140px;"/>

    </form>
    <hr>


<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>

【问题讨论】:

  • SESSION 几乎 always 比 GET 好,我正在尝试考虑 GET 会更好的情况,但只要因为所有内容都在同一个托管环境(服务器)上的同一个网站上,所以不,SESSION 是每次都这样做的方式。
  • 那么使用 $_SESSION 传递我的变量 $news_id 可以吗?
  • 你能看看我的代码先生吗?如果没事的话。
  • $_GET好多了。
  • @RyanVincent - 是的。我们百分百同意! :)

标签: php html


【解决方案1】:

$_GET 用于该特定请求期间所需的参数(或可以轻松转移到其他页面),例如:

  • 项目 ID
  • 当前页面(分页)
  • 用户的个人资料名称
  • ...

$_SESSION 用于需要跨多个请求持久化的数据,例如:

  • 当前用户的 ID
  • 购物车
  • 列出过滤器
  • ...

您应该使用更适合您用例的那个。

话虽如此,我认为在会话中存储news_id 是一件坏事。如果我想编辑多个项目并打开多个浏览器选项卡怎么办?我最终会覆盖我的数据。仅仅因为您可以使用会话并不意味着您应该

【讨论】:

  • 那我就用 $_GET 给那个先生?
  • 当然。你甚至不需要做任何特别的事情来传递价值。带有空/未定义 action 属性的 &lt;form&gt; 将使用当前页面的 URL,包括 GET 参数。
猜你喜欢
  • 1970-01-01
  • 2016-04-28
  • 2013-01-17
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
相关资源
最近更新 更多