当前位置: 首页 > 知识库问答 >
问题:

PHP:Warning:count():参数必须是实现可计数的数组或对象

索正豪
2023-03-14

我想选择最佳查找结果。我得到了一个错误:在这里,我在下面的文件中显示了HTML表单操作和DB连接,请检查它。错误消息也提到了这一部分。我使用的是PHP7.2,但遇到了一些问题

警告:count():参数必须是在第64行的D:\xammp\htdocs\search\index.php中实现
可计数的数组或对象

警告:在第37行的D:\xammp\htdocs\search\index.php中使用未定义的常量city_id-假设'city_id'(这将在未来的PHP版本中引发错误)

帮我…错误消息。

PHP:

<?php
$i = 1;
if (count($searchdata) > 0) {
    foreach ($searchdata as $places) {
        echo '<tr>';
        echo '<th>' . $i . '</th>';
        echo '<td>' . $places['city'] . '</td>';
        echo '<td>' . $places['visiting_place'] . '</td>';
        echo '<td>' . $places['history'] . '</td>';
        echo '</tr>';
        $i++;
    }
} else {
    echo '<td colspan="4">No Search Result Found.</td>';
}
?>

我使用PHP像:

<?php
$searchdata = [];
$keyword = '';
if (isset($_POST['search'])) {
    $city = $_POST['city'];
    $keyword = $_POST['keyword'];
    $searchdata = $model->getVisitinPlaceData($city, $keyword);
}
?>

数据库连接和tabel数据获取

<?php 
class Db {
    private $hostname = 'localhost';
    private $username = 'root';
    private $password = '';
    private $database = 'test';
    private $conn;
    public function __construct() { 
        $this->conn = mysqli_connect($this->hostname, $this->username, $this->password, $this->database); 
        if(!$this->conn) {
            echo 'Database not connected';
        }
    }
    public function getTouristCity(){
        $query = "SELECT * FROM tourist_city WHERE is_enabled = '1'";
        $result = mysqli_query($this->conn, $query);
        return $result;
    }
    public function getVisitingPlaces(){
        $query = "SELECT * FROM visiting_places WHERE is_enabled = '1'";
        $result = mysqli_query($this->conn, $query);
        return $result;
    }
    public function getVisitinPlaceData($cityid, $keyword){
        $sWhere = '';
        $where = array();
        if($cityid > 0) {
            $where[] = 'V.city_id = '.$cityid.' AND V.is_enabled = "1"';
        }

        if($keyword != '') {
            $keyword = trim($keyword);
            $where[] = "( V.visiting_place LIKE '%$keyword%' OR  V.history LIKE '%$keyword%'  OR  C.city LIKE '%$keyword%' )";
        }
        $sWhere     = implode(' AND ', $where);
        if($sWhere) {
            $sWhere = 'WHERE '.$sWhere;
        } 
        if(($cityid > 0) || ($keyword != '')) {
            $query = "SELECT * FROM visiting_places AS V JOIN tourist_city AS C ON C.city_id = V.city_id $sWhere ";
            $result = mysqli_query($this->conn, $query);
            return $result;
        }
    }
}
?>

HTML表单动作

<form action="" method="post" > 

            <div class="col-sm-3"> 

                <select name="city" class="form-control">

                <option value="0">Select City</option>
                <?php foreach($turistCity as $city) {
                    $checked = ($_POST['city'] == $city[city_id])? 'selected' : '';
                    echo '<option value="'.$city[city_id].'" '.$checked.'>'.$city[city].'</option>';
                }
                ?>
                </select>
            </div>
            <div class="col-sm-3"> 
             <input type="text" name="keyword" placeholder="Keword" value="<?php echo $keyword;?>" class="form-control"> 
            </div>

            <button name="search" type="submit" class="btn btn-primary">Search</button>
        </form>

共有3个答案

西门展
2023-03-14

有时您无法包装使用count的所有子句,或者您正在使用几个count,您只需要创建不可数的空数组,只需在实际代码之前添加。

if(!is_countable($your_array))$your_array = Array();
狄高畅
2023-03-14

PHP7.3给出了错误://如果请求的页面不存在。如果($elements['page']

更改为:if(is_countable($元素['page']){

那修好了它!

岳君之
2023-03-14

只需将其包装在一个条件中,以检查其是否可计数,因此。。

// PHP >= 7.3
if(is_countable($searchdata)) {
    // Do something
}

// PHP >= 7.1
if(is_iterable($searchdata)) {
    // Do something
}

注意:除非您明确地将其定义为true,否则您永远不应该假设任何事情都是true。count($某物)暗示期望它确实是一个数组或您可以计数的东西。如果情况并非总是如此,那么你在继续之前要检查一下。

编辑:对PHP使用is_iterable()

 类似资料:
  • 我在PHPmyadmin中有一些奇怪的错误。 ./libraries/pmd_common.php#405 count()中的警告:参数必须是实现可计数的数组或对象 回溯 ./db_designer.php#102:PMA_getLoadingPage(字符串'db_Name') 如何修复它?

  • 警告:count():参数必须是一个数组或一个对象,它在invTranslate_translated_menu_link_alter()中实现了Countable()(第55行来自\站点\所有\模块\自定义\invTranslate\invTranslate.module)。 invTranslate.module是一个自定义模块。 第55行是:

  • 我使用的是Laravel5.3,我的php版本是7.1 当我调用SoftDeletes类时,我得到了那个错误 Builder.php第1231行中的ErrorException:count():参数必须是实现可计数的数组或对象 这是我的模型 这是我的控制器 当我删除count()函数时,也会得到相同的错误 如何解决此错误

  • 我面临着奇怪的案子。我在生产环境中面临一个错误,而在开发中它工作正常。 开发: Laravel 5.4.28 PHP 7.0.13 MYSQL 5.7.17 制作:Laravel 5.4.28 PHP 7.2.1 MYSQL 5.7.20 在实现代码中。我用过: 在开发中,它运行良好。但是在生产中,它给我这个错误:Count():参数必须是一个数组或一个在Builder.php中实现可数的对象(第

  • 我有这个代码返回一个错误: 参数必须是实现可数的数组或对象?

  • 我正在处理symfony,收到了这个消息 参数必须是实现可数的数组或对象 此消息仅针对PHP7.2.14显示,不针对PHP7.1.26。 我想在服务器上应用的解决方案,就像这一个phpmyAdmin。 我知道有一些解决方案涉及像这样更改代码。 但我想要一个解决方案,是所有页面,所以在服务器端。 提前谢谢!