草庐IT

php - 数据表过滤器,搜索 mongodb php 不运行

coder 2023-11-03 原文

在此代码过滤器中,搜索和分页无法正常工作我自己已经尝试过但没有用,所以请检查代码给我任何解决方案或与此查询相关的任何引用。甚至任何与此代码文件或文档相关的内容都将有助于我追求这个概念

    <?php

mb_internal_encoding('UTF-8');

$database   = 'test';
$collection = 'user';

/**
 * MongoDB connection
 */
try{
        // Connecting to server
        $m = new MongoClient(  );
    }catch(MongoConnectionException $connectionException){
        print $connectionException;
        exit;
    }

$m_collection = $m->$database->$collection;    
$input = $fields = $totalRecords = $data = array();
$input = & $_REQUEST;
$fields = array('id', 'name', 'email', 'gender,');

// Input method (use $_GET, $_POST or $_REQUEST)


/**
 * Handle requested DataProps
 */

// Number of columns being displayed (useful for getting individual column search info)
$iColumns = & $input['iColumns'];

// Get mDataProp values assigned for each table column
$dataProps = array();
for ($i = 0; $i < $iColumns; $i++) {
    $var = 'mDataProp_'.$i;
    if (!empty($input[$var]) && $input[$var] != 'null') {
        $dataProps[$i] = $input[$var];
    }
}

$searchTermsAny = array();
$searchTermsAll = array();

if ( !empty($input['sSearch']) ) {
    $sSearch = $input['sSearch'];

    for ( $i=0 ; $i < $iColumns ; $i++ ) {
        if ($input['bSearchable_'.$i] == 'true') {
            if ($input['bRegex'] == 'true') {
                $sRegex = str_replace('/', '\/', $sSearch);
            } else {
                $sRegex = preg_quote($sSearch, '/');
            }
            $searchTermsAny[] = array(
                $dataProps[$i] => new MongoRegex( '/'.$sRegex.'/i' )
            );
        }
    }
}

// Individual column filtering
for ( $i=0 ; $i < $iColumns ; $i++ ) {
    if ( $input['bSearchable_'.$i] == 'true' && $input['sSearch_'.$i] != '' ) {
        if ($input['bRegex_'.$i] == 'true') {
            $sRegex = str_replace('/', '\/', $input['sSearch_'.$i]);
        } else {
            $sRegex = preg_quote($input['sSearch_'.$i], '/');
        }
        $searchTermsAll[ $dataProps[$i] ] = new MongoRegex( '/'.$sRegex.'/i' );
    }
}

$searchTerms = $searchTermsAll;
if (!empty($searchTermsAny)) {
    $searchTerms['$or'] = $searchTermsAny;
}
 $totalRecords =$m_collection->count();
$cursor = $m_collection->find($searchTerms, $fields);

/**
 * Paging
 */
if ( isset( $input['iDisplayStart'] ) && $input['iDisplayLength'] != '-1' ) {
    $cursor->limit( $input['iDisplayLength'] )->skip( $input['iDisplayStart'] );
}

/**
 * Ordering
 */
if ( isset($input['iSortCol_0']) ) {
    $sort_fields = array();
    for ( $i=0 ; $i<intval( $input['iSortingCols'] ) ; $i++ ) {
        if ( $input[ 'bSortable_'.intval($input['iSortCol_'.$i]) ] == 'true' ) {
            $field = $dataProps[ intval( $input['iSortCol_'.$i] ) ];
            $order = ( $input['sSortDir_'.$i]=='desc' ? -1 : 1 );
            $sort_fields[$field] = $order;
        }
    }
    $cursor->sort($sort_fields);
}


