2017-06-14 53 views
1

我在mongodb中的数据表中出现错误,请给解决方案... 如果任何人有参考源代码发送给我,这将对我有帮助.............. .................................................. .................................................. .................................................. ................PHP与mongodb数据表错误

Notice: Undefined index: iColumns in D:\xampp\htdocs\mongo\test3.php on line 47 
Notice: Undefined index: sEcho in D:\xampp\htdocs\mongo\test3.php on line 129 

{"sEcho":0,"iTotalRecords":9,"iTotalDisplayRecords":9,"aaData":[{"_id": 

{"$id":"5936e5e783b236680c00002a"},"name":"Mitra","age":21,"gender":"M","course":"BTECH","marks":77} 

源代码:

<?php 

mb_internal_encoding('UTF-8'); 

$database = 'university'; 
$collection = 'students'; 

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

$m_collection = $m->$database->$collection; 

/** 


    * Define the document fields to return to DataTables (as in http://us.php.net/manual/en/mongocollection.find.php). 
* If empty, the whole document will be returned. 
*/ 
$fields = array(); 

// Input method (use $_GET, $_POST or $_REQUEST) 
$input = & $_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]; 
    } 
} 

/** 
* Filtering 
* NOTE this does not match the built-in DataTables filtering which does it 
* word by word on any field. It's possible to do here, but concerned about efficiency 
* on very large collections. 
*/ 
$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; 
} 

$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); 
} 

/** 
* Output 
*/ 
$output = array(
    "sEcho" => intval($input['sEcho']), 
    "iTotalRecords" => $m_collection->count(), 
    "iTotalDisplayRecords" => $cursor->count(), 
    "aaData" => array(), 
); 

foreach ($cursor as $doc) { 
    $output['aaData'][] = $doc; 
} 

echo json_encode($output); 
+0

什么是“datable”?即使问题上的标签也说这是“不明确的”,因为该术语用于不同语言的不同组件。你需要更具体。 –

回答

1

这些都不是错误,是通知:

$iColumns = $input['iColumns']; 

$input没有键名为iColumns

"sEcho" => intval($input['sEcho']), 

同样在这里的事:$input没有名为sEcho

确保$_REQUEST包含两个键键。 或者您可以禁用通知的错误报告。

编辑: 您可以使用: $ input = & $ _REQUEST; 根据您如何将日期发送到服务器并确保发送iColumnssEcho,您应该可以使用$_GET$_POST。 如果您的前端具有表单并且发布了数据,则可以验证输入字段,以便这两个变量是必需的或给它们一个默认值。

如果你想默认情况下,(例如)以10:

$iColumns = isset($input['iColumns']) ? isset($input['iColumns']) : 10; 

和(不知道什么sEcho索引用于:

$sEcho = isset($input['sEcho'] ? intval($input['sEcho']) : 10; 
$output = array(
    "sEcho" => $sEcho, 
    "iTotalRecords" => $m_collection->count(), 
    "iTotalDisplayRecords" => $cursor->count(), 
    "aaData" => array(), 
); 

这不应该给你任何通知。

另一种选择,通知禁止通报:

[[email protected] ]$ vi /etc/php.ini 
error_reporting = E_ALL & ~E_NOTICE 

或者,在您的php文件的顶部: error_reporting(E_ALL & ~E_NOTICE);

+0

如果您有任何使用带有数据表的mongodb的引用代码 –

+0

我编辑了我的答案,参见上文。 –

+0

我有一个怀疑看到我的qustion ..如果你知道答案请立即告诉我这是我的qustion - >如果任何一个将此mysql代码转换为mongodb做...我需要用mongodb这个代码写这个 代码.. –