重定向与表单变量不能正常工作 [英] Redirect with form variable doesn't work properly

查看:123
本文介绍了重定向与表单变量不能正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对文件(search.php中),使用接收到一个变量,如下所示:

 在session_start();
如果(使用isset($ _ POST ['搜索'])){
    $ _SESSION [搜索] = $ _ POST ['搜索'];
}
 

形式:

 <形式ID =搜索框行动=/ search.php中的方法=邮报>
      <输入ID =搜索NAME =搜索类型=文本占位符=搜索产品>

  <输入ID =提交类型=提交值=搜索>< /形式GT;
 

所以它提交给自己

我有以下的重定向到位:

 的RewriteCond%{THE_REQUEST} \ S / +搜索\的.php? [NC]
重写规则^ /搜索/? [R = 301,L]
的RewriteCond%{} REQUEST_FILENAME!-d
的RewriteCond%{} REQUEST_FILENAME!-f
重写规则^搜索/?$ /search.php? [L,QSA]

的RewriteCond%{THE_REQUEST} \ S / +搜索\ .PHP \ pageNum_RS_Search =([^ \ S&安培] +)?&安培; totalRows_RS_Search =([^ \ S&功放;] +)[NC]
重写规则^ /搜索/ 2%/ 1%? [R = 301,L]
的RewriteCond%{} REQUEST_FILENAME!-d
的RewriteCond%{} REQUEST_FILENAME!-f
重写规则^搜索/([^ /] +)/([^ /] +)/ $ /search.php?pageNum_RS_Search=$2&totalRows_RS_Search=$1 [L,QSA]
 

这重写它的search.php搜索/和寻呼搜索/ 12/1,它就是我想要做的事。

在执行搜索的$ _ POST [搜索]变量不被使用的问题。没有适当的重定向它工作正常。 任何帮助欢迎

这是剧本的分页和搜索请求:

  $ maxRows_RS_Search = 7;
$ pageNum_RS_Search = 0;
如果(使用isset($ _ GET ['pageNum_RS_Search'])){
  $ pageNum_RS_Search = $ _GET ['pageNum_RS_Search'];
}
$ startRow_RS_Search = $ pageNum_RS_Search * $ maxRows_RS_Search;


$ colname_RS_Search =-1;
如果(使用isset($ _ SESSION ['搜索'])){
  $ colname_RS_Search = $ _SESSION [搜索];
}
mysql_select_db($ database_dconn,$ dconn);
$ query_RS_Search =的sprintf(SELECT * FROM产品WHERE(类别LIKE%s或products.Manufacturer如%s或products.Model如%s或products.Color如%S)和分类!='舞台钢琴和类别!= 最近的钢琴和类别!='最近的键盘和隐藏='不',GetSQLValueString(%。$ colname_RS_Search。%,文),GetSQLValueString(%。$ colname_RS_Search。% ,文),GetSQLValueString(%$ colname_RS_Search%,文),GetSQLValueString(%$ colname_RS_Search%,文))。。。。;


$ query_limit_RS_Search =的sprintf(%S LIMIT%D,%D,$ query_RS_Search,$ startRow_RS_Search,$ maxRows_RS_Search);
$ RS_Search =请求mysql_query($ query_limit_RS_Search,$ dconn)或死亡(mysql_error());
$ row_RS_Search = mysql_fetch_assoc($ RS_Search);

如果(使用isset($ _ GET ['totalRows_RS_Search'])){
  $ totalRows_RS_Search = $ _GET ['totalRows_RS_Search'];
} 其他 {
  $ all_RS_Search =请求mysql_query($ query_RS_Search);
  $ totalRows_RS_Search = mysql_num_rows($ all_RS_Search);
}
$ totalPages_RS_Search = CEIL($ totalRows_RS_Search / $ maxRows_RS_Search)-1;

$ queryString_RS_Search =;
如果(!空($ _ SERVER ['QUERY_STRING'])){
  $ PARAMS =爆炸(&放大器;,$ _ SERVER ['QUERY_STRING']);
  $ newParams =阵列();
  的foreach($ PARAMS为$参数){
    如果(stristr($参数,pageNum_RS_Search)==假放;&安培;
        stristr($参数,totalRows_RS_Search)== FALSE){
      array_push($ newParams,$参数);
    }
  }
  如果(计数($ newParams)!= 0){
    $ queryString_RS_Search =与& 。ヶ辆(破灭(与&,$ newParams));
  }
}
$ queryString_RS_Search = sprintf的(&放大器; totalRows_RS_Search =%D%S,$ totalRows_RS_Search,$ queryString_RS_Search);
 

