2015-10-02 3 views
0

Это упрощенная версия того, что я хочу сделать:PHP Статические переменные перезагружается после загрузки страницы

В моем сценарии я хочу статической переменной х будет увеличиваться каждый раз при нажатии на кнопку отправить.

<?php 
function IncX(){ 
    static $x = 0; 
    $x++; 
    echo $x; 
} 
?> 

<body> 
<form> 
<input type="submit" name="submit" class="next btn btn-primary" value="Submit" /> 
</form> 
</body> 

Но инициализирует й = 0 на каждой перезагрузке страницы после того, как подать.

+0

Это происходит потому, что страница загружается каждый раз, когда кнопка отправить щелчок ... Я думаю, вы поняли, что статические переменные делать; они сохраняют свою ценность только для одного запроса. Нажатие на кнопку отправляет несколько запросов. –

+0

Как сказано в комментарии выше, это не то, как работают статические переменные, посмотрите в '$ _SESSION' – Epodax

+0

, если тогда как это сделать Olsen? – Krishna

ответ

1

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

Решение заключается в том, чтобы хранить его в сеансе, а затем увеличивать его. Включите условие для создания переменной, если она еще не существует.

<?php 
    session_start(); 
    if (!isset($_SESSION['x'])) { 
    $x = $_SESSION['x']; 
    } else { 
    $x = 0; 
    } 
    $x++; 
    echo $x; 
    $_SESSION['x'] = $x; 
?> 
+0

Спасибо за ваш ответ. Позвольте мне попробовать .. – Krishna

+0

даже сейчас переменная doesnot increment .. GeoFFAtkins – Krishna

+0

Я предполагаю, что была какая-то причина для того, чтобы приращение обрабатывалось внутри функции и что вы вызываете функцию где-то на страница? –

0
<?php 
session_start(); 
$x = 0; 
    if (isset($_SESSION['x'])) { 
     $x = $_SESSION['x']; 
     $x++; 
    } else { 
     $_SESSION['x'] = $x; 
    } 
    // /$x++; 
    echo $x; 
    $_SESSION['x'] = $x; 


?> 
+0

Это точно так же, как и другой anser. что еще вы добавили? –

+0

@ FélixGagnon-Grenier Когда я добавил ответ. Сообщение было отредактировано, и ответ был неправильным, и к моменту редактирования вы можете видеть. –

0

Apache не отслеживает переменных в PHP scrips между щелчками, вы должны хранить его где-нибудь, будь то база данных $_SESSION или с.

К тому же ключевое слово static не делает то, что вы, кажется, думаете. Он будет работать для последовательных вызовов функции за один проход сценария, но не между кликами.

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

session_start(); 
$_SESSION['x'] = isset($_SESSION['x']) && is_int($_SESSION['x']) 
    ? $_SESSION['x'] + 1 
    : 1; 
echo $_SESSION['x']; 
Смежные вопросы