Script minimaliseren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

J C

J C

09/03/2016 05:31:40
Quote Anchor link
Ik heb een script gemaakt, maar een groot deel van eht script heb ik er nu dubbel ingezet.
Ik denk dat ik delen zou kunnen hergebruiken, enerzijds om de code korter te maken en anderzijds om in een later stadium fouten te vermijden.

Het is eigenlijk 4 keer hetzelfde met kleine veranderingen.

Eerst kijk ik of de bestelling bestaat en daarna kijk ik of er in de bestelling ook orderregels staan.
De afhandeling is steeds net iets anders, maar 2 queries zijn nagenoeg hetzelfde met uitzondering op de waarde van de status.

Of maak ik het dan alleen maar onverzichtelijker?

Dit stuk herhaalt zich steeds weer muv de waarde bij status:
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
<?php
 $bestellingscheckqry
= "
                SELECT
                    id,
                    ordernr
                FROM
                    bestellingen
                WHERE
                    klantnummer     =    ?    
                AND
                    status            = '30'"
;
                            
    if(!$bestellingscheckstmt = $connectionwebshop->prepare($bestellingscheckqry)){
    echo 'Fout in query: '.$connectionwebshop->error;
    }
else {
    $bestellingscheckstmt->bind_param('i', $kl_gegevens['kl_overzicht_klnr']);
    $bestellingscheckstmt->execute();
    $bestellingscheckstmt->bind_result($basket, $oldordernr);
    $bestellingscheckstmt->store_result();
    $checkbestellingrows = $bestellingscheckstmt->num_rows;
    }

    if($checkbestellingrows >= 1){
    $bestelregelcheckqry ="
            SELECT
                productid
            FROM
                bestelregel
            WHERE
                bestelnummer     =     ?
            AND
                aantal            !=    '0'
            "
;
        if(!$regelstmt = $connectionwebshop->prepare($bestelregelcheckqry)){
        echo 'Fout in query: '.$connectionwebshop->error;
        }
else {                
        $regelstmt->bind_param('i', $basket);
        $regelstmt->execute();
        $bestelregelresult = $regelstmt->get_result();
        $rows = $bestelregelresult->num_rows;
        }

        if($rows >= 1){
            $oldordermenu ='';
            while ($bestellingscheckstmt->fetch()) {
            $oldordermenu .='<a href="'.$templink.$langlink.$paginalink.'bestelling'.$winkelwagenlink.'bekijken'.$ordernrlink.$oldordernr.'">'.$oldordernr.'</a><br/>';
            }

            $bestellingscheckstmt->close();
        }

?>



Dit is wat ik totaal heb gemaakt:
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
<?php
        //let's check out if there is an active basket and if there are products in the basket
    $bestellingscheckqry = "
                SELECT
                    id
                FROM
                    bestellingen
                WHERE
                    klantnummer     =    ?    
                AND
                    status            = '10'"
;
                            
    if(!$bestellingscheckstmt = $connectionwebshop->prepare($bestellingscheckqry)){
    echo 'Fout in query: '.$connectionwebshop->error;
    }
else {
    $bestellingscheckstmt->bind_param('i', $kl_gegevens['kl_overzicht_klnr']);
    $bestellingscheckstmt->execute();
    $bestellingscheckstmt->bind_result($basket );
    $bestellingscheckstmt->store_result();
    $checkbestellingrows = $bestellingscheckstmt->num_rows;
    $bestellingscheckstmt->fetch();
    $bestellingscheckstmt->close();
    }

    if($checkbestellingrows == 1){
    $bestelregelcheckqry ="
            SELECT
                productid
            FROM
                bestelregel
            WHERE
                bestelnummer     =     ?
            AND
                aantal            !=    '0'
            "
;
        if(!$regelstmt = $connectionwebshop->prepare($bestelregelcheckqry)){
        echo 'Fout in query: '.$connectionwebshop->error;
        }
else {                
        $regelstmt->bind_param('i', $basket);
        $regelstmt->execute();
        $bestelregelresult = $regelstmt->get_result();
        $rows = $bestelregelresult->num_rows;
        }

        if($rows >= 1){
        $winkelwagenmenu ='<a href="'.$templink.$langlink.$paginalink.'winkelwagen'.$winkelwagenlink.'bekijken">Winkelwagen</a>';
        }
else{
        $winkelwagenmenu ='Uw winkelwagen is nog leeg';
        }
    }
else{
    $winkelwagenmenu ='Uw winkelwagen is nog leeg';
    }
        
    $leftmenu .= '
                        <div>
                            <div class="heading1 wow fadeInDown" data-wow-duration="1s" data-wow-delay="0.1s">
                                <h2>Winkelwagen</h2>
                                '
.$winkelwagenmenu.'
                            </div>
                        </div>'
;
                        
//let's check out if there any orders waiting for processing
    $bestellingscheckqry = "
                SELECT
                    id,
                    ordernr
                FROM
                    bestellingen
                WHERE
                    klantnummer     =    ?    
                AND
                    status            = '20'"
;
                            
    if(!$bestellingscheckstmt = $connectionwebshop->prepare($bestellingscheckqry)){
    echo 'Fout in query: '.$connectionwebshop->error;
    }
else {
    $bestellingscheckstmt->bind_param('i', $kl_gegevens['kl_overzicht_klnr']);
    $bestellingscheckstmt->execute();
    $bestellingscheckstmt->bind_result($basket, $oldordernr);
    $bestellingscheckstmt->store_result();
    $checkbestellingrows = $bestellingscheckstmt->num_rows;
    }

    if($checkbestellingrows >= 1){
    $bestelregelcheckqry ="
            SELECT
                productid
            FROM
                bestelregel
            WHERE
                bestelnummer     =     ?
            AND
                aantal            !=    '0'
            "
;
        if(!$regelstmt = $connectionwebshop->prepare($bestelregelcheckqry)){
        echo 'Fout in query: '.$connectionwebshop->error;
        }
else {                
        $regelstmt->bind_param('i', $basket);
        $regelstmt->execute();
        $bestelregelresult = $regelstmt->get_result();
        $rows = $bestelregelresult->num_rows;
        }

        if($rows >= 1){
            $oldordermenu ='';
            while ($bestellingscheckstmt->fetch()) {
            $oldordermenu .='<a href="'.$templink.$langlink.$paginalink.'bestelling'.$winkelwagenlink.'bekijken'.$ordernrlink.$oldordernr.'">'.$oldordernr.'</a><br/>';
            }

            $bestellingscheckstmt->close();
        }

    $leftmenu .= '
                        <div>
                            <div class="heading1 wow fadeInDown" data-wow-duration="1s" data-wow-delay="0.1s">
                                <h2>Bestelling in behandeling</h2>
                                '
.$oldordermenu.'
                            </div>
                        </div>'
;    
    }

    
//let's check out if there any orders waiting for approval of customer
    $bestellingscheckqry = "
                SELECT
                    id,
                    ordernr
                FROM
                    bestellingen
                WHERE
                    klantnummer     =    ?    
                AND
                    status            = '30'"
;
                            
    if(!$bestellingscheckstmt = $connectionwebshop->prepare($bestellingscheckqry)){
    echo 'Fout in query: '.$connectionwebshop->error;
    }
else {
    $bestellingscheckstmt->bind_param('i', $kl_gegevens['kl_overzicht_klnr']);
    $bestellingscheckstmt->execute();
    $bestellingscheckstmt->bind_result($basket, $oldordernr);
    $bestellingscheckstmt->store_result();
    $checkbestellingrows = $bestellingscheckstmt->num_rows;
    }

    if($checkbestellingrows >= 1){
    $bestelregelcheckqry ="
            SELECT
                productid
            FROM
                bestelregel
            WHERE
                bestelnummer     =     ?
            AND
                aantal            !=    '0'
            "
;
        if(!$regelstmt = $connectionwebshop->prepare($bestelregelcheckqry)){
        echo 'Fout in query: '.$connectionwebshop->error;
        }
else {                
        $regelstmt->bind_param('i', $basket);
        $regelstmt->execute();
        $bestelregelresult = $regelstmt->get_result();
        $rows = $bestelregelresult->num_rows;
        }

        if($rows >= 1){
            $oldordermenu ='';
            while ($bestellingscheckstmt->fetch()) {
            $oldordermenu .='<a href="'.$templink.$langlink.$paginalink.'bestelling'.$winkelwagenlink.'bekijken'.$ordernrlink.$oldordernr.'">'.$oldordernr.'</a><br/>';
            }

            $bestellingscheckstmt->close();
        }

    $leftmenu .= '
                        <div>
                            <div class="heading1 wow fadeInDown" data-wow-duration="1s" data-wow-delay="0.1s">
                                <h2>Bestelling wachtend op uw akkoord</h2>
                                '
.$oldordermenu.'
                            </div>
                        </div>'
;    
    }

    
//let's check out if there any orders wich are finished
    $bestellingscheckqry = "
                SELECT
                    id,
                    ordernr
                FROM
                    bestellingen
                WHERE
                    klantnummer     =    ?    
                AND
                    status            = '40'"
;
                            
    if(!$bestellingscheckstmt = $connectionwebshop->prepare($bestellingscheckqry)){
    echo 'Fout in query: '.$connectionwebshop->error;
    }
else {
    $bestellingscheckstmt->bind_param('i', $kl_gegevens['kl_overzicht_klnr']);
    $bestellingscheckstmt->execute();
    $bestellingscheckstmt->bind_result($basket, $oldordernr);
    $bestellingscheckstmt->store_result();
    $checkbestellingrows = $bestellingscheckstmt->num_rows;
    }

    if($checkbestellingrows >= 1){
    $bestelregelcheckqry ="
            SELECT
                productid
            FROM
                bestelregel
            WHERE
                bestelnummer     =     ?
            AND
                aantal            !=    '0'
            "
;
        if(!$regelstmt = $connectionwebshop->prepare($bestelregelcheckqry)){
        echo 'Fout in query: '.$connectionwebshop->error;
        }
else {                
        $regelstmt->bind_param('i', $basket);
        $regelstmt->execute();
        $bestelregelresult = $regelstmt->get_result();
        $rows = $bestelregelresult->num_rows;
        }

        if($rows >= 1){
            $oldordermenu ='';
            while ($bestellingscheckstmt->fetch()) {
            $oldordermenu .='<a href="'.$templink.$langlink.$paginalink.'bestelling'.$winkelwagenlink.'bekijken'.$ordernrlink.$oldordernr.'">'.$oldordernr.'</a><br/>';
            }

            $bestellingscheckstmt->close();
        }

    $leftmenu .= '
                        <div>
                            <div class="heading1 wow fadeInDown" data-wow-duration="1s" data-wow-delay="0.1s">
                                <h2>Afgeronde bestellingen</h2>
                                '
.$oldordermenu.'
                            </div>
                        </div>'
;    
    }
?
/>
[
/code]
Gewijzigd op 09/03/2016 05:37:57 door J C
 
PHP hulp

PHP hulp

18/04/2024 14:07:20
 
Marthijn Buijs

Marthijn Buijs

09/03/2016 10:45:13
Quote Anchor link
- Queries kunnen in één regel
- variable en statement variabelen kunnen korter
- Je hoeft geen veriable aan te maken voor ->num_rows
 
Ben van Velzen

Ben van Velzen

09/03/2016 11:01:12
Quote Anchor link
PHP Maarten op 09/03/2016 10:45:13:
- Queries kunnen in één regel

Kan, maar dat doe je uiteraard niet. Je foutmeldingen zijn een stuk duidelijker als je de queries spreidt, en het houdt je queries leesbaar. Zo te zien zullen een paar goed gemikte joins meer oplossen.
 
Randy vsf

Randy vsf

09/03/2016 12:30:05
Quote Anchor link
PHP Maarten op 09/03/2016 10:45:13:
- Queries kunnen in één regel

Dan heb jij nog nooit een ingewikkelde query geschreven.

PHP Maarten op 09/03/2016 10:45:13:
- variable en statement variabelen kunnen korter

Dat hangt van de voorkeur af, soms schrijf je iets liever voluit, dan wanneer je er na een half jaar weer naar kijkt te moeten raden wat het nu betekende.
BTW: het ging om dubbele code

@TS:
Zet alles in functies, en gebruik parameters bij die functies.
Ik zie vaker dezelfde query met alleen 1 argument anders.
 
J C

J C

10/03/2016 01:33:35
Quote Anchor link
Ik heb eerder geprobeerd delen van het script in variabelen te zetten, maar daarmee kreeg ik het script niet meer werkend.

Ik heb nog nooit zelf een functie gemaakt. Weten jullie misschien een tutorial waarin ze het duidelijk uitlegen?
Ik ben zelf al even opzoek geweest, maar kom voroal functies tegen voor Jquery en javascript.
 
Ward van der Put
Moderator

Ward van der Put

10/03/2016 09:45:40
Quote Anchor link
Begin bij het begin: de user-defined functions of "door de gebruiker gedefinieerde functies" in de PHP Manual.
 
Randy vsf

Randy vsf

10/03/2016 10:29:29
Quote Anchor link
J C op 10/03/2016 01:33:35:
Ik heb eerder geprobeerd delen van het script in variabelen te zetten, maar daarmee kreeg ik het script niet meer werkend.

Ik heb nog nooit zelf een functie gemaakt. Weten jullie misschien een tutorial waarin ze het duidelijk uitlegen?
Ik ben zelf al even opzoek geweest, maar kom voroal functies tegen voor Jquery en javascript.


codecademy.com Heeft een gratis cursus PHP. Daar worden o.a functies in uitgelegd.
 



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.