呼叫触发如下:

 < TD><如果PHP($ pageNum_RS_Search> 0){//如果不是第一页&GT显示;
             &所述; A HREF =&其中; PHP的的printf(%S pageNum_RS_Search =%D%的,$当前第0,$ queryString_RS_Search?;>?)>首先&所述; / a取代;
             < PHP} //显示如果不是第一页>< / TD>
         < TD><如果PHP?($ pageNum_RS_Search> 0){//如果不是第一页&GT显示;
             < A HREF =< PHP的printf?(%S pageNum_RS_Search =%D%S,$当前页,MAX(0,$ pageNum_RS_Search  -  1),$ queryString_RS_Search?;>)> previous&所述; / a取代;
             < PHP} //显示如果不是第一页>< / TD>
         < TD>< PHP如果($ pageNum_RS_Search< $ totalPages_RS_Search){//显示如果不是最后一页&GT?;
             < A HREF =< PHP的printf(%S pageNum_RS_Search =%D%S,$当前页,分($ totalPages_RS_Search,$ pageNum_RS_Search + 1),$ queryString_RS_Search?;>)>接下来< / A>
             < PHP} //显示如果不是最后一页>< / TD>
         < TD>< PHP如果($ pageNum_RS_Search< $ totalPages_RS_Search){//显示如果不是最后一页&GT?;
             < A HREF =< PHP的printf(%S pageNum_RS_Search =%D%S,$当前页,$ totalPages_RS_Search,$ queryString_RS_Search?;>)>最后< / A>
               < PHP} //显示如果不是最后一页>< / TD>
 

解决方案

是帖子的内容,当你做使用研究标记从您的规则重定向或做确实丢失从PHP重定向。

如果你想用pretty的URL中POST操作,最好是修改动作你的组成部分是这样的:

 <形式ID =搜索框行动=/搜索的方法=邮报>
      <输入ID =搜索NAME =搜索类型=文本占位符=搜索产品>

  <输入ID =提交类型=提交值=搜索>< /形式GT;
 

你的规则还更正的版本是这样的:

 的RewriteCond%{REQUEST_METHOD}!POST
的RewriteCond%{THE_REQUEST} \ S / +搜索\ .PHP [\ S?] [NC]
重写规则^ /搜索/? [R = 301,L]

的RewriteCond%{} REQUEST_FILENAME!-d
的RewriteCond%{} REQUEST_FILENAME!-f
重写规则^搜索/?$ /search.php [NC,L,QSA]

的RewriteCond%{REQUEST_METHOD}!POST
的RewriteCond%{THE_REQUEST} \ S / +搜索\ .PHP \ pageNum_RS_Search =([^ \ S&安培] +)?&安培; totalRows_RS_Search =([^ \ S&功放;] +)[NC]
重写规则^ /搜索/ 2%/ 1%? [R = 301,L]

的RewriteCond%{} REQUEST_FILENAME!-d
的RewriteCond%{} REQUEST_FILENAME!-f
重写规则^搜索/([^ /] +)/([^ /] +)/ $ /search.php?pageNum_RS_Search=$2&totalRows_RS_Search=$1 [L,QSA]
 

的RewriteCond%{REQUEST_METHOD}!POST 将跳过重定向规则 POST 的要求。

I have on file (search.php) that uses a variable that is received as follows:

session_start();
if (isset($_POST['Search'])){
    $_SESSION['Search'] = $_POST['Search'];
}

The form:

<form id="searchbox" action="/search.php" method="post">
      <input id="search" name="Search" type="text" placeholder="Search Products">

  <input id="submit" type="submit" value="Search" ></form>

so it submits to itself

I have the following redirects in place:

rewritecond %{THE_REQUEST} \s/+search\.php? [NC]
rewriterule ^ /Search/? [R=301,L]
rewritecond %{REQUEST_FILENAME} !-d
rewritecond %{REQUEST_FILENAME} !-f
rewriterule ^Search/?$ /search.php? [L,QSA]

rewritecond %{THE_REQUEST} \s/+search\.php\?pageNum_RS_Search=([^\s&]+)&totalRows_RS_Search=([^\s&]+) [NC]
rewriterule ^ /Search/%2/%1? [R=301,L]
rewritecond %{REQUEST_FILENAME} !-d
rewritecond %{REQUEST_FILENAME} !-f
rewriterule ^Search/([^/]+)/([^/]+)/?$ /search.php?pageNum_RS_Search=$2&totalRows_RS_Search=$1 [L,QSA]

Which rewrites it search.php to Search/ and the paging to Search/12/1 Which is what I want it to do.

The problem is when a search is executed the $_POST['Search'] variable is not being used. Without the redirects in place it works fine. Any help welcome

This is the script for the paging and Search request:

$maxRows_RS_Search = 7;
$pageNum_RS_Search = 0;
if (isset($_GET['pageNum_RS_Search'])) {
  $pageNum_RS_Search = $_GET['pageNum_RS_Search'];
}
$startRow_RS_Search = $pageNum_RS_Search * $maxRows_RS_Search;


