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:

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

<?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>';	
	}
?/>
- Queries kunnen in één regel
- variable en statement variabelen kunnen korter
- Je hoeft geen veriable aan te maken voor ->num_rows
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.

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.


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.
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.

Reageren