$_SESSION aan het werk krijgen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Niels Veer

Niels Veer

19/12/2011 19:31:01
Quote Anchor link
Hallo allemaal,

Ik heb een quiz, en met behulp van sessions wil ik ervoor zorgen dat een quizvraag maar 1 keer kan worden beantwoord.
Ik heb nu dit, maar het werkt niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

    session_start();
    if ( $_SERVER['REQUEST_METHOD'] == 'POST') {
    if($_POST) {
       while ( $aBericht = mysql_fetch_assoc( $rResult ) ) {
        //  We moeten vanwege de speciale tekens in de titel htmlspecialchars() gebruiken
        //  Dit zorgt ervoor dat bijvoorbeeld < en " onschadelijk worden gemaakt

        $paginanummer= ''.htmlspecialchars($aBericht['id']).'';
        switch($_GET['vraag']) {
        case
$paginanummer:    
        echo '
        <form method="post" action="" name="vraag" id="quizvraag">'
;
        echo '<p>
        <a href="afbeeldingen/'
. htmlspecialchars( $aBericht['afbeelding'] ) . '" rel="lightbox"><img src="afbeeldingen/' . htmlspecialchars( $aBericht['afbeelding_thumb'] ) . '"></a><br><br>
        '
.htmlspecialchars($aBericht['vraag']).'
        </p>
        <p>'
;
        echo 'A.<input type="submit" disabled="disabled" name="a" class="form" value="'.htmlspecialchars($aBericht['antwoordA']).'" />'; if(isset($_POST['a']) && $aBericht['goede_antwoord'] != 'A') { echo '<img src="images/kruisje_rood.png">'; } if($aBericht['goede_antwoord'] == 'A') { echo '<img src="images/vinkje_groen.png">'; } if(isset($_POST['a']) && $aBericht['goede_antwoord'] == 'A') { $_COOKIE['score']++; setcookie('score', $_COOKIE['score']); } echo '<br>';
        echo 'B.<input type="submit" disabled="disabled" name="b" class="form" value="'.htmlspecialchars($aBericht['antwoordB']).'" />'; if(isset($_POST['b']) && $aBericht['goede_antwoord'] != 'B') { echo '<img src="images/kruisje_rood.png">'; } if($aBericht['goede_antwoord'] == 'B') { echo '<img src="images/vinkje_groen.png">'; } if(isset($_POST['b']) && $aBericht['goede_antwoord'] == 'B') { $_COOKIE['score']++; setcookie('score', $_COOKIE['score']); } echo '<br>';
        echo 'C.<input type="submit" disabled="disabled" name="c" class="form" value="'.htmlspecialchars($aBericht['antwoordC']).'" />'; if(isset($_POST['c']) && $aBericht['goede_antwoord'] != 'C') { echo '<img src="images/kruisje_rood.png">'; } if($aBericht['goede_antwoord'] == 'C') { echo '<img src="images/vinkje_groen.png">'; } if(isset($_POST['c']) && $aBericht['goede_antwoord'] == 'C') { $_COOKIE['score']++; setcookie('score', $_COOKIE['score']); } echo '<br>';
        echo '</p>
        <input type="submit" name="volgendevraag" value="Volgende vraag" />
        </form>
        '
;?>

Je hebt momenteel
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $_COOKIE['score']; ?>
punt(en)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php echo '<br><br>';
        if(!empty($_SESSION['vraag'][$paginanummer])) {
            header("Location: ?vraag=" . mt_rand(1, 20));
            exit();
        }

        if($_POST['volgendevraag'])
        {

            $_SESSION['vraag'][$paginanummer] = 'beantwoord';
            header("Location: ?vraag=" . (intval($paginanummer)+1));
            exit();
        }        
        }
        }
        }
        }
else {
        while ( $aBericht = mysql_fetch_assoc( $rResult ) ) {
        //  We moeten vanwege de speciale tekens in de titel htmlspecialchars() gebruiken
        //  Dit zorgt ervoor dat bijvoorbeeld < en " onschadelijk worden gemaakt

        $paginanummer= ''.htmlspecialchars($aBericht['id']).'';
        switch($_GET['vraag']) {
        case
$paginanummer:
        echo '
        <form method="post" action="" name="vraag" id="quizvraag">
        <p>'
;
        if ($aBericht['afbeelding'] != '') {
            echo '<a href="afbeeldingen/' . htmlspecialchars( $aBericht['afbeelding'] ) . '" rel="lightbox"><img src="afbeeldingen/' . htmlspecialchars( $aBericht['afbeelding_thumb'] ) . '"></a><br><br>';
        }
        
        echo '
        '
.htmlspecialchars($aBericht['vraag']).'
        </p>
        <p>
        A.<input type="submit" name="a" class="form" value="'
.htmlspecialchars($aBericht['antwoordA']).'" /><br>
        B.<input type="submit" name="b" class="form" value="'
.htmlspecialchars($aBericht['antwoordB']).'" /><br>
        C.<input type="submit" name="c" class="form" value="'
.htmlspecialchars($aBericht['antwoordC']).'" /><br>
        </p>
        </form>'
;?>

Je hebt momenteel
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $_COOKIE['score']; ?>
punt(en)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php echo '<br><br>';
        }
      }
    }
  }

