通过php对字母表进行排序


Sorting of Alphabets through php

我在php中是一个完全的新手,我试图通过编写预制脚本并对其进行更改来学习它。我一直在努力找出如何在表中按标题的第一个字母显示标题。我浏览了这个网站http://www.emirplicanic.com/php/php-a-to-z-sorting-script但没能在剧本中发挥作用。

      public function getProducts()
         {
               global $db, $core, $pager;
      require_once(BASEPATH . "lib/class_paginate.php");
              $pager = new Paginator();
      $pager = new Paginator();
      $counter = countEntries($this->pTable);
      $pager->items_total = $counter;
      $pager->default_ipp = $core->perpage;
      $pager->paginate();
      if ($counter == 0) {
        $pager->limit = "";
      }
      if (isset($_GET['sort'])) {
          list($sort, $order) = explode("-", $_GET['sort']);
          $sort = sanitize($sort);
          $order = sanitize($order);
          if (in_array($sort, array("title", "cid", "price", "created"))) {
              $ord = ($order == 'DESC') ? " DESC" : " ASC";
              $sorting = " p." . $sort . $ord;
          } else {
              $sorting = " p.created DESC";
          }
      } else {
          $sorting = " p.created DESC";
      }
      ----------added by me-----------------
      if (isset($_GET['letter'])) {
          list($letter, $order1) = explode("-", $_GET['letter']);
          $letter = sanitize($letter);
          $order1 = sanitize($order1);
        //  if (in_array($sort, "A", "B", "C", "D"))) {
            if (!(strcmp($letter, "A"))) {
              $ord1 = ($order1 == 'DESC') ? " DESC" : " ASC";
              $sorting1 = " p." . $letter . $ord1;
          } 
      }
               ------------------------------------------------------------------
      $sql = "SELECT p.*, p.id as pid, c.name, c.id as cid," 
      . "'n DATE_FORMAT(p.created, '" . $core->short_date . "') as cdate,"
      . "'n (SELECT COUNT(pid) FROM transactions WHERE pid = p.id) as sales"
      . "'n FROM " . $this->pTable . " as p"
      . "'n LEFT JOIN categories as c ON c.id = p.cid" 
      . "'n ORDER BY " . $sorting . $pager->limit;
              $row = $db->fetch_all($sql);
              return ($row) ? $row : 0;
           }

然后它的html部分是

             <li><a href="?letter=A"><span>A</span></a></li>
             <li><a href="?letter=B"><span>B</span></a></li>
                              .
                              .
                              .

php部分给了我一个未定义的偏移错误。此外,我不确定是否必须在html上添加任何额外的内容才能使其工作

HTML中的URLS应该是?letter=A-DESC。(或ASC)list($letter, $order1)期望从对explode('-', $_GET['letter'])的调用中得到两个结果,但它只得到一个结果。因此,数组中的"未定义偏移量"从explode()返回。

请注意,任何人都可以在中发送任何内容?URL的字母部分,而不仅仅是链接中的内容。作为第一步,你应该"净化"(无论这对你有什么好处)任何输入参数,并在开始处理数据之前处理数据与你预期不符的情况。