如何让 PHP 循环通过变量运行


How to get a PHP loop to run via a variable?

(这个问题现在已经解决了 - 谢谢@ChelseaStats)

我在PHP中构建了一个网页,用户登录并上传照片和故事,页面立即显示故事和照片。

问题是MySQL查询和PHP从数据库返回的照片到处显示。我已经将它们打印在一个id'ddiv中,但CSS无法控制它们的定位。

目前查询如下所示:

$q1 = "SELECT * from images ORDER BY date ASC";

它们是这样显示的...

row1 = @mysqli_query($dbc, $q1);
echo '<div id = "pictures">';
while ( $fix1 = mysqli_fetch_array($row1) ) {
  echo '
 <img style = "border: 1px solid black; padding: 10px;" height = "80" width = "80" src = "data:image;base64,'.$fix1['image'].'"><br>'.$fix1['image_id'].'
 ';}
  echo '</div id = "pictures">';

我想做的是将所有"while 循环"编程存储在一个变量中,然后将该变量打印到 HTML 页面上远离 php 脚本的其他位置,以便在运行数据库查询时,我可以使用结果来填充/初始化变量(例如 $displayPics),然后将其打印在我希望它出现的 html 页面上。

意识到这可能是不可能的,我愿意接受建议......

。或者我可能愿意运行一个限制为 20 的查询,以降序日期顺序给出结果,然后将"无循环"PHP 代码分配给一个变量,然后我可以在其他地方的页面上打印出来。

代码可能如下所示:

 row1 = @mysqli_query($dbc, $q1);
 $fix1 = mysqli_fetch_array($row1);
 $displayPics = '
 <img style = "border: 1px solid black; padding: 10px;" height = "40" width = "40" src = "data:image;base64,''.$row1[$fix1[''image'']].''"><br>''.$row1[$fix1[''image'']].''
 ';

(上面的代码是我想象它的外观)。(我认为 img src 代码和 html 可能已被论坛过滤掉)。

但是,也许此代码将在变量中重复 20 倍,并且行号可能会因每次后续重复而更改?

(我基本上希望更好地控制从数据库返回的图片的位置)。

在 foreach 中,你可以像这样分配给变量

$bob = ''; // set it
foreach($row as $image) {
   // append to it
   $bob .= '<div id=""><img src="" /></div>'.PHP_EOL;
}
print $bob;

类似的对你有用。

如果您使用 Bootstrap- 则可以在呈现时分配显示类。下面将按如下方式显示每个图像(在中型到大型视口上 4 个,在小视口上横跨 3 个,在移动大小的视口上跨 2 个)。另请注意使用无花果标题在每个图像上提供标题。

row1 = @mysqli_query($dbc, $q1);
while ( $fix1 = mysqli_fetch_array($row1) ) {
   echo "<div class='col-md-3 col-sm-4 col-xs-6'>
       <figure>
         <img style = 'border: 1px solid black; padding: 10px;' height = '80' width = '80' src = 'data:image;base64,".$fix1['image']."'/>
        <figcaption>".$fix1['image_id']."</figcaption>
      </figure>
 </div>
 ";}

只需编写一个函数,将所有行返回到 assoc 数组数组中,并在代码中的其他地方需要它们时遍历它们,并对行使用条件测试以更好地控制它们的去向!

function getImages(){
       $imgs = array();
       while(($next = mysqli_fetch_assoc(...)){
         array_push($imgs, $next);
       }
       return $imgs; //array of assoc arrays
    }