?>


Hoe kan ik de sessions aan de praat krijgen?

Alvast bedankt!

n9iels
 
PHP hulp

PHP hulp

29/03/2024 13:49:26
 
Noppes Homeland

Noppes Homeland

19/12/2011 19:35:30
Quote Anchor link
Ik huivert, waarom nu al je aandacht op cookies en sessions als je de basis nog geen eens goed hebt.

Maar ja lees dan nog maar eens goed:
http://www.php.net/set_cookie
http://www.php.net/cookie
http://www.php.net/session
 
Niels Veer

Niels Veer

19/12/2011 19:51:42
Quote Anchor link
Ik heb ze doorgelezen, maar ik zie om eerlijk te zijn nou niet echt wat ik fout heb gedaan in de sessions en cookies.

Toevoeging op 19/12/2011 20:00:27:

Overigens, wat is er dan trouwens slecht aan de basis
 
- SanThe -

- SanThe -

19/12/2011 20:09:30
Quote Anchor link
Zet dit bovenin je script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest

?>
 
Noppes Homeland

Noppes Homeland

19/12/2011 20:11:31
Quote Anchor link
Daar ben je volgens mij al vaak genoeg op gewezen:
- de juiste controles en validaties ontbreken
- je gebruikt de functie htmlspecialchars op een verkeerde manier
- je gebruikt de nutteloze functie empty
- switch constructie, daar waar deze niet thuis hoort, dan wel niet benodigd is, script logica is ver te zoeken
- ik zie quotes staan op plekken waar deze overbodige zijn
- ik zie veels te veel echo's

En je kan in deze - kleine 30 minuten - tijd niet de links doorgrond hebben.
 
Niels Veer

Niels Veer

19/12/2011 20:50:02
Quote Anchor link
Oké, bedankt voor de tips die ik kan verbeteren.
Ik heb als eerst eens gekeken naar htmlspecialchars().
Hij wordt fout gebruikt, en dat merk ik nu ook.
Want het gene dat ik uit de database haal bevat eigenlijk helemaal tags die opgezet hoeven te worden.
Maar nu het moeilijkst, hoe moet het dan wel?
Daar kan ik eigenlijk nergens iets over vinden.

Toevoeging op 19/12/2011 20:51:18:

Moet ik deze dan gewoon verwijderen en het op deze manier doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
<input type="submit" disabled="disabled" name="a" class="form" value="'.($aBericht['antwoordA']).'" />
?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

19/12/2011 21:14:49
Quote Anchor link
Niels, htmlspecialchars heeft niks met tags te maken, deze zet bijzonderen tekens om naar &teken; Het is wel beter om dit te doen voordat je in het db zet.

Overigens vind ik persoonlijk niks mis met alles te echoen, ik doe dat zelf ook altijd omdat ik dat beter leeesbaar vind dan elke keer te switchen van php naar html.
 
- SanThe -

- SanThe -

19/12/2011 21:36:11
Quote Anchor link
Niels van der Veer op 19/12/2011 20:50:02:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
<input type="submit" disabled="disabled" name="a" class="form" value="'.($aBericht['antwoordA']).'" />
?>


Een input die disabled staat wordt niet meeverzonden.
 
Niels Veer

Niels Veer

20/12/2011 07:12:32
Quote Anchor link
Hij staat disable omdat als je een quizvraag hebt verzonden je de zelfde buttons met de zelfde tekst ziet alleen niet aanklikbaar. Zo kun je de vraag dus niet nog een keer verzenden.

Dus als ik dit doe klopt het wel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$antwoord
-a= htmlspecialchars($aBericht['antwoordA'])
//While looop
<input type="submit" name="a" class="form" value="'.$antwoord-a.'" />
Gewijzigd op 20/12/2011 07:39:29 door Niels Veer
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.