2012-02-23 310 views
0

你好我正在使用flexigrid,我有一個問題,我不知道爲什麼它繼續說 Invalid argument supplied for foreach()Undefined variable: rows我看着代碼它似乎對我來說,idont知道我可能忽略了,但你能幫我,謝謝Foreach提供了無效的參數。

繼承人我的代碼。

<?php 
$page = isset($_POST['page']) ? $_POST['page'] : 1; 
$rp = isset($_POST['rp']) ? $_POST['rp'] : 10; 
$sortname = isset($_POST['sortname']) ? $_POST['sortname'] : 'name'; 
$sortorder = isset($_POST['sortorder']) ? $_POST['sortorder'] : 'desc'; 
$query = isset($_POST['query']) ? $_POST['query'] : false; 
$qtype = isset($_POST['qtype']) ? $_POST['qtype'] : false; 


$usingSQL = true; 
function runSQL($rsql) { 

    $db['default']['hostname'] = "localhost"; 
    $db['default']['username'] = 'root'; 
    $db['default']['password'] = ""; 
    $db['default']['database'] = "testdb"; 

    $db['live']['hostname'] = 'localhost'; 
    $db['live']['username'] = 'root'; 
    $db['live']['password'] = ''; 
    $db['live']['database'] = 'testdb'; 

    $active_group = 'default'; 

    $base_url = "http://".$_SERVER['HTTP_HOST']; 
    $base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']); 

    $connect = mysql_connect($db[$active_group]['hostname'],$db[$active_group]['username'],$db[$active_group]['password']) or die ("Error: could not connect to database"); 
    $db = mysql_select_db($db[$active_group]['database']); 

    $result = mysql_query($rsql) or die ($rsql); 
    return $result; 
    mysql_close($connect); 
} 

function countRec($fname,$tname) { 
     $sql = "SELECT count($fname) FROM $tname "; 
    $result = runSQL($sql); 
    while ($row = mysql_fetch_array($result)) { 
      return $row[0]; 
    } 
} 

$sort = "ORDER BY $sortname $sortorder"; 
$start = (($page-1) * $rp); 

$limit = "LIMIT $start, $rp"; 

$where = ""; 
if ($query) $where = " WHERE $qtype LIKE '%".mysql_real_escape_string($query)."%' "; 

$sql = "SELECT * FROM city $where $sort $limit"; 
$result = runSQL($sql); 

$total = countRec("ID","city $where"); 

if(!isset($usingSQL)){ 
    include dirname(__FILE__).'/countryArray.inc.php'; 
    if($qtype && $query){ 
      $query = strtolower(trim($query)); 
      foreach($rows AS $key => $row){ 
        if(strpos(strtolower($row[$qtype]),$query) === false){ 
          unset($rows[$key]); 
        } 
      } 
    } 
    //Make PHP handle the sorting 
    $sortArray = array(); 
    foreach($rows AS $key => $row){ 
      $sortArray[$key] = $row[$sortname]; 
    } 
    $sortMethod = SORT_ASC; 
    if($sortorder == 'desc'){ 
      $sortMethod = SORT_DESC; 
    } 
    array_multisort($sortArray, $sortMethod, $rows); 
    $total = count($rows); 
    $rows = array_slice($rows,($page-1)*$rp,$rp); 
} 
header("Content-type: application/json"); 
$jsonData = array('page'=>$page,'total'=>$total,'rows'=>array()); 
foreach($rows AS $row){ **//THIS IS MY LINE 82** 
    //If cell's elements have named keys, they must match column names 
    //Only cell's with named keys and matching columns are order independent. 
    $entry = array('id'=>$row['iso'], 
      'cell'=>array(
        'ID'=>$row['ID'], 
        'Name'=>$row['Name'], 
        'CountryCode'=>$row['CountryCode'], 
        'District'=>$row['District'], 
        'Population'=>$row['Population'] 

      ), 
    ); 
    $jsonData['rows'][] = $entry; 
} 
echo json_encode($jsonData); 

在此先感謝。

+1

返回後執行任何代碼沒有意義(mysql_close()根本沒有被執行)。此外,在while循環中沒有任何意義,或者在記錄集中只有1個結果時使用while循環。 $ rows變量沒有被確定 – 2012-02-23 13:22:04

回答

0

您的$rows永遠不會在下面的代碼片段之前定義或初始化(很可能是它的第一次使用)。在這種情況下,foreach將不可能預測變量循環。

$query = strtolower(trim($query)); 
     foreach($rows AS $key => $row){ 
       if(strpos(strtolower($row[$qtype]),$query) === false){ 
         unset($rows[$key]); 
       } 
     } 
相關問題