【问题标题】:URL encoding the space character编码空格字符的 URL
【发布时间】:2018-08-02 00:18:53
【问题描述】:

请有人帮助我。我有搜索表单并显示来自数据库的数据,我使用 jquery twbsPagination。所以我的问题是如果用户搜索两个或更多单词,则 url 中的空格。我使用 encodeURIComponent(); 它的工作非常好,它的显示数据。但是当我点击第 2 页时,它不显示任何数据,当我返回第一页时,数据不再显示。请帮帮我。我调试了 12 小时对不起我的英语。 这是我的表格

<div class="input-group input-group-lg">
            <input id="searchBar" type="text" class="form-control" placeholder="Search job">
            <span class="input-group-btn">
              <button id="searchBtn" type="button" class="btn btn-info btn-flat">Go!</button>
            </span>
        </div>

这是我的脚本

<script>
 function Pagination(){
<?php
  $limit=5;
  $sql="SELECT COUNT(id_jobpost) AS id from job_post";
  $result=$conn->query($sql);
  if($result->num_rows > 0)
  {
    $row = $result->fetch_assoc();
    $total_records = $row['id'];
    $total_pages = ceil($total_records / $limit);
  } else {
    $total_pages = 1;
  }
?>
$('#pagination').twbsPagination({
  totalPages: <?php echo $total_pages;?>,
  visible: 5,
  onPageClick: function(e, page){
    e.preventDefault();
    $(".target-content").html("Loading....");
    $(".target-content").load("job-pagination.php?page="+page);
  }
});
}
</script>

<script>
 $(function(){
  Pagination();
 });
</script>

<script>
$("#searchBtn").on("click", function(e){
  e.preventDefault();
  var searchResult = $("#searchBar").val();
  var filter = "searchBar";
  if (searchResult != "") {
    $('#pagination').twbsPagination('destroy');
    Search(searchResult,filter);
  }else{
    $('#pagination').twbsPagination('destroy');
    Pagination();
  }
});

<script>
      function Search(val,filter){
        $('#pagination').twbsPagination({
        totalPages: <?php echo $total_pages; ?>,
        visible: 5,
        onPageClick: function(e, page){
          e.preventDefault();
          val = encodeURIComponent(val);
          $(".target-content").html("Loading....");
          $(".target-content").load("search.php?page="+page+"&search="+val+"&filter="+filter);
        }
      });
      }
    </script>

这是我的 search.php

<?php
session_start();
require_once("db.php");
 $limit = 5;

 if (isset($_GET['page'])) {
   $page = $_GET['page'];
 }else{
    $page = 1;
 }

 $start_from = ($page-1) * $limit;
 $search = $_GET['search'];
 $sql = "SELECT * FROM job_post WHERE jobtitle LIKE '%$search%' ORDER BY id_jobpost DESC LIMIT $start_from, $limit";
$result=$conn->query($sql);
       if ($result->num_rows>0) {
        while ($row=$result->fetch_assoc()) {
            $sql1 = "SELECT * FROM company WHERE id_company='$row[id_companyname]'";
                $result1 = $conn->query($sql1);
                if($result1->num_rows > 0) {
                while($row1 = $result1->fetch_assoc()) 
                    {
       ?>

            <div class="attachment-block clearfix">
                <img class="attachment-img" src="uploads/logo/<?php echo $row1['logo']; ?>" alt="Attachment Image">
                <div class="attachment-pushed">
                  <h4 class="attachment-heading"><a href="view-job-post.php?id=<?php echo $row['id_jobpost']; ?>"><?php echo $row['jobtitle']; ?></a> <span class="attachment-heading pull-right">₱<?php echo $row['maximumsalary']; ?>/Month</span></h4>
                  <div class="attachment-text">
                      <div><strong><?php echo $row1['companyname']; ?> | <?php echo $row1['province'].",".$row1['city']; ?> | Experience Required(in years): <?php echo $row['experience']; ?></strong></div>
                  </div>
                </div>
              </div>

       <?php
                }
            }
        }
       }else{
        echo "<center><strong>No Job Matched!</strong></center>";
       }
       $conn->close();
       ?>