foreach ( $cursor as $doc ) 
{   $name = '<a href="profile.php?secure='.$doc['_id'].' " style = "color:red;">'.$doc['name'].'</a>';
    $data[] = array($name, $doc['email'], $doc['gender]);
}

/**
 * Output
 */
$json_data = array(  
     "draw"=> intval( $input['draw'] ),
   "recordsTotal" =>intval ($totalRecords),
    "recordsFiltered" => intval($totalRecords),
    "data"            => $data

);    

echo json_encode( $json_data );

And also i need to Join two tables as given below.

表一

表2

最佳答案

我是这样做的:

$('#datatable_emp_details').dataTable({
    "sServerMethod": "POST", 
    "bProcessing": true,
    "bServerSide": true,
    "sAjaxSource": "get_data.php"
});

get_data.php:

<?php
$mongo      = new MongoClient();
$database   = $mongo->selectDb('dbtest');
$collection = $database->selectCollection('empDetails');
$skip       = (int)$_REQUEST['iDisplayStart'];
$limit      = (int)$_REQUEST['iDisplayLength'];
$search     = $_REQUEST['sSearch'];
$sortIndex  = $_REQUEST['iSortCol_0'];

$sortArray  = array('emp_id', 'first_name', 'last_name', 'position', 'email', 'office', 'start_date', 'age', 'salary', 'projects'
);
$sortByCol  = $sortArray[$sortIndex];
$sortTypeTxt= $_REQUEST['sSortDir_0'];  // asc/desc
$sortType = -1;
if( $sortTypeTxt == 'asc' )
{
    $sortType = 1;
}
if( $search != '' )
{
    $condtion = array(
                    '$or' => array(
                        array('emp_id'    => $search),
                        array('first_name'=> new MongoRegex('/'. $search .'/i')),   // i for case insensitive
                        array('last_name' => new MongoRegex('/'. $search .'/i')),
                        array('position'  => new MongoRegex('/'. $search .'/i')),
                        array('email'     => new MongoRegex('/'. $search .'/i')),
                        array('office'    => new MongoRegex('/'. $search .'/i')),
                        array('start_date'=> new MongoRegex('/'. $search .'/i')),
                        array('age'       => new MongoRegex('/'. $search .'/i')),
                        array('salary'    => new MongoRegex('/'. $search .'/i')),
                        array('projects'  => new MongoRegex('/'. $search .'/i'))
                    )
                );
    $resultSet =   $collection->find($condtion)->limit($limit)->skip($skip)->sort(array($sortByCol => $sortType));
}
else
{
    $resultSet  = $collection->find()->limit($limit)->skip($skip)->sort(array($sortByCol => $sortType))->sort(array($sortByCol => $sortType));
}
$data = array();
if( count( $resultSet ) > 0 )
{
    foreach ($resultSet as $document)
    {
        $data[] = $document;
    }
}
$resultSet  = $collection->find();
$iTotal     = count($resultSet);
$rec = array(
    'iTotalRecords' => $iTotal,
    'iTotalDisplayRecords' => $iTotal,
    'aaData' => array()
);
$k=0;
if (isset($data) && is_array($data)) {
    foreach ($data as $item) {
        $rec['aaData'][$k] = array(
            0  => $item['emp_id'],
            1  => $item['first_name'],
            2  => $item['last_name'],
            3  => $item['position'],
            4  => $item['email'],
            5  => $item['office'],
            6  => $item['start_date'],
            7  => $item['age'],
            8  => $item['salary'],
            9  => $item['projects'],
            10 => '<a href="javascript:void(0);" class="edit_emp" id="'. $item['emp_id'] .'">Edit</a> | <a href="javascript:void(0);" class="delete_emp" id="'. $item['emp_id'] .'">Delete</a>'
        );
        $k++;
    }
}
echo json_encode($rec);
exit;
?>

Github repository link

关于php - 数据表过滤器,搜索 mongodb php 不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44627814/

有关php - 数据表过滤器,搜索 mongodb php 不运行的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  4. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  7. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  8. ruby-on-rails - Nokogiri:使用 XPath 搜索 <div> - 2

    我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll

  9. ruby-on-rails - 无法让 rspec、spork 和调试器正常运行 - 2

    GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'

  10. ruby-on-rails - before_filter 运行多个方法 - 2

    是否有可能:before_filter:authenticate_user!||:authenticate_admin! 最佳答案 before_filter:do_authenticationdefdo_authenticationauthenticate_user!||authenticate_admin!end 关于ruby-on-rails-before_filter运行多个方法,我们在StackOverflow上找到一个类似的问题: https://

随机推荐