ホームページ >バックエンド開発 >PHPチュートリアル >thinkphp でのページング中にクエリ条件を変更しない問題

thinkphp でのページング中にクエリ条件を変更しない問題

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-23 13:48:281026ブラウズ

マニュアルでは:

import('ORG.Util.Page');// 导入分页类$mapcount      = $User->where($map)->count();// 查询满足要求的总记录数$Page       = new Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数//分页跳转的时候保证查询条件foreach($map as $key=>$val) {    $Page->parameter   .=   "$key=".urlencode($val).'&';}$show       = $Page->show();// 分页显示输出


ここで私のクエリ条件は
$map['code'] = array('in',$array); を使用しています
2 ページ目をクリックすると、クエリ条件は成功しません。ここではinは使えないって本当ですか?


ディスカッションに返信(解決策)

urlencode だけでは不十分です。最初に json 化するかシリアル化する必要があります

foreach($map as $key=>$val) {    $Page->parameter   .=   "$key=".urlencode(json_encode($val)).'&';}

これに変更してもまだ機能しません。

$array はどこから来たのですか? $_GET $_POST または $_REQUEST

ここでの $array は、データベース内のテーブルをクエリしてフィールド値の配列を取得するための条件として $_POST のパラメーターを使用することです。

私もこの問題に遭遇し、解決策を見つけました
import('ORG.Util.Page');// ページング クラスをインポートします
$count=$res->where($sear)-> count(); //データ項目数をクエリする
$Page=new Page($count,2);//ページング関数をインスタンス化する
//ページングジャンプ時のクエリ条件を確認する
foreach($sear as $key=> ;$val ) {
if(!is_array($val)) {
$Page->parameter .= "$key=".urlencode($val)."&";//ページに値を代入
}
}
$ show=$Page->show(); // ページングで出力を表示します

それを実現するためにここに判定を追加します

配列の内容は次のとおりです:
$map['code'] = array('in ',$ array);

しかし、クエリ条件は次のとおりです:
"$key=".urlencode($val).'&'

もちろんこれは機能しません

上記はまだ機能しません

foreach($ $key =>$val) {
$Page->parameter .= "$key=".urlencode($val).'&';
echo "$key=".urlencode($val). "&"; //出力を見てください
}

解決策を探しています
//ページにジャンプするときのクエリ条件を確認してください
foreach($map as $key=>$val) {
$Page- >parameter .= "$key=".urlencode($val).'&';
}
"$key=".urlencode($val).'&';ここでの $val はあなたのものを指します条件
あなたの条件は $map['code'] = array('in',$array); です。 次に、それを
foreach($map as $key=>$val) {
$Page->parameter に変更します。 = "$key=".urlencode($code).'&';
}

foreach($map as $key=>$val) の前に $map を見られませんか {

(print_r( $map ))
データの保存方法を知っているなら、その方法も知りませんか?

//クエリ

public function search() {
$res=D('Info');
$sear['name'] = array('like', '%'.$name.'%');
import('ORG.Util.Page');//ページング クラスをインポートします
$count=$res->where($sear)->count(); //データ件数を問い合わせる
$Page=new Page($count,2);//ページング関数をインスタンス化する
//ページングにジャンプする際の問い合わせ条件を確認する
foreach($name as $key=>$ val) {
$Page->parameter .= "$key=".urlencode($val)."&";//ページに値を代入
}
$show=$Page->show();/ /Page 表示 出力
これは私が使用したクエリ ページング コードです。見てください。先ほど投稿したものは見つかりますが、ルールに準拠していません

これは http://blog.sina をまとめたドキュメントです。 .com.cn/s /blog_80742e010101acfq.html をご覧ください

皆さんありがとうございます。それでもまだ機能しません。

page.class.php のソースコードを詳しく見てみましょう。 page->show メソッドで page->パラメータが処理されます。パラメーター属性は、文字列と配列という 2 つの値を渡す方法をサポートしています。文字列の形式は var1=val1&var2=val2.... です。ソースコードの処理を参照してください:

$url  =  $_SERVER['REQUEST_URI'].(strpos($_SERVER['REQUEST_URI'],'?')?'':"?").$this->parameter;        $parse = parse_url($url);        if(isset($parse['query'])) {            parse_str($parse['query'],$params);            unset($params[$p]);            $url   =  $parse['path'].'?'.http_build_query($params);        }


この場合、in、like、between の条件を処理することは確かに不可能です。

投稿者にどうやって解決したか聞いてもいいですか

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。