Foreach Указан неверный аргумент. - PullRequest
0 голосов
/ 23 февраля 2012

Здравствуйте, я использую flexigrid и у меня есть проблема, я не знаю, почему она продолжает говорить Invalid argument supplied for foreach() и Undefined variable: rows Я посмотрел на код, который мне кажется правильным, я не знаю, возможно, я упустил из виду, но вы можете мне помочь, спасибо

Вот мой код.

<?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 Ответ

0 голосов
/ 23 февраля 2012

Ваш $rows никогда не определяется и не инициализируется перед приведенным ниже фрагментом (скорее всего, его первое использование).В таком случае непропорционально маловероятно, что foreach будет прогнозировать переменную, по которой будет выполняться цикл.

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