【问题标题】:storing the value of GET variable存储 GET 变量的值
【发布时间】:2013-08-26 15:52:46
【问题描述】:

我在第一页上有一个搜索栏,结果显示在带有分页的第二页上。问题是分页不适用于$_GET$_POST 变量。

我的意思是当表单提交时,第二页上的 url 更改为类似

products.php?search=something 我可以看到显示的结果。

但是,当我点击分页的下一个按钮时,我得到 undefined index search error 并且 url 更改为 products.php?page=2

那么有什么方法可以存储$_GET['search']; 值,以便在页码更改时使用它?

  <form action="products.php" method="post">
  <input type="text" name="search">
  <input type="Submit">
  </form>

products.php

  <?php
        /*
         * Connect to the database (Replacing the XXXXXX's with the correct details)
         */
        try
        {
            $dbh = new PDO('mysql:host=localhost;dbname=db', 'root', '');
        }
        catch(PDOException $e)
        {
            print "Error!: " . $e->getMessage() . "<br/>";
            die();
        }
        /*
         * Get and/or set the page number we are on
         */
        if(isset($_GET['page']))
        {
            $page = $_GET['page'];
        }
        else
        {
            $page = 1;
        }


        /*
         * Set a few of the basic options for the class, replacing the URL with your own of course
         */
        $options = array(
            'results_per_page'              => 100,
            'url'                           => 'products.php?page=*VAR*',
            'db_handle'                     => $dbh
        );

        $q = $_GET['search'];
        /*
         * Create the pagination object
         */


        try

     {   

           $paginate = new pagination($page, "SELECT * FROM products where title LIKE '%$q%' order by id desc", $options);}

     catch(paginationException $e)
        {
            echo $e;
            exit();
        }


    if($paginate->success == true)
        {
            $paginate_result = $paginate->resultset->fetchAll();
            foreach($paginate_result as $row)
            {

                   echo $row['title'];
                   }

            ?>


         <?php echo "<li>"; //this is next and prev button for the pagination class if results exceed the limit. 
     echo $ball->links_html;
     echo "</li>"; ?>

【问题讨论】:

    标签: php mysql pdo get pagination


    【解决方案1】:

    把你的代码改成这样...

    <form action="products.php" method="get">
      <input type="text" name="search">
      <input type="Submit">
      </form>
    

    ...和...

       $options = array(
                    'results_per_page'              => 100,
                    'url'                           => 'products.php?search=' . urlencode($_GET['search']) . '&page=*VAR*',
                    'db_handle'                     => $dbh
                );
    

    【讨论】:

      【解决方案2】:

      最简单的解决方案可能是在表单中使用隐藏字段:

      <form action="products.php" method="post">
          <input type="text" name="search">
          <input type="hidden" name="page" value="<?php echo $_GET['page']; ?>">
          <input type="Submit">
      </form>
      

      【讨论】:

      • 他需要分页代码中的搜索值而不是搜索框。
      【解决方案3】:

      试试 Session 变量,它们可以让你存储它直到浏览器关闭(或者你可能切换到另一个网站?)并跨页面存储它。

      http://www.tizag.com/phpT/phpsessions.php

      另一种选择是 cookie,除非用户删除他们的 cookie,否则您可以随意存储。

      http://www.tizag.com/phpT/phpcookies.php

      【讨论】:

      • 如果您在一次搜索的第 4 页上,请不要这样做,然后您再进行一次搜索……现在您又在第 4 页上
      • 据我了解,他想要存储的只是搜索的值,而不是页码。始终将其作为 GET 变量而不是有时 GET,有时是 SESSION 可能更容易,但您绝对可以将其存储在会话变量中。基本上,如果有 GET 变量,则使用它并将其存储为会话变量。否则,查找会话变量并使用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 2021-09-07
      • 2020-09-01
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多