【问题标题】:Modifying an array value not working修改数组值不起作用
【发布时间】:2016-01-10 11:37:36
【问题描述】:

我正在尝试更改数组中的一条信息。这是我所拥有的:(set.php)

require_once('config.php');

$spotid = $_GET['id'];

$array = & $spotsopen;
//$opennot = $spotsopen[$spotid];

$spotsopen[$spotid] = false;

config.php 有spotsopen 数组:

    $spotsopen = array(
    '1' => true,
    '2' => true,
    '3' => true,
    '4' => false,
    '5' => false,
    '6' => true,
    '7' => true,
    '8' => true,
    '9' => true,
    '10' => true,
    '11' => true,
    '12' => true,
    '13' => true,
    '14' => true,
    '15' => true,
    '16' => true,
    '17' => true,
    '18' => true,
    '19' => true
);

所以我有一个页面,重定向到 set.php。在 GET (set.php?id=) 中定义的键的值发生了变化。上面的代码确实有效,但是一旦我刷新它,它就会将值更改回之前的值。我不知道为什么会这样。

【问题讨论】:

  • 更改该数组将无法刷新页面,因为刷新的页面将重新加载包含硬编码值的 config.php 文件
  • 我不确定是否还有更多,但您似乎没有以任何方式存储修改后的值。一旦脚本完成,所有 php 变量都会丢失,当您再次运行它时,所有值都将与代码中定义的一样。您可能需要一个数据库或配置文件来存储这些值。然后你就可以阅读、使用、修改和存储它们了。

标签: php arrays replace temporal


【解决方案1】:

您不能在多个请求中保留这样的数据。在每次请求时,PHP 都会从头开始,再次执行您的 config.php 文件,定义变量。

所以如果你提出这个要求:

set.php?id=13

PHP 进行必要的更改,将页面发送到浏览器,然后忘记所有变量。

因此,如果您随后调用另一个页面,或者具有另一个 id 的相同页面,那么 PHP 将以空白信息开始,并且不会知道之前对 id 13 的更改。

如果您需要跨请求保留这些数据,有几种可能性:

如果只需要为每个用户保留,请使用session variables。另一方面,如果它必须是全局设置,对每个用户都相同,那么您应该查看file storage,或查看database,如MySql。

【讨论】:

  • 我试图使该系统快速而不使用数据库。我从来没有尝试过文件存储的东西。是快吗?还是我应该使用数据库?
  • 如果您有选择,最好使用数据库,这样查询“过去一小时内发生了多少提交”之类的内容会更容易,并且可以轻松扩展以用于任何未来的存储您可能会想到的要求。如果您的主机支持 MySql,那就去做,并确保使用现代函数来处理它(即不是 mysql_,而是 PDO)。
【解决方案2】:

为文件 set.php 尝试以下代码:

require_once('config.php');

$spotid = $_GET['id'];

$array = & $spotsopen;

$spotsopen[$spotid] = "false";

header("Refresh:0; url=check-updated-value.php/?uid=$spotid");

这将为您提供数组的更新值: check-updated-value.php 的代码

require_once('config.php');
$id=$_GET['uid'];
echo "Updated value for id".$id."is".$spotsopen[$id];

通过打开页面“check-updated-value.php”检查更新的值

在 config.php 中,不要直接定义数组,因为它会在每次执行文件时定义并将所有值初始化为 true。相反,将值加载到 mysql 等数据库中,然后从中获取数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    相关资源
    最近更新 更多