[php] Optellen van verschillen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rick kem

rick kem

05/11/2013 20:13:16
Quote Anchor link
Hallo,

Ik ben bezig met ene script, nu moet hij alle verschillen bij elkaar gaan optellen. En het mag niet meer zijn dan 92. Alleen ik kom niet verder met mijn code.

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
    if(isset($_POST['confirm'])){
        array();
        
        for ($i = 1; $i <= 7; $i++) {
           $open[] = Environment::Filter($_POST['open'.$i]);
           $closed[] = Environment::Filter($_POST['closed'.$i]);
        }

        
        $total = array_sum($closed-$open);
        
        if($total > 92){
            echo'Je bent meer dan 92 uur open';
            }
else{
    // de rest van de query
        }
    }

    ?>

        <form method="POST" action="index.php?p=supermarket&action=open&supermarket_id=<?php echo Environment::Filter($_GET['supermarket_id']); ?>">
        <table width="100%">
            <tr>
                <td><strong>Dag</strong></td>
                <td><strong>Geopend vanaf</strong></td>
                <td><strong>Gesloten om</strong></td>
            </tr>
            
            <?php
            for ($i = 1; $i <= 7; $i++) {
            ?>

            
            <tr>
                <td width="40%">
                <?php
                if($i == '1'){
                    echo'Maandag';
                }
elseif($i == '2'){
                    echo'Dinsdag';
                }
elseif($i == '3'){
                    echo'Woensdag';
                }
elseif($i == '4'){
                    echo'Donderdag';
                }
elseif($i == '5'){
                    echo'Vrijdag';
                }
elseif($i == '6'){
                    echo'Zaterdag';
                }
elseif($i == '7'){
                    echo'Zondag';
                }
else{
                    echo'Onbekend';
                }

                ?>

                </td>
                        
                <td width="30%">
                <select name = "open<?php echo $i; ?>">
                <?php
                for ($open = 8; $open <= 22; $open++) {
                ?>

                    <option value="<?php echo $open; ?>"><?php echo $open; ?>:00</option>
                <?php
                }
                ?>

                </select> uur
                </td>
                        
                <td width="30%">
                <select name = "closed<?php echo $i; ?>">
                <?php
                for ($closed = 8; $closed <= 22; $closed++) {
                ?>

                    <option value="<?php echo $closed; ?>"><?php echo $closed; ?>:00</option>
                <?php
                }
                ?>

                </select> uur
                </td>
            </tr>
            <?php
            }
            ?>

            <tr>
                  <td><input type="submit" value="Bevestig openingstijden" name="confirm"></td>
               </tr>
        </table>
        </form>


Het gaat erom zodra gebruiker op 'confirm'heeft gedrukt.

De error die ik krijg:
Unsupported operand types in ****** on line 41


Alvast bedankt voor uw hulp
 
PHP hulp

PHP hulp

21/11/2024 23:19:10
 
Reshad F

Reshad F

05/11/2013 21:19:04
Quote Anchor link
je weet dat cijfers buiten '' quotes moeten?

en ik zou je aanraden om hier een switch statement te gebruiken veel overzichtelijker als je zoveel if/else moet gebruiken..
 
Rick kem

rick kem

05/11/2013 21:20:56
Quote Anchor link
Om welke cijfers bedoel je?

& dankje ik zal er even naar kijken.
 
Reshad F

Reshad F

05/11/2013 21:27:43
Quote Anchor link
Alles wat hier staat

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

           if($i == '1'){
                    echo'Maandag';
                }
elseif($i == '2'){
                    echo'Dinsdag';
                }
elseif($i == '3'){
                    echo'Woensdag';
                }
elseif($i == '4'){
                    echo'Donderdag';
                }
elseif($i == '5'){
                    echo'Vrijdag';
                }
elseif($i == '6'){
                    echo'Zaterdag';
                }
elseif($i == '7'){
                    echo'Zondag';
                }
else{
                    echo'Onbekend';
                }


?>


een '7' wordt gezien als een String ( Tekst ) en een 7 is echt een cijfer.

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

switch ($i) {
    case
0:
        echo "Zondag";
        break;
    case
1:
        echo "Maandag";
        break;
    case
2:
        echo "Dinsdag";
        break;
    case
3:
        echo "Woensdag";
        break;
    case
4:
        echo "Donderdag";
        break;
    case
5:
        echo "Vrijdag";
        break;
    case
6:
        echo "Zaterdag";
        break;
    default :

    echo "geen dag gekozen";
}


?>
Gewijzigd op 05/11/2013 21:29:13 door Reshad F
 
Rick kem

rick kem

05/11/2013 21:37:00
Quote Anchor link
Ja dat snapte ik, maar het gaat mij op de error, waardoor hij niet telt

regel: 41

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$total = array_sum($closed-$open);


Alvast bedankt voor je hulp
 
Eddy E

Eddy E

05/11/2013 22:07:04
Quote Anchor link
Werkt dit niet gewoon?

$total = int_val($closed) - intval($open);
 
Rick kem

rick kem

05/11/2013 22:14:41
Quote Anchor link
Call to undefined function int_val() in


