PHP динамически определяемая переменная (для использования через некоторое время l oop с двумя условиями) - PullRequest
0 голосов
/ 26 февраля 2020

Я думал, что упросту свой вопрос и начну с попытки решить одну проблему за раз вместо двух. Оценка -1 говорит мне, что я не достаточно ясно, поэтому я попробую еще раз Мой оригинальный пост цитируется ниже.

С помощью следующего кода я могу отображать данные из моей таблицы, которые удовлетворяют условию, что категория Scenics:

<?php
$category = $_GET['category'] ?? 'Scenics';

$sql = "SELECT * FROM photo_library ";
$sql .= "WHERE category='" . $category . "' ORDER BY id ASC";
$image_set = mysqli_query($db, $sql);
$image_set_desc = mysqli_query($db, $sql);
?>

То, что я хочу сделать, это иметь динамически устанавливается. Вместо $category = $_GET['category'] ?? 'Scenics'; есть ли способ не установить способ, которым он выше? Я хотел бы, чтобы он был установлен в соответствии с тем, что он находит в столбце «категория» моей таблицы SQL, чтобы позже я мог сказать, когда категория - Scenics, а sub_category - это Coastal, отображать только эту информацию (поэтому мне нужно будет сделать что-то подобное для подкатегории).

РЕДАКТИРОВАТЬ: Я искал термин массив . Я хочу, чтобы $ sub_category был массив на основе того, что находится в столбце sub_category моей таблицы SQL.

Я также знаю о риске использования $ _GET, но это будет находиться на защищенном сайте, где вы получите доступ только в том случае, если вы являетесь участником, и вы являетесь участником только в том случае, если вы подаете заявку и получаете разрешение на доступ вручную. И нет никакой пользовательской информации в защищенной части сайта. Это строго ресурсный сайт для загрузки графики и изображений.

Я пытаюсь создать галерею изображений с использованием PHP и My SQL вместо того, чтобы кодировать все в HTML на страница. Я создал тестовую таблицу с несколькими столбцами и рабочую страницу, где вся информация извлекается и отображается.

Два основных значения, которые будут использоваться для отделения входов изображений друг от друга, - это категория 'и' sub_category '. Работающая страница использует только категорию и прекрасно работает.

<?php
 $category = $_GET['category'] ?? 'Agroforestry';

 $sql = "SELECT * FROM photo_library ";
 $sql .= "WHERE category='" . $category . "' ORDER BY id ASC";
 $image_set = mysqli_query($db, $sql);
 $image_set_desc = mysqli_query($db, $sql);
?>

$ image_set извлекает информацию для фактического изображения, а $ image_set_desc выполняет работу для ссылок и размера файла. Это добавление миниатюры:

<?php while($subject = mysqli_fetch_assoc($image_set)) { ?>
<li><a href="<?php echo h($subject['jpg_location']); ?>" title="<?php echo h($subject['title']); ?>" data-title="<?php echo

h ($ subject ['id']); ?> ">" src = "#" alt = "" aria-описаныby = "">

<?php while($subject_desc = mysqli_fetch_assoc($image_set_desc)) { ?>    
<p id="<?php echo h($subject_desc['id']); ?>"><b>Filename:</b> <?php echo h($subject_desc['filename']); ?><br>
<a class="btn btn-default btn-xs mrgn-tp-sm" role="button" href="<?php echo h($subject_desc['tif_location']); ?>">TIFF <span

class = "wb-inv"> image download () "> JPG image download ()

Проблема на следующей странице, на которой я тестирую, есть намного больше картинок, и они разбиты на несколько подкатегорий. Я хочу отображать картинки только с определенной субкатегорией -категории под соответствующими заголовками.

Я очень новичок в PHP и не знаю, как установить что-то вроде $ sub_category для того, что он находит в этом столбце. Я не могу использовать

$sub_category = $_GET['sub_category'] ?? 'Coastal';

потому что подкатегория должна быть извлечена из таблицы SQL. Я не знаю, что я делаю, пока

$sub_category = isset($_GET['sub_category']);

ничего не нарушает, это также не делает кажется, работает. Если это как-то работает, то

<?php while(($subject = mysqli_fetch_assoc($image_set)) && ($sub_category == 'Coastal')){ ?>

не потому, что на странице ничего не генерируется. Я не уверен, что моя проблема с определением $ sub_category, в то время как l oop, или оба.

1 Ответ

0 голосов
/ 27 февраля 2020

Во-первых, даже если ваш сайт ограничен подгруппой пользователей, вы все еще оставляете место для многих атак, которые могут привести к тому, что злоумышленники смогут испортить структуру вашей базы данных и еще хуже получить конфиденциальные данные.

Относительно Ваша проблема, пожалуйста, посмотрите на нормализация . В настоящее время у каждого изображения есть установленная категория, записанная в поле категории, которая приводит к вашей текущей путанице / проблеме, поскольку теперь вы хотите собрать категории для каждого изображения в вашей базе данных.

Если бы вы нормализовали поле категории до разделите таблицу и свяжите их с помощью внешнего ключа , после чего вы можете сначала запросить все категории, а затем сгруппировать изображения по категориям после циклического прогона.

Вот немного неоптимизированного псевдокода, который должен дать вам представление о том, что я имею в виду:

$categorizedImages = [];
$catSql = "SELECT * FROM categories";
$categories = mysqli_query($db, $sql);
foreach($categories as $category) {
   $imageSql = "SELECT * FROM photo_library WHERE category='" . $category['id'] . "' ORDER BY id ASC";
   // I cant recall if the access from mysqli_query is via array or ->
   $categorizedImages[$category['id']] = mysqli_query($db, $imageSql);
}

var_dump($categorizedImages); exit;
...