'Volle' sessies tellen en mee rekenen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roel H

Roel H

28/12/2013 18:27:48
Quote Anchor link
Hallo allemaal,

Ik heb een, voor mij, moeilijke vraag. Ik ben dankzij het forum al heel ver met mijn script, maar het rekenen zit ik f op vast.
Er heb 6 sessions, waarbij vanaf 3 sessions die 'gevuld' zijn, een vast bedrag staat. (€20,-)
Mochten er maar 2 sessions 'gevuld' zijn, dan moeten deze opgeteld worden €8,50*2.
Nu dacht ik dit 'f' via een array te doen. De 6 sessions in een foreach gooien en dan tellen hoe veel er gevuld zijn. Maar dit werkt niet, iig niet bij mij.
Wie kan mij helpen? :)

Groet,
Roel

Edit: Dit was mijn gedachte...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
$kosten = array($_SESSION['kvth']['deelname_onder_zadel'], $_SESSION['kvth']['deelname_zadeltijdsrit']);
        
        foreach($kosten as $keykosten => $waardekosten)
            {
                if($keykosten <= 2)
                    {
                        echo 'minder dan 2';
                    }
            }
Gewijzigd op 28/12/2013 18:31:52 door Roel H
 
PHP hulp

PHP hulp

03/12/2024 18:31:09
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/12/2013 18:52:36
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (count($_SESSION('kvth') < 2) {
    echo 'minder dan 2';
}

?>

KIS
 
Roel H

Roel H

28/12/2013 18:55:30
Quote Anchor link
Nee, want in kvth zitten ongeveer 19 data velden. Echter er zijn er maar 6 waarbij gerekend moet worden.
Echter wanneer een sessie leeg is, mag die niet geteld worden.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/12/2013 19:09:41
Quote Anchor link
Ik ben de devils advocate
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$kosten
= array(null, null); // lees nul komma nul
echo count($kosten);
?>

Wat denk je wat de uitkomst is?
Gewijzigd op 28/12/2013 19:10:32 door Ger van Steenderen
 
Roel H

Roel H

28/12/2013 19:25:34
Quote Anchor link
Ger van Steenderen op 28/12/2013 19:09:41:
Ik ben de devils advocate
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$kosten
= array(null, null); // lees nul komma nul
echo count($kosten);
?>

Wat denk je wat de uitkomst is?


Oke, ik snap wat je wilt zeggen denk ik ;-)
Maar een simpele oplossing is er niet dus, als ik je zo goed begrijp? :)
 
- SanThe -

- SanThe -

28/12/2013 20:17:21
Quote Anchor link
Ik begrijp de vraag niet.

Roel H op 28/12/2013 18:27:48:
Er heb 6 sessions

Er is altijd maar 1 session tegelijk aan het werk en dat is de inhoud van $_SESSION.

Roel H op 28/12/2013 18:27:48:
een vast bedrag staat. (€20,-)

Dat is geen getal maar tekst. Daar kan je niet mee rekenen.
 
Roel H

Roel H

29/12/2013 11:02:34
Quote Anchor link
Oke ik ga proberen het duidelijker te verwoorden:
ik heb deze sessions (als voorbeeld)
$_SESSION['input']['1']
$_SESSION['input']['2']
$_SESSION['input']['3']
$_SESSION['input']['4']
$_SESSION['input']['5']
$_SESSION['input']['6']
Elke sessie kan een waarde hebben (bijvoorbeeld 'JA') of gewoon leeg( '' ).
Wanneer 3 of meer van deze gevuld zijn, is het bedrag €20,-
Echter wanneer er maar 1 gevuld is, mag het bedrag €8,50 zijn, en bij 2, €17,-

Hoe dit te maken?

Groet,
 
- SanThe -

- SanThe -

29/12/2013 11:36:34
Quote Anchor link
En telt 0 (nul) voor gevuld of 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
26
27
28
29
30
31
32
<?php
$_SESSION
['input']['1']=1;
$_SESSION['input']['2']=0;
$_SESSION['input']['3']='';
$_SESSION['input']['4']='aap';
$_SESSION['input']['5']=12;
$_SESSION['input']['6']='noot';

// Een nul telt niet mee
// Geeft 4

$teller = 0;
if(isset($_SESSION['input']) and is_array($_SESSION['input']))
{

    foreach($_SESSION['input'] as $waarde)
    {

        if(!empty($waarde))    $teller++;
    }
}

