【发布时间】:2021-01-18 18:42:11
【问题描述】:
更新:在浏览器中查看我的 HTML 代码后,我发现我只需要在 foreach 循环中只在 php 中运行一次 SQL 代码,图像就会水平显示。我想知道如何让那个 sql 代码在那个循环中只运行一次?
当我在foreach ($ffs as $ff) {中编写以下代码时
代码:
echo "<h4 class='text-right'>{$Data[$increaseForText]["username_for_info"]}</h4>";
echo "<h2>{$Data[$increaseForText]["_name"]}</h2>";
echo "<p>{$Data[$increaseForText]["_desc"]}<p>";
因此,当此代码在 foreach 循环内时,图像以垂直方式显示,我希望我的图像以水平方式显示(一个挨着另一个)。但是,如果我从foreach 中删除该代码并将其放在foreach 代码之外,则图像将水平显示并且工作正常。我尝试过 CSS 来水平显示图像,但只有当我从 foreach 中删除该代码时它才有效。由于某种原因,上面的代码(在 foreach 中)以某种方式强制图像以垂直方式显示,所以无论我做什么,它都会以垂直方式显示(图像)。
我不能将我的代码放在foreach 之外。我知道我可以使用foreach 来循环我的 SQL 代码并且它工作正常,但问题是我希望它像首先加载图像然后仅从 sql 加载第一行,然后从 sql 加载第二个图像和第二行一样工作让它工作的唯一方法是把foreach我的sql代码放在里面,所以它一次加载一个,否则如果我把它放在foreach外面它会一次加载sql的所有数据(1行到9比方说)然后所有没有意义的图像。我将图像存储在我的托管网站文件中。
我的问题是如何强制我的图像一个接一个地水平显示?
我的代码:
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', '1');
require "navigationbar.php";
require "testing.php";
?>
<html>
<head>
<link rel="stylesheet" href="userprofilestyl.css">
</head>
<body>
<hr>
<?php
global $username;
//username to get data of specific user
$username = $_SESSION['name'];
//to get image by username
$image = "images/$username";
global $increaseForText;
$increaseForText = 0;
function listFolderFiles($dir, $username, $increaseForText)
{
//getting images
$ffs = scandir($dir);
unset($ffs[array_search('.', $ffs, true)]);
unset($ffs[array_search('..', $ffs, true)]);
// prevent empty ordered elements
if (count($ffs) < 1) {
return;
}
$column_count = 0;
$sql = "select username_for_info, _name, _desc
from info_desc where username_for_info = '$username'";
try {
require "testing.php";
$stmt = $conn->prepare($sql);
$stmt->execute();
$Data = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo '<div class="image-container">';
foreach ($ffs as $ff) {
//select data from database
$s = "'<li>'.$ff";
$saving = "$dir/$ff";
$string = "$saving";
global $string_arr;
$string_arr = (explode("/", $string));
$sav;
$sav = '<li>' . $ff;
global $sa;
$sa = "$ff";
if (is_dir($dir . '/' . $ff)) {
listFolderFiles($dir . '/' . $ff, $username, $increaseForText);
}
//printing image
if (is_file($saving)) {
echo '<img src="' . $saving . ' " width="100" height="100" alt="Random image" />';
}
//printing text
echo "<h4 class='text-right'>{$Data[$increaseForText]["username_for_info"]}</h4>";
echo "<h2>{$Data[$increaseForText]["_name"]}</h2>";
echo "<p>{$Data[$increaseForText]["_desc"]}<p>";
$increaseForText++;
}
} catch (PDOException $e) {
echo '{error":{"text":' . $e->getMessage() . '}}';
}
echo '</div>';
}
listFolderFiles($image, $username, $increaseForText);
?>
</body>
</html>
【问题讨论】:
-
警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
标签: php css sql database image