2016-01-10 1 views
-1

Я пытаюсь изменить одну часть информации в массиве. Вот что у меня есть: (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 =). Приведенный выше код работает, но как только я его обновляю, он возвращает значение обратно к предыдущему. Я понятия не имею, почему это так.

+1

Изменение этого массива не сохранится, обновляя страницу, поскольку обновленная страница перезагрузит файл 'config.php', который содержит жестко закодированные значения. – RiggsFolly

+1

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

ответ

2

Вы не можете сохранять данные, подобные этим, для нескольких запросов. При каждом запросе PHP начинается с нуля, снова выполняя файл config.php, определяющий переменную.

Так что, если вы сделаете этот запрос:

set.php?id=13 

PHP делает необходимые изменения, передает страницу в браузер, и забывает обо всех своих переменных.

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

Если вам нужны эти данные сохраняются в разных запросах, существует несколько возможностей:

Если это необходимо для каждого пользователя, используйте session variables. Если, с другой стороны, это должен быть глобальный параметр, то же самое для каждого пользователя, тогда вы должны посмотреть на file storage или на database, как и на MySql.

+0

Я пытался быстро сделать эту систему и не использовать базы данных. Я никогда не пробовал хранить файлы. Быстро ли? Или я должен идти с базой данных? – xampper

+0

Если у вас есть выбор, лучше пойдите с базой данных, будет гораздо проще запросить такие вещи, как «сколько представлений произошло за последний час», и будет легко расширяться для любых будущих требований к хранению, о которых вы могли бы подумать. Если ваш хост поддерживает MySql, пойдите для этого и обязательно используйте современные функции для работы с ним (т. Е. Не * mysql_ *, но * PDO *). – trincot

+0

Получил. Благодаря! – xampper

0

Try После кода для файла set.php:

require_once('config.php'); 

$spotid = $_GET['id']; 

$array = & $spotsopen; 

$spotsopen[$spotid] = "false"; 

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

Это даст вам обновленное значение массива: Код для проверки обновляемый-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 каждый раз, когда вы w плохо выполнить файл. Вместо этого загрузите значения в базу данных, такие как mysql, а затем извлеките массив из него.