echo $teller;

// Een nul telt wel mee
// Geeft 5

$teller = 0;
if(isset($_SESSION['input']) and is_array($_SESSION['input']))
{

    foreach($_SESSION['input'] as $waarde)
    {

        if(strlen($waarde) != 0)    $teller++;
    }
}

echo $teller;
?>
Gewijzigd op 29/12/2013 11:49:33 door - SanThe -
 
Roel H

Roel H

29/12/2013 12:02:37
Quote Anchor link
Thanks, hiermee kan ik een stukje vooruit, echterr...
Ik heb van deze $_SESSION['input']['1'] er een stukje of 18/19 (uit me hoofd).
Maar een 6 aantal mogen maar mee geteld worden. Kan ik het dan eventueel zo doen?
Dit lijkt bij de handigste oplossing, waarbij ik bepaal welke sessies meegeteld mogen worden?

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
<?php

$kosten
= array(
$_SESSION['input']['1'],
$_SESSION['input']['2'],
$_SESSION['input']['3'],
$_SESSION['input']['4'],
$_SESSION['input']['5'],
$_SESSION['input']['6']);

// Een nul telt niet mee
// Geeft 4

$teller = 0;
if(isset($kosten) and is_array($kosten))
{

    foreach($kosten as $waarde)
    {

        if(!empty($waarde))    $teller++;
    }
}

echo $teller;
?>


Edit:
Hiermee krijg ik altijd nul dus...
Gewijzigd op 29/12/2013 12:09:21 door Roel H
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

29/12/2013 12:42:43
Quote Anchor link
Ik kom een mens tegen op straat en zeg "Hallo mens, besta jij en ben je een mens"
Zoiets doe jij op regel 14, je hebt een variabele met de naam kosten en van het type array aangemaakt, en dan ga je daar controleren of ie bestaat en of het een array is.

Je gooit ook alles op één hoop, terwijl je met een gedeelte van die hoop nog wat andere dingen moet doen.
En ook zou ik niet op voorhand lege waarden aanmaken maar pas als ze een waarde hebben:
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
<?php
session_start();
if (!isset($_SESSION['input'])
    $_SESSION['input'] = array();
    $_SESSION['deelnames'] = array();
}

//als dan een bepaald gegeven wordt ingevoerd:
$_SESSION['deelnames']['veldnaam'] = 'waarde';

//kosten opvragen
$bedrag = count($_SESSION['deelnames']) * 8.5;
//max 20
$bedrag = ($bedrag < 20) ? $bedrag: 20;
?>
Gewijzigd op 29/12/2013 12:43:16 door Ger van Steenderen
 
- SanThe -

- SanThe -

29/12/2013 13:10:43
Quote Anchor link
@Ger: Die regel komt uit mijn voorbeeldje. Ik neem automatisch aan dat het bestaan van de juiste session-gegevens bij TS geen garantie heeft. Vandaar de extra check.
 
Roel H

Roel H

29/12/2013 15:47:38
Quote Anchor link
Wow na eerlijk gezegd snap ik er even weinig meer van haha, Ger.
Mijn sessies zijn al gemaakt, dmv het formulier wat mensen invullen. Dit zijn de waarden dan.
$_SESSION['kvth']['dressuur'] = waarde(verschillende mogelijkheden) of NULL (niks ingevuld)
$_SESSION['kvth']['springen'] = waarde(verschillende mogelijkheden) of NULL (niks ingevuld)
$_SESSION['kvth']['deelname2'] = waarde(verschillende mogelijkheden) of NULL (niks ingevuld)

Hiervan zijn er in totaal 6, welke allemaal of een waarde kunnen hebben of leeg (NULL) zijn. Wanneer een sessie leeg is, wordt die niet mee geteld. Wanneer er 3 of meer zijn ingevuld, betaal je 20 euro.
Bij 1 is het 8,50 en bij 2 17 euro.

Nu snap ik jou idee niet helemaal Ger. Regel 8 bijvoorbeeld, hoe wordt dat ingevuld dan?
Sorry dat ik zo traag van begrip van hiermee nu... ;)
 
Roel H

Roel H

