2013-12-06 2 views
1

Я тестирую php-упражнение, и я не могу заставить его работать исправно. Это счетчик, который хранит посещения внутри txt-файла в виде простого целого. Каждый раз, когда я перезагружаю страницу, число получает +1.session_start() error: почему он не распознает новый сеанс?

Теперь я хочу, чтобы он перезаряжался только при новом посещении, поэтому я впервые пытаюсь sesion_start().

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

Это мой код (подмигнули внутри тегов PHP, естественно):

session_start(); 
if (!$_SESSION[contador]) { 
    define('ARCHIVO', 'visitas.txt'); 
    if (file_exists(ARCHIVO)) { 
     $fp=fopen(ARCHIVO, 'r'); 
     $cant=fread($fp,filesize(ARCHIVO)); 
     fclose($fp); 
    } else { 
     $cant=0; 
    } 
    $cant++; 
    $fp=fopen(ARCHIVO, 'w'); 
    fwrite($fp, $cant); 
    fclose($fp); 
    $_SESSION[contador]=$cant; 
} 
echo '<h3>Hay '.$_SESSION[contador].' visitas.</h3>'; 
+0

Я предполагаю, что 'contador' является определенной константой, не так ли? – Raptor

+0

Спасибо за ваш ответ ... erm ... no? Это все код, который у меня есть, я заменил $ contador $ _SESSION [contador] ... – Rosamunda

+0

Если вы напишете этот фрагмент кода, вы должны знать, что такое '$ _SESSION [contador]'. – Raptor

ответ

3

Контадор должен быть в кавычках, если это не определенная постоянная где-то ?? Я предполагаю, что это строка

$_SESSION["contador"] 

Попробуйте это. Все по-другому, но, по крайней мере, это что-то поделает. Был бы опубликован как комментарий, но мне нужно форматирование кода.

session_start(); 
if(empty($_SESSION['contador'])){ 
    $_SESSION['contador']=1; 
}else{ 
    $_SESSION['contador']++; 
} 
echo '<h3>Hay '.$_SESSION['contador'].' visitas.</h3>'; 
+0

Если константа определена, этот ответ недействителен. – Raptor

+2

Хороший совет, но определенно не проблема. «E_NOTICE» будет запущен, но неопределенная константа просто разрешит строку '' contador'' – Phil

+0

Ну, даже если информация о котировках верна, я пробовал без кавычек с одинарными кавычками и с двойными кавычками.Я думаю, что это связано с некоторыми странными функциями браузера Chrome, потому что он работает только тогда, когда я использую режим инкогнито ... (это происходит со мной также с Firefox ...) – Rosamunda

0

Прежде всего, @Lenny является правильным. $ _SESSION ['contador'] - это то, что называется переменной сеанса или переменной, назначенной массиву $ _SESSION. Поэтому он ДОЛЖЕН БЫТЬ в кавычках. Это необязательно. И вы не можете определить константу и использовать это значение в скобках.

Если у вас была константа, вы можете установить для нее переменную сеанса. Но, поскольку ваше значение является переменным, поскольку вы добавляете поэтапно, оно по определению не является константой.

Кроме того, обновление вашего веб-браузера будет поддерживать активную сессию. Поэтому, если вы действительно хотите проверить это, попробуйте session_destroy(); в какой-то момент.

Вот как этот код будет работать (хранение переменной сеанса в любом случае):

<?php 
session_start(); 
if(!isset($_SESSION['contador'])) { 
    define('ARCHIVO', 'visitas.txt'); 
    if(file_exists(ARCHIVO)) { 
     $fp = fopen(ARCHIVO, 'r'); 
     $cant = fread($fp,filesize(ARCHIVO)); 
     fclose($fp); 
    } else { 
     $cant=0; 
    } 
    $cant++; 
    $fp = fopen(ARCHIVO, 'w'); 
    fwrite($fp, $cant); 
    fclose($fp); 
    $_SESSION['contador'] = $cant; 
} 
echo '<h3>Hay ' . $_SESSION['contador'] . ' visitas.</h3>'; 
?> 

Примечание: ваша логика плохо. Вы говорите своему скрипту, что $ can not либо равно значению txt-файла, либо равно 0. Тогда ваше значение увеличивается на единицу. Вы будете выполнять эту задачу при каждой загрузке. Вам необходимо изменить этот код и закончить свой условный оператор.

<?php 
session_start(); 
if(!isset($_SESSION['contador'])) { 
    define('ARCHIVO', 'visitas.txt'); 
    if(file_exists(ARCHIVO)) { 
     $fp = fopen(ARCHIVO, 'r'); 
     $cant = fread($fp,filesize(ARCHIVO)); 
     fclose($fp); 
    } else { 
     $cant=0; 
    } 
    $cant++; 
    $fp = fopen(ARCHIVO, 'w'); 
    fwrite($fp, $cant); 
    fclose($fp); 
    $_SESSION['contador'] = $cant; 
} else { 
$_SESSION['contador']++; 
} 
echo '<h3>Hay ' . $_SESSION['contador'] . ' visitas.</h3>'; 
?> 

Надеюсь, это поможет.

+0

Я думаю, что логика OP прекрасна. –

Смежные вопросы