$colname_RS_Search = "-1";
if (isset($_SESSION['Search'])) {
  $colname_RS_Search = $_SESSION['Search'];
}
mysql_select_db($database_dconn, $dconn);
$query_RS_Search = sprintf("SELECT * FROM products WHERE (Category LIKE %s OR products.Manufacturer LIKE  %s OR products.Model LIKE  %s OR products.Color LIKE  %s) AND Category!= 'Stage Pianos' AND Category!= 'Recent Pianos' AND Category!= 'Recent Keyboards' AND hidden ='no'", GetSQLValueString("%" . $colname_RS_Search . "%", "text"),GetSQLValueString("%" . $colname_RS_Search . "%", "text"),GetSQLValueString("%" . $colname_RS_Search . "%", "text"),GetSQLValueString("%" . $colname_RS_Search . "%", "text"));


$query_limit_RS_Search = sprintf("%s LIMIT %d, %d", $query_RS_Search, $startRow_RS_Search, $maxRows_RS_Search);
$RS_Search = mysql_query($query_limit_RS_Search, $dconn) or die(mysql_error());
$row_RS_Search = mysql_fetch_assoc($RS_Search);

if (isset($_GET['totalRows_RS_Search'])) {
  $totalRows_RS_Search = $_GET['totalRows_RS_Search'];
} else {
  $all_RS_Search = mysql_query($query_RS_Search);
  $totalRows_RS_Search = mysql_num_rows($all_RS_Search);
}
$totalPages_RS_Search = ceil($totalRows_RS_Search/$maxRows_RS_Search)-1;

$queryString_RS_Search = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_RS_Search") == false && 
        stristr($param, "totalRows_RS_Search") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_RS_Search = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_RS_Search = sprintf("&totalRows_RS_Search=%d%s", $totalRows_RS_Search, $queryString_RS_Search);

paging is triggered as follows:

<td><?php if ($pageNum_RS_Search > 0) { // Show if not first page ?>
             <a href="<?php printf("%s?pageNum_RS_Search=%d%s", $currentPage, 0, $queryString_RS_Search); ?>">First</a>
             <?php } // Show if not first page ?></td>
         <td><?php if ($pageNum_RS_Search > 0) { // Show if not first page ?>
             <a href="<?php printf("%s?pageNum_RS_Search=%d%s", $currentPage, max(0, $pageNum_RS_Search - 1), $queryString_RS_Search); ?>">Previous</a>
             <?php } // Show if not first page ?></td>
         <td><?php if ($pageNum_RS_Search < $totalPages_RS_Search) { // Show if not last page ?>
             <a href="<?php printf("%s?pageNum_RS_Search=%d%s", $currentPage, min($totalPages_RS_Search, $pageNum_RS_Search + 1), $queryString_RS_Search); ?>">Next</a>
             <?php } // Show if not last page ?></td>
         <td><?php if ($pageNum_RS_Search < $totalPages_RS_Search) { // Show if not last page ?>
             <a href="<?php printf("%s?pageNum_RS_Search=%d%s", $currentPage, $totalPages_RS_Search, $queryString_RS_Search); ?>">Last</a>
               <?php } // Show if not last page ?></td>

解决方案

Yes POST content indeed gets lost when you do a redirect using R flag from your rules OR do a redirect from PHP.

If you want to use pretty URL in POST operation it is better to change the action part of your form like this:

<form id="searchbox" action="/Search" method="post">
      <input id="search" name="Search" type="text" placeholder="Search Products">

  <input id="submit" type="submit" value="Search" ></form>

Also corrected version of your rules would be this:

RewriteCond %{REQUEST_METHOD} !POST
rewritecond %{THE_REQUEST} \s/+search\.php[\s?] [NC]
rewriterule ^ /Search/? [R=301,L]

rewritecond %{REQUEST_FILENAME} !-d
rewritecond %{REQUEST_FILENAME} !-f
rewriterule ^Search/?$ /search.php [NC,L,QSA]

RewriteCond %{REQUEST_METHOD} !POST
rewritecond %{THE_REQUEST} \s/+search\.php\?pageNum_RS_Search=([^\s&]+)&totalRows_RS_Search=([^\s&]+) [NC]
rewriterule ^ /Search/%2/%1? [R=301,L]

rewritecond %{REQUEST_FILENAME} !-d
rewritecond %{REQUEST_FILENAME} !-f
rewriterule ^Search/([^/]+)/([^/]+)/?$ /search.php?pageNum_RS_Search=$2&totalRows_RS_Search=$1 [L,QSA]

RewriteCond %{REQUEST_METHOD} !POST will skip redirect rules for POST requests.

这篇关于重定向与表单变量不能正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