Уменьшение значения сессии

254
09 февраля 2017, 02:52

Почему, после того, как будет совпадение, то значение сессии, минусуется только 1 раз?

<?php error_reporting(-1);
header('Content-Type: text/html; char set=utf-8');
ini_set('display_errors', 'On');
session_start();
$p1 = $_SESSION['player1'] = 10; //человек
$comp = $_SESSION['computer'] = 10; //комп
echo '$_SESSION["player1"] = ' .  $p1 . '<br>';
if(isset($_GET['num'])){
    if($_GET['num'] == rand(1, 3)){
        $p1--;
        echo 'Совпало ' . $p1;
    }   
    else{
        echo 'Не совпало';
    }
}

?>
<form action="" method="get">
    Введите число от 1 до 3 <input type="number" name="num">
    <input type="submit" name="Отправить">
</form
Answer 1

В смысле почему? Скрипт запускается один раз. Ты нажимаешь кнопку Отправить. Он запускается один раз. И у тебя написано, что если значения совпадают, то нужно отнять единицу один раз. Что вы ожидали вообще? Кроме того скрипт запускается каждый раз с самого начала. И всегда в начале будет 10.

И это можно объединить

if(isset($_GET['num']) and $_GET['num'] == rand(1, 3)){
    $p1--;
    echo 'Совпало ' . $p1; 
} else {
    echo 'Не совпало';
}

Самое простое - в начале проверить - существует ли сессия? Если нет, то записываем 10. Иначе не записываем, а берём то, что есть, пока не станет меньше нуля. Если меньше нуля, то начинаем всё с самого начала.

if (!isset($_SESSION['player1'])) {
    $_SESSION['player1']=10;
    $p1=$_SESSION['player1'];
} elseif ($_SESSION['player1']<0) {
    echo ('Меньшя нуля');
    unset($_SESSION['player1']); //удалем
}

В итоге:

<?php 
    header('Content-Type: text/html; char set=utf-8');
    ini_set('display_errors', 'On');
    session_start();
    if (!isset($_SESSION['player1'])) {
        $_SESSION['player1']=10;
    } elseif ($_SESSION['player1']<0) {
        echo ('Меньшя нуля');
        unset($_SESSION['player1']); //удалем
    }
    echo '$_SESSION["player1"] = '.$_SESSION['player1'].'<br>';
    if(isset($_GET['num']) and $_GET['num'] == rand(1, 3)){
        $_SESSION['player1']--;
        echo 'Совпало '.$_SESSION['player1']; 
    } else {
        echo 'Не совпало';
    }
?>
<form action="" method="get" name='formrand'>
    <label>Введите число от 1 до 3 <input type="number" name="num" value='1'></label>
    <input type="submit" name="Отправить">
</form>
Answer 2

Потому что каждый раз в сессию перезаписываются значения player1 и computer в значение 10, а далее изменяется не значение сессии, а значение переменной. Должно работать вот так:

<?php error_reporting(-1);
header('Content-Type: text/html; char set=utf-8');
ini_set('display_errors', 'On');
session_start();
$_SESSION['player1'] = isset($_SESSION['player1']) ? $_SESSION['player1'] : 10; //человек
$_SESSION['computer'] = isset($_SESSION['computer']) ? $_SESSION['computer']: 10; //комп
echo '$_SESSION["player1"] = ' .  $_SESSION['player1'] . '<br>';
if(isset($_GET['num'])){
    if($_GET['num'] == rand(1, 3)){
        $_SESSION['player1']--;
        echo 'Совпало ' . $_SESSION['player1'];
    }   
    else{
        echo 'Не совпало';
    }
}

?>
<form action="" method="get">
    Введите число от 1 до 3 <input type="number" name="num">
    <input type="submit" name="Отправить">
</form>
READ ALSO
Почему при отправке формы на почту приходят неформатируемые данные?

Почему при отправке формы на почту приходят неформатируемые данные?

Интересует вопрос: почему при отправке формы на почту приходят данные в неформатируемом виде (в одну строчку) и как это исправить?

275
Почему не идет выборка из базы?

Почему не идет выборка из базы?

ЗдравствуйтеЕсть таблица prod , в ней ячейка id_specz , в которой значение 3,2,1

292
Инвертировать запрос

Инвертировать запрос

Есть регулярное выражение вида

280
Обновление текста при нажатии checkbox

Обновление текста при нажатии checkbox

Есть код обновления адресной ссылки по нажатию на checkbox

275