02/01/2014 19:25:21
Quote Anchor link
Dit heb ik nu, maar het werkt niet.
Wie o wie please, ik kom er gewoon niet meer uit...

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
<?
$rekenen
= array(
                $_SESSION['input']['deelnamemetzonder'],
                $_SESSION['input']['dressuuur_onder_zadel'],
                $_SESSION['input']['dressuur_aangespannen'],
                $_SESSION['input']['deelname_zadeltijdsrit']);
            
            foreach($rekenen as $waardes)
            {

                
            // Een nul telt niet mee
            // Geeft 4

            $teller = 0;
            if(isset($_SESSION['input']) and is_array($_SESSION['input']))
            {

                foreach($waardes as $waarde)
                {

                    if(!empty($waarde))    $teller++;
                }
            }
            }

            echo $teller;
?>
 
Jasper DS

Jasper DS

03/01/2014 00:54:32
Quote Anchor link
probeer dit:

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
<?php

session_start();

$_SESSION['input']['deelnamemetzonder'] = 20;
$_SESSION['input']['dressuuur_onder_zadel'] = 50;
$_SESSION['input']['dressuur_aangespannen'] = null;
$_SESSION['input']['deelname_zadeltijdsrit'] = 15;

$teller = 0;
$output = 0;

foreach($_SESSION['input'] as  $value)
{

    if($value)
    {

        $teller++;

        if($teller > 2)
        {

            $output = 20;
        }

        else
        {
            $output += $value;
        }
    }
}


echo 'er waren ' . $teller . ' gevulde sessions<br/>';
echo 'dat maakt een bedrag van &euro;' . $output;
?>


als er slechts 2 sessies zijn ingevuld telt hij deze op, zijn er meerdere ingevuld dan geven we standaard 20 terug.
 
Ozzie PHP

Ozzie PHP

03/01/2014 01:58:53
Quote Anchor link
Roel H op 29/12/2013 11:02:34:
Oke ik ga proberen het duidelijker te verwoorden:
ik heb deze sessions (als voorbeeld)
$_SESSION['input']['1']
$_SESSION['input']['2']
$_SESSION['input']['3']
$_SESSION['input']['4']
$_SESSION['input']['5']
$_SESSION['input']['6']
Elke sessie kan een waarde hebben (bijvoorbeeld 'JA') of gewoon leeg( '' ).
Wanneer 3 of meer van deze gevuld zijn, is het bedrag €20,-
Echter wanneer er maar 1 gevuld is, mag het bedrag €8,50 zijn, en bij 2, €17,-

Hoe dit te maken?

Groet,

Enjoy...

http://3v4l.org/jNXl9

(het resultaat/output van de code zie je onderaan de pagina)
Gewijzigd op 03/01/2014 02:00:26 door Ozzie PHP
 
Ward van der Put
Moderator

Ward van der Put

03/01/2014 09:04:08
Quote Anchor link
Je kunt ook de lege elementen in $_SESSION['input'] negeren met array_filter() en daarna met count() tellen hoeveel elementen je overhoudt:
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
<?php
// Testdata
$_SESSION['input']['1'] = '';
$_SESSION['input']['2'] = 'JA';
$_SESSION['input']['3'] = '';
$_SESSION['input']['4'] = '';
$_SESSION['input']['5'] = 'JA';
$_SESSION['input']['6'] = '';

// Aantal ingevulde inputs tellen
$telling = count(array_filter($_SESSION['input']));

// Bedrag bepalen
if ($telling == 1) {
    $bedrag = 8.5;
}
elseif ($telling == 2) {
    $bedrag = 17;
}
else {
    $bedrag = 20;
}


// Voilá
var_dump($bedrag);
?>
 
Ozzie PHP

Ozzie PHP

03/01/2014 10:00:40
Quote Anchor link
Dan zou ik het laatste stukje zo doen:

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
<?php
// Testdata
$_SESSION['input']['1'] = '';
$_SESSION['input']['2'] = 'JA';
$_SESSION['input']['3'] = '';
$_SESSION['input']['4'] = '';
$_SESSION['input']['5'] = 'JA';
$_SESSION['input']['6'] = '';

// Aantal ingevulde inputs tellen
$telling = count(array_filter($_SESSION['input']));

// Bedrag bepalen
$bedrag = $telling < 3 ? $telling * 8.5 : 20;

// Voilá
var_dump($bedrag);
?>
 
Roel H

Roel H

03/01/2014 19:26:09
Quote Anchor link
Mag ik jullie danken, eindelijk werkt alles naar behoren :)
Super thanksss!
 
Ozzie PHP

Ozzie PHP

03/01/2014 20:12:32
Quote Anchor link
you're welcome :)
 



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.