【问题讨论】:

  • 您要解决哪个问题,转到第 2 页还是返回第 1 页?您对 SQL 注入持开放态度。您应该参数化查询。
  • 这段代码显示数据库中的数据,但是当我转到第 2 页时,假设显示数据库中的其他数据没有显示,当我再次返回第 1 页时,它不再显示数据了跨度>
  • 我已经在上面编辑了我的代码
  • 当您手动输入地址栏中的搜索信息时会发生什么?例如,如果您转到此页面:search.php?page="+page+"&search="+val+"&filter="+filter 但将变量替换为实际信息,它是否显示您的预期?
  • 没有显示数据

标签: php jquery-pagination


【解决方案1】:

我认为错误出现在您的 search.php 页面代码中。您需要更改结束限制。

 $limit = 5;

 if (isset($_GET['page'])) {
   $page = $_GET['page'];
 }else{
    $page = 1;
 }

 $start_from = ($page-1) * $limit;
 $search = $_GET['search'];
 $sql = "SELECT * FROM job_post WHERE jobtitle LIKE '%$search%' ORDER BY id_jobpost DESC LIMIT $start_from, $limit";

当您在第一页时,您正在执行:LIMIT 0, 5。当您在第二页时,您正在执行:LIMIT 5, 5。

我建议:

$limit = 5;

if (isset($_GET['page'])) {
   $page = $_GET['page'];
}else{
    $page = 1;
}

$start_from = ($page-1) * $limit;
$end_at = $page * $limit;
$search = $_GET['search'];
$sql = "SELECT * FROM job_post WHERE jobtitle LIKE '%$search%' ORDER BY id_jobpost DESC LIMIT $start_from, $end_at";

但是我也注意到,在您的搜索页面中,您正在查询内部进行查询,我认为更好的方法是使用连接,这样您只需访问数据库一次。我不知道您的数据库的结构,但下面的代码是一个更好的方法示例,这样您只需访问数据库一次:

<?php
session_start();
require_once("db.php");
$page_size = 5;

if (isset($_GET['page'])) {
   $page = $_GET['page'];
}else{
    $page = 1;
}

$start_from = ($page-1) * $page_size;
$end_at = $page * $page_size;

$search = $_GET['search'];
$sql = "
  SELECT 
    j_p.*, 
    c.* 
  FROM 
    job_post j_p, 
    company c 
  WHERE 
    jobtitle LIKE '%$search%' 
    and c.id_company = j_p.id_companyname
  ORDER BY 
    id_jobpost DESC 
  LIMIT 
    $start_from, 
    $end_at
";
$result=$conn->query($sql);
if ($result->num_rows>0) {
  while($row1 = $result1->fetch_assoc()) {
?>

  <div class="attachment-block clearfix">
    <img class="attachment-img" src="uploads/logo/<?php echo $row1['logo']; ?>" alt="Attachment Image">
    <div class="attachment-pushed">
      <h4 class="attachment-heading"><a href="view-job-post.php?id=<?php echo $row1['id_jobpost']; ?>"><?php echo $row1['jobtitle']; ?></a> <span class="attachment-heading pull-right">₱<?php echo $row1['maximumsalary']; ?>/Month</span></h4>
      <div class="attachment-text">
          <div><strong><?php echo $row1['companyname']; ?> | <?php echo $row1['province'].",".$row1['city']; ?> | Experience Required(in years): <?php echo $row1['experience']; ?></strong></div>
      </div>
    </div>
  </div>
<?php
  }
}else{
  echo "<center><strong>No Job Matched!</strong></center>";
}
$conn->close();
?>

【讨论】:

  • 好吧好吧。但是当我切换页面时数据仍然没有显示数据只显示一次并且只在第一页显示
  • 我不知道我是否可以调试这个:(
  • 我知道我的问题先生。当我输入单词示例“项目经理”时。起初“项目经理”一词存储在变量中,当我点击下一页时,值变成“project%25manager”,然后当我点击另一个页面时,值变成“project%2525manager”,依此类推。我怎样才能摆脱那个先生
  • 我终于发现了我的问题。我只需要 decodeURIComponent 我的值。谢谢
  • 太棒了!很高兴你知道了!
猜你喜欢
  • 2022-01-25
  • 2010-12-10
  • 1970-01-01
  • 2011-09-19
  • 2011-04-14
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多