当我尝试向其中添加新内容时数组被清空 (PHP)
Array gets emptied when i try to add new stuff to it (PHP)
我试图在用户每次点击某个类别后将内容添加到数组中,但由于某种原因它不断替换数组中的所有内容。我不知道我哪里出错了。我试过 'googling' 它,我发现的每个例子看起来都与我写的相似。请帮忙!
这些函数存储在core.php
function getStoreBacktrace($cat) {
include("config.php");
$backtrace = array();
if ($cat != 0) {
array_push($backtrace, $cat);
}
if (count($backtrace != 0)) {
foreach($backtrace as $c){
echo getBackCatName($c);
}
}
print_r($backtrace); // Put this to see what output is
}
function getBackCatName($c) {
include("config.php");
$query = 'SELECT * FROM `home_store_cats` WHERE `id`="'.$c.'"';
$r_query = mysql_query($query);
$result = mysql_fetch_array($r_query);
echo ' > <a href="?cat='.$result['id'].'">'.$result['name'].'</a>';
}
此函数打印出 link 用户可以单击的列表
function getStoreCat($cat) {
include("config.php");
$query = 'SELECT * FROM `home_store_cats` WHERE `main`="'.$cat.'" ORDER BY `name` ASC';
$r_query = mysql_query($query);
echo '<ul>';
while ($result = mysql_fetch_array($r_query)) {
echo '<li>';
echo '<a href="?cat='.$result['id'].'">'.$result['name'].'</a>';
echo '</li>';
}
echo '</ul>';
}
它在 store.php
中被调用
<?php
include("config.php");
include("core.php");
$backtrace = array();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title><?php echo getSiteTitle().' :: '.getSiteSlogan(); ?></title>
</head>
<body>
<table width="100%">
<tr>
<td colspan="2">
<!-- Backtrace -->
<a href="store.php">Home</a>
<?php echo getStoreBacktrace($cat, $backtrace); ?>
</td>
</tr>
<tr>
<td>
<!-- Categories -->
<table>
<tr>
<td><?php echo getStoreCat($cat); ?></td>
</tr>
</table>
</td>
<td>
<!-- Products -->
<table>
<tr>
<?php echo getStoreProducts($cat); ?>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
现在,每当用户点击由函数 getStoreCat($cat)
生成的 link 时,它就会刷新页面,并显示新的 link 和显示的新产品,具体取决于$cat
他们选择了什么。我想将 $cat
推送到 $backtrace
数组。
每次调用 getStoreBacktrace 时,都会在 $backtrace 中实例化一个全新的数组。
就在这里:
$backtrace = array();
每次调用 getStoreBacktrace()
.
时,您都有效地重置了数组
编辑:
感谢您解决您的问题。现在很明显,问题是您需要通过多个页面视图使 $backtrace
持久化。使用会话执行此操作:
页面模板
<?php
session_start(); // enable sessions
include("config.php");
include("core.php");
?>
<!DOCTYPE html>
etc...
函数定义
<?php
function getStoreBacktrace($cat) {
include_once("config.php"); // use include_once() to prevent possible errors
if (!isset($_SESSION['backtrace']))
$_SESSION['backtrace']= array();
if ($cat != 0) {
array_push($_SESSION['backtrace'], $cat);
}
...
我试图在用户每次点击某个类别后将内容添加到数组中,但由于某种原因它不断替换数组中的所有内容。我不知道我哪里出错了。我试过 'googling' 它,我发现的每个例子看起来都与我写的相似。请帮忙!
这些函数存储在core.php
function getStoreBacktrace($cat) {
include("config.php");
$backtrace = array();
if ($cat != 0) {
array_push($backtrace, $cat);
}
if (count($backtrace != 0)) {
foreach($backtrace as $c){
echo getBackCatName($c);
}
}
print_r($backtrace); // Put this to see what output is
}
function getBackCatName($c) {
include("config.php");
$query = 'SELECT * FROM `home_store_cats` WHERE `id`="'.$c.'"';
$r_query = mysql_query($query);
$result = mysql_fetch_array($r_query);
echo ' > <a href="?cat='.$result['id'].'">'.$result['name'].'</a>';
}
此函数打印出 link 用户可以单击的列表
function getStoreCat($cat) {
include("config.php");
$query = 'SELECT * FROM `home_store_cats` WHERE `main`="'.$cat.'" ORDER BY `name` ASC';
$r_query = mysql_query($query);
echo '<ul>';
while ($result = mysql_fetch_array($r_query)) {
echo '<li>';
echo '<a href="?cat='.$result['id'].'">'.$result['name'].'</a>';
echo '</li>';
}
echo '</ul>';
}
它在 store.php
中被调用<?php
include("config.php");
include("core.php");
$backtrace = array();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title><?php echo getSiteTitle().' :: '.getSiteSlogan(); ?></title>
</head>
<body>
<table width="100%">
<tr>
<td colspan="2">
<!-- Backtrace -->
<a href="store.php">Home</a>
<?php echo getStoreBacktrace($cat, $backtrace); ?>
</td>
</tr>
<tr>
<td>
<!-- Categories -->
<table>
<tr>
<td><?php echo getStoreCat($cat); ?></td>
</tr>
</table>
</td>
<td>
<!-- Products -->
<table>
<tr>
<?php echo getStoreProducts($cat); ?>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
现在,每当用户点击由函数 getStoreCat($cat)
生成的 link 时,它就会刷新页面,并显示新的 link 和显示的新产品,具体取决于$cat
他们选择了什么。我想将 $cat
推送到 $backtrace
数组。
每次调用 getStoreBacktrace 时,都会在 $backtrace 中实例化一个全新的数组。
就在这里:
$backtrace = array();
每次调用 getStoreBacktrace()
.
编辑:
感谢您解决您的问题。现在很明显,问题是您需要通过多个页面视图使 $backtrace
持久化。使用会话执行此操作:
页面模板
<?php
session_start(); // enable sessions
include("config.php");
include("core.php");
?>
<!DOCTYPE html>
etc...
函数定义
<?php
function getStoreBacktrace($cat) {
include_once("config.php"); // use include_once() to prevent possible errors
if (!isset($_SESSION['backtrace']))
$_SESSION['backtrace']= array();
if ($cat != 0) {
array_push($_SESSION['backtrace'], $cat);
}
...