Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用foreach使用php创建动态html元素时出错_Php_Mysql_Foreach_Runtime Error - Fatal编程技术网

尝试使用foreach使用php创建动态html元素时出错

尝试使用foreach使用php创建动态html元素时出错,php,mysql,foreach,runtime-error,Php,Mysql,Foreach,Runtime Error,当我尝试使用PHP在HTML中动态创建一些框时,会出现以下错误: 为foreach()提供的参数无效 这是我的密码: <?php $sql = 'call getservers()'; $retval = mysqli_query( $conn,$sql ); if(! $retval ) { die('Could not get data.'); } while($row = mysqli_fetch_array($retval))

当我尝试使用PHP在HTML中动态创建一些框时,会出现以下错误:

为foreach()提供的参数无效

这是我的密码:

<?php
    $sql = 'call getservers()';
    $retval = mysqli_query( $conn,$sql );
    if(! $retval ) {
        die('Could not get data.');
    }
    while($row = mysqli_fetch_array($retval)) {
    $server_array = $row['result'];
    }
    foreach($server_array as $value) {
    echo <<<HEREDOC
            <div class="card card-custom">
                                            <div class="card-header">
                                                <div class="card-title">
                                                    <span class="card-icon">
                                                        <i class="fas fa-server text-primary text-primary"></i>
                                                    </span>
                                                    <h3 class="card-label">Server 1 
                                                    <small>192.168.1.1</small></h3>
                                                </div>
                                                <div class="card-toolbar">
                                                    <a href="#" class="btn btn-sm btn-icon btn-light-danger mr-2">
                                                        <i class="flaticon2-drop"></i>
                                                    </a>
                                                    <a href="#" class="btn btn-sm btn-icon btn-light-success mr-2">
                                                        <i class="flaticon2-gear"></i>
                                                    </a>
                                                    <a href="#" class="btn btn-sm btn-icon btn-light-primary">
                                                        <i class="flaticon2-bell-2"></i>
                                                    </a>
                                                </div>
                                            </div>
                                            <div class="card-body">No Description Given.</div>
                                        </div>
HEREDOC;
    }
?>

(MySql查询正确返回JSON数组)


任何帮助都将不胜感激。

您应该
json\u解码($server\u array,true)
以获得可循环使用的关联数组

i、 e


$server\u array
被定义为一个字符串,然后在
while
-循环的每次迭代中覆盖该字符串,因此在最后,它将只包含最后一条记录(很可能不是数组)。但是,一个更好的解决方案可能是完全删除
foreach
,并将HTML放在
中,而
直接循环,不要有两个包含相同数据的循环。替换echo@HassanALi-这会改变/解决什么问题?请尝试一下,然后告诉我。@MagnusEriksson MySQL查询返回JSONArray,其中包含表中的所有记录。结果只有一行,其中包含JSONArray。下面是一个带有示例数据的结果:[{“服务器名称”:“测试服务器1”,“服务器ip”:“192.168.1.2”,“服务器主机名”:“testserver1.example.com”},{“服务器名称”:“测试服务器2”,“服务器ip”:“192.169.1.105”,“服务器主机名”:“testserver2.example.com”}]
<?php
$server_array = '[{"server_name": "Test Server 1", "server_ip": "192.168.1.2", "server_hostname": "testserver1.example.com"},{"server_name": "Test Server 2", "server_ip": "192.169.1.105", "server_hostname": "testserver2.example.com"}]';
$server_array = json_decode($server_array, true);

foreach($server_array as $value) {
    foreach($value as $item) {
        echo <<<HEREDOC
            $item;
HEREDOC;
    }
}