Я создаю веб-сайт, который содержит категории, подкатегории и списки. После нажатия на категорию, т. Е. Вычисление, страница изменится, чтобы показать все подкатегории из базы данных, которые находятся в категории вычислений. Затем при нажатии на подкатегорию отображаются списки для этой подкатегории и выбор подкатегории публикуется в URL. Затем при нажатии на объявление происходит то же самое. Это все нормально, но когда я пытаюсь отобразить детали листинга, они должны скрывать листинги, но этого не происходит. У кого-нибудь есть идеи почему? Код, который я использую ниже:
<?php
include 'core/init.php';
include 'includes/overall/header.php';
?>
<h1> Computing </h1>
<?php
$subcategory = 'Computing';
if (isset($_GET['subcategory']) && trim($_GET['subcategory']) != '') {
$subcategory = trim($_GET['subcategory']) != '';
}
$sql = "SELECT * FROM categories WHERE category = '$subcategory' ORDER BY subcategory ASC";
$result = mysql_query($sql) or die(mysql_error() . "<br>" . $sql);
$catNo = 1;
echo "<table class='categorytable'> <tr class='categoryrow'>";
while ($row = mysql_fetch_array($result)) {
echo '<td class="categorydata"><a href="computing.php?subcategory=' . strtolower($row['subcategory']) . '"><img class="catimg" src="' . $row['subcategory_img_path'] . '" border="0" /></br>' . $row['subcategory'] . '</a></td>';
if ($catNo % 3 == 0) {
echo "</tr><tr>";
}
$catNo++;
}
echo "</tr> </table>";
?>
<?php
if (isset($_GET['subcategory'])) {
$subcat = $_GET['subcategory'];
$sql2 = "SELECT * FROM listings WHERE subcategory = '$subcat' ORDER BY title ASC";
$result2 = mysql_query($sql2) or die(mysql_error() . "<br>" . $sql2);
$catNo = 1;
echo "<table class='categorytable'> <tr class='categoryrow'>";
while ($row2 = mysql_fetch_array($result2)) {
echo '<td class="categorydata"><a href="computing.php?subcategory=' . $subcat . '&' . 'listingid=' . ($row2['listing_id']) . '"><img class="catimg" src="' . $row2['main_image'] . '" border="0" /></br>' . $row2['title'] . ' ' . '<i class="fa fa-cog"></i>' . ' ' . $row2['cogs'] . ' per week' . '</a></td>';
if ($catNo % 3 == 0) {
echo "</tr><tr>";
}
$catNo++;
}
var_dump($_GET);echo "</tr> </table>";
?>
<?php
if (isset($_GET['listingid'])) {
$listingid = $_GET['listingid'];
$sql3 = "SELECT * FROM listings WHERE listing_id='$listingid'";
$result3 = mysql_query($sql3) or die(mysql_error() . "<br>" . $sql3);
while ($row3 = mysql_fetch_assoc($result3)) {
//whatever your values are
echo $row3['description'] . "<br />";
}
}
}
?>
</br>
<?php
include 'includes/overall/footer.php';
?>
Я знаю, что функции php_ устарели, а безопасность еще не принята во внимание, но буду беспокоиться об этом, когда у меня все будет работать.
положить часть в то время как if
,
if(!isset($_GET['subcategory'])){
$sql = "SELECT * FROM categories WHERE category = '$subcategory' ORDER BY subcategory ASC";
$result = mysql_query($sql) or die(mysql_error() . "<br>" . $sql);
$catNo = 1;
echo "<table class='categorytable'> <tr class='categoryrow'>";
while ($row = mysql_fetch_array($result)) {
echo '<td class="categorydata"><a href="computing.php?subcategory=' . strtolower($row['subcategory']) . '"><img class="catimg" src="' . $row['subcategory_img_path'] . '" border="0" /></br>' . $row['subcategory'] . '</a></td>';
if ($catNo % 3 == 0) {
echo "</tr><tr>";
}
$catNo++;
}
echo "</tr> </table>";
}
Я думаю, что ваш код в порядке, просто нужно исправить эту строку:
if (isset($_GET['subcategory']) && trim($_GET['subcategory']) != '') {
$subcategory = trim($_GET['subcategory']) != '';
}
Почему вы присваиваете логическое значение $subcategory
Вар, а затем запустить запрос на него. Заявление:
$subcategory = trim($_GET['subcategory']) != '';
Даст 1 (TRUE
) если $_GET['subcategory']
не является нулевым или не пустым.
Вы должны изменить строку на:
if (isset($_GET['subcategory']) && trim($_GET['subcategory']) != '') {
$subcategory = trim($_GET['subcategory']);
}
Надеюсь, что это поможет вам.
Я думаю, что у меня есть лучшее решение. Проверьте этот код:
<?php
if (isset($_GET['subcategory'])) {
$subcat = $_GET['subcategory'];
$sql2 = "SELECT * FROM listings WHERE subcategory = '$subcat' ORDER BY title ASC";
$result2 = mysql_query($sql2) or die(mysql_error() . "<br>" . $sql2);
$catNo = 1;
echo "<table class='categorytable'> <tr class='categoryrow'>";
while ($row2 = mysql_fetch_array($result2)) {
echo '<td class="categorydata"><a href="computing.php?listingid=' . ($row2['listing_id']) . '"><img class="catimg" src="' . $row2['main_image'] . '" border="0" /></br>' . $row2['title'] . ' ' . '<i class="fa fa-cog"></i>' . ' ' . $row2['cogs'] . ' per week' . '</a></td>';
if ($catNo % 3 == 0) {
echo "</tr><tr>";
}
$catNo++;
}
var_dump($_GET);echo "</tr> </table>";
}
?>
<?php
if (isset($_GET['listingid'])) {
$listingid = $_GET['listingid'];
$sql3 = "SELECT * FROM listings WHERE listing_id='$listingid'";
$result3 = mysql_query($sql3) or die(mysql_error() . "<br>" . $sql3);
while ($row3 = mysql_fetch_assoc($result3)) {
//whatever your values are
echo $row3['description'] . "<br />";
}
}
?>
Здесь я изменил код, чтобы он соответствовал подходу, который, по моему мнению, является наиболее близким для исправления вашего кода. Поскольку таблица базы данных списков не выбирается в зависимости от имени подкатегории, мы можем с этим отделить блок списков от блока подкатегорий с помощью if(isset($_GET['subcategory']))
если блок заканчивается if (isset($_GET['listingid']))
и удаление переменной GET подкатегории из URL при вызове листинга, чтобы вы не запускали подкатегорию if block.
Что происходит, так это то, что списки вызываются, когда вы вводите URL-адрес с переменной подкатегории в URL-адрес и отдельно не подаете подкатегорию в URL-адрес при попытке отобразить список, который вы показываете, и скрывать эти этапы страницы.
Вам не нужно значение подкатегории для отображения списка, только список списков, и тогда вам следует заботиться только о переменной GET listid GET.
Используйте ниже код:
<?php
$category = 'Computing';
if (isset($_GET['category']) && trim($_GET['category']) != '') {
$category = trim($_GET['category']);
}
$sql = "SELECT * FROM categories WHERE category = '$category' ORDER BY category ASC";
$result = mysql_query($sql) or die(mysql_error() . "<br>" . $sql);
$catNo = 1;
echo "<table class='categorytable'> <tr class='categoryrow'>";
while ($row = mysql_fetch_array($result)) {
echo '<td class="categorydata"><a href="computing.php?category='. $category.'&subcategory=' . strtolower($row['subcategory']) . '"><img class="catimg" src="' . $row['subcategory_img_path'] . '" border="0" /></br>' . $row['subcategory'] . '</a></td>';
if ($catNo % 3 == 0) {
echo "</tr><tr>";
}
$catNo++;
}
echo "</tr> </table>";
?>
<?php
if (isset($_GET['subcategory'])) {
$subcat = $_GET['subcategory'];
$sql2 = "SELECT * FROM subcategory WHERE subcategory = '$subcat' ORDER BY title ASC";
$result2 = mysql_query($sql2) or die(mysql_error() . "<br>" . $sql2);
$catNo = 1;
echo "<table class='categorytable'> <tr class='categoryrow'>";
while ($row2 = mysql_fetch_array($result2)) {
echo '<td class="categorydata"><a href="computing.php?category='. $category.'&subcategory=' . $subcat . '&' . 'listingid=' . ($row2['listing_id']) . '"><img class="catimg" src="' . $row2['main_image'] . '" border="0" /></br>' . $row2['title'] . ' ' . '<i class="fa fa-cog"></i>' . ' ' . $row2['cogs'] . ' per week' . '</a></td>';
if ($catNo % 3 == 0) {
echo "</tr><tr>";
}
$catNo++;
}
var_dump($_GET);echo "</tr> </table>";
?>
<?php
if (isset($_GET['listingid'])) {
$listingid = $_GET['listingid'];
$sql3 = "SELECT * FROM listings WHERE listing_id='$listingid'";
$result3 = mysql_query($sql3) or die(mysql_error() . "<br>" . $sql3);
while ($row3 = mysql_fetch_assoc($result3)) {
//whatever your values are
echo $row3['description'] . "<br />";
}
}
}
?>
</br>
<?php
include 'includes/overall/footer.php';
?>
Я согласен с zairwolf, в основном Стивену, вам нужен способ пометить, когда вы должны отобразить список, возможно, вам поможет планирование системы загрузки страницы. Ниже приведен возможный процесс реализации, который может улучшить вашу реализацию, если я пойму, что вам нужно.
//Proposed layout
function show_categories () {
//draw the categories down the left side of screen with "/?category={$record->CATEGORYID}" in anchor href
}
function show_subcategories ($category) {
//select the subcategories based on the passed category and output also with href as you have already
}
function show_listings ($subcategory) {
//select all the listings based on the sub category sent here
}
//always show the categories ?
show_categories ();
//other logic when to display sub categories or listings
if ($_REQUEST["subcategory"]) {
show_listings ($_REQUEST["subcategory"]);
} else {
show_subcategories ($_REQUEST["category"])
}
Попробуйте использовать метод $ _POST, он будет работать