Brown
Brown

Reputation: 27

How to keep value of session array after form submit?

I'm coding a question script with using two php files. One of them is storing my questions answers and one integer value of question. Program is working like that.

For example

$kelime[5]["question"] = "Mavi";
$kelime[5]["answer"] = "blue";
$kelime[5]["number"] = 0;

Question is 'Mavi' and answer is 'blue'

When it asked me if I give true answer number must increase 1 if number >= 10 don't ask me this question again. But number value never increase it is always same after submit where I am making wrong?

questions.php

<?php

$kelime[0]["tr"] = "Sarı";
$kelime[0]["en"] = "yellow";
$kelime[0]["nr"] = 0;

$kelime[1]["tr"] = "Kırmızı";
$kelime[1]["en"] = "red";
$kelime[1]["nr"] = 0;

$kelime[2]["tr"] = "Yeşil";
$kelime[2]["en"] = "green";
$kelime[2]["nr"] = 0;

$kelime[3]["tr"] = "Siyah";
$kelime[3]["en"] = "black";
$kelime[3]["nr"] = 0;

$kelime[4]["tr"] = "Beyaz";
$kelime[4]["en"] = "white";
$kelime[4]["nr"] = 0;

$kelime[5]["tr"] = "Mavi";
$kelime[5]["en"] = "blue";
$kelime[5]["nr"] = 0;

$kelime[6]["tr"] = "Turuncu";
$kelime[6]["en"] = "orange";
$kelime[6]["nr"] = 0;

$kelime[7]["tr"] = "Gri";
$kelime[7]["en"] = "grey";
$kelime[7]["nr"] = 0;

$kelime[8]["tr"] = "Mor";
$kelime[8]["en"] = "purple";
$kelime[8]["nr"] = 0;

$kelime[9]["tr"] = "Pembe";
$kelime[9]["en"] = "pink";
$kelime[9]["nr"] = 0;

$kelime[10]["tr"] = "Altın";
$kelime[10]["en"] = "gold";
$kelime[10]["nr"] = 0;

$sayi = array(0,1,2,3,4,5,6,7,8,9,10);

?>

asking.php

    <?php

    session_start();
    require "kelimeler.php";
    $_SESSION['sayi'] = $sayi;
    $_SESSION['kelime'] = $kelime;

    $i = rand(0,4);

    print_r($_SESSION['kelime']);
    setcookie("soru", $_SESSION['kelime'][$_SESSION['sayi'][$i]]["tr"]);
    setcookie("cevap", $_SESSION['kelime'][$_SESSION['sayi'][$i]]["en"]);

?>

<html>
<body>
    <div class="content">
        <div class="kelime"><?php echo $_SESSION['kelime'][$_SESSION['sayi']     [$i]]["tr"] ?></div>
        <form method="post" action="">
            <input id="cvp" type="text" name="kelime" placeholder="die Antwort">
            <input type="submit" name="gonder" value="SENDEN !"/>
        </form>
    </div>
    <?php

        if (isset($_POST["kelime"])) {

            if ($_POST["kelime"] == $_COOKIE['cevap']) {
                    echo '<div class="bildirim">You are right &#10004</div>';
                    $_SESSION['kelime'][$i]["nr"] = +1;
                    if ($kelime[$i]["nr"] >= 10) {
                        unset($_SESSION['sayi'][$i]);
                    }
            } else {
                    echo '<div class="bildirim">'.$_COOKIE['soru'].' = '.$_COOKIE['cevap'].'</div>';
            }

        }

    ?>
</body>
</html>

Thanks to all from now :)

Upvotes: 1

Views: 822

Answers (2)

Don&#39;t Panic
Don&#39;t Panic

Reputation: 41810

I think the main problem is at the beginning of the script:

session_start();
require "kelimeler.php";
$_SESSION['sayi'] = $sayi;       // <<<--here
$_SESSION['kelime'] = $kelime;   // <<<--and here

It appears you are resetting these session values to the original arrays every time the page loads. You should only initialize them if they are not already set.

session_start();
require "kelimeler.php";
if (!isset($_SESSION['sayi'])) {
    $_SESSION['sayi'] = $sayi;
}
if (!isset($_SESSION['kelime'])) {
    $_SESSION['kelime'] = $kelime;
}

Then, as the other answer pointed out, $_SESSION['kelime'][$i]["nr"] = +1; will not increment the value. Maybe you meant to use $_SESSION['kelime'][$i]["nr"] += 1;?

Upvotes: 1

Nergal
Nergal

Reputation: 1015

It's easy. Instead

$_SESSION['kelime'][$i]["nr"] = +1;

You should

$_SESSION['kelime'][$i]["nr"]++;
// or $_SESSION['kelime'][$i]["nr"] += 1;

The problem here is = +1 which sets the value to 1 and do not increment.

Upvotes: 0

Related Questions