Heb alleen die regel vervangen, verder niks
 
Wouter J

Wouter J

05/11/2013 22:17:21
Quote Anchor link
intval
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/11/2013 22:18:13
Quote Anchor link
Misschien iets minder code als je het zo zou doen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

$weekDays
= array('Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag');

for ($i = 1; $i <= 7; $i++)
    echo $weekDays[$i-1] . '<br>';

?>
 
Rick kem

rick kem

05/11/2013 22:19:15
Quote Anchor link
Hij gaat nu niet rekenen, er komt namelijk steeds '0' als uitkomst
 
Erwin H

Erwin H

05/11/2013 22:28:30
Quote Anchor link
Je probeert een array van een array af te trekken. Nu is php erg makkelijk met het omzetten van een variabele type als het nodig is, maar hier kan php ook niets mee.
 
Rick kem

rick kem

05/11/2013 22:29:56
Quote Anchor link
En welke code dien ik dan te gebruiken?
 
Michael -

Michael -

06/11/2013 13:15:48
Quote Anchor link
Je hebt al variabelen in de for-lus dus je kunt evengoed hier gelijk mee rekenen.
In het formulier open1,open2, etc vervangen door open[]. Dit telt dan automatisch vanaf 0.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$total
= 0;
for ($i = 0; $i < 7; $i++) {
   $total += ($_POST['closed'][$i] - $_POST['open'][$i]);
}

echo $total;
?>


Edit:
Code ingekort zonder Array_sum, met +=

Toevoeging op 06/11/2013 13:22:52:

Frank Nietbelangrijk op 05/11/2013 22:18:13:
Misschien iets minder code als je het zo zou doen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

$weekDays
= array('Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag');

for ($i = 1; $i <= 7; $i++)
    echo $weekDays[$i-1] . '<br>';

?>



Frank, waarom maak je het jezelf moeilijk door de for-lus met 1 te laten beginnen om vervolgens binnen de for-lus weer 1 af te trekken?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
for ($i = 0; $i < 7; $i++) {
    echo $weekDays[$i] . '<br />';
}

?>
Gewijzigd op 06/11/2013 13:54:26 door Michael -
 
Dos Moonen

Dos Moonen

06/11/2013 13:30:38
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

        $total
= 0;

        $open = array_map('intval', $_POST['open']);
        $closed = array_map('intval', $_POST['closed']);

        for ($i = 1; $i <= 7; $i++) {
           $total += $closed[$i]-$open[$i];
        }


?>


Dat zou moeten werken nadat je <select name = "open
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $i; ?>
"> veranderd naar <select name = "open[]"> en het zelfde doet voor de 'closed' select.
 
Michael -

Michael -

06/11/2013 13:36:46
Quote Anchor link
Dos Moonen op 06/11/2013 13:30:38:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

        $total
= 0;

        $open = array_map('intval', $_POST['open']);
        $closed = array_map('intval', $_POST['closed']);

        for ($i = 1; $i <= 7; $i++) {
           $total += $closed[$i]-$open[$i];
        }


?>


Dat zou moeten werken nadat je <select name = "open<?php echo $i; ?>"> veranderd naar <select name = "open[]"> en het zelfde doet voor de 'closed' select.

Dan moet je de for ($i = 1; $i <= 7; $i++) ook vervangen door for ($i = 0; $i < 7; $i++) anders pakt ie de eerste niet?
Gewijzigd op 06/11/2013 13:38:02 door Michael -
 
Rick kem

rick kem

06/11/2013 13:47:25
Quote Anchor link
Nee werkt niet hij weergeeft de volgende error:

Warning: array_map() [<a href='function.array-map'>function.array-map</a>]: Argument #2
 
Michael -

Michael -

06/11/2013 13:48:58
Quote Anchor link
Rick kem op 06/11/2013 13:47:25:
Nee werkt niet hij weergeeft de volgende error:

Warning: array_map() [<a href='function.array-map'>function.array-map</a>]: Argument #2


Probeer dit dan eens
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$total
= 0;
for ($i = 0; $i < 7; $i++) {
   $total += ($_POST['closed'][$i] - $_POST['open'][$i]);
}

echo $total;
?>

Het zelfde, maar zonder Array_map
 
Rick kem

rick kem

06/11/2013 13:56:58
Quote Anchor link
Hartstikke bedankt met ene beetje aanpassen werkt het nu.
 
Dos Moonen

Dos Moonen

06/11/2013 14:13:50
Quote Anchor link
"Warning: array_map() [<a href='function.array-map'>function.array-map</a>]: Argument #2" emhe... dat is niet de hele foutmelding...

Waarschijnlijk was het "Warning: array_map() [function.array-map]: Argument #2 should be an array in ..."?

Dat zou betekenen dat $_POST['open'] en $_POST['closed'] geen arrays zijn.
Als je bij de waarde van het 'name' attribuut van de select van je selects het cijfer vervangt door '[]' zal PHP er een array van maken.
Het werkt ook voor $_GET: http://stackoverflow.com/questions/1833330/how-to-get-php-get-array

Maar fijn te horen dat het werkt =]
 



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.