berekening fout met if else

Status
Niet open voor verdere reacties.

redskin

Gebruiker
Lid geworden
23 sep 2007
Berichten
90
Met een selecteer menu verder laten berekenen.
Als ik "Bezorgen" selecteer totaal product + 10%.
Als ik "Creditcard" selecteer totaal product + 5%.
Als ik allebei selecteer "Bezorgen" en "Creditcard"
totaal = (totaal product + 10%) + ((totaal product + 10%)+ 5%)
PHP:
    if ($type_service == "Bezorgen"){
		$totaal = round($totaal_product + ($totaal_product * 0.10));
	} else {
	 	$totaal = $totaal_product;
    }
    if ($betalingsmethode == "Creditcard"){
		$totaal = round($totaal_product + ($totaal_product * 0.05));
	} else {
	 	$totaal = $totaal_product;
	}

En deze script toon bij "te betalen" € .. €..
PHP:
<tabel>
          <tr>
		<td>Te betalen</td><td>:</td>
		<td>
			<?php
			if ($type_service == "Bezorgen"){
				$totaal = round($totaal_product + ($totaal_product * 0.10));
				echo "<b>&euro;  ".($totaal)."</b>";
			} else {
			 	echo "<b>&euro;  ".($totaal_product)."</b>";
			}
                        if ($betalingsmethode == "Creditcard"){
				$totaal = round($totaal_product + ($totaal_product * 0.05));
				echo "<b>&euro;  ".($totaal)."</b>";
			} else {
			 	echo "<b>&euro;  ".($totaal_product)."</b>";
			}
                        ?>
		</td>
	</tr>
</table>

Is er iemand die mij kan helpen?
Alvast bedankt
 
Je zal het het best leren als je zelf het verschil zoekt.
Hier het script dat "€..." slechts één keer weergeeft:

PHP:
<tabel> 
          <tr> 
        <td>Te betalen</td><td>:</td> 
        <td> 
            <?php 
            $totaal = $totaal_product;
            if ($type_service == "Bezorgen"){ 
                $totaal = round($totaal_product + ($totaal_product * 0.10)); 
            }
            if ($betalingsmethode == "Creditcard"){ 
                $totaal = round($totaal + ($totaal_product * 0.05)); 
            } 
            echo "<b>&euro;  ".($totaal)."</b>"; 
                        ?> 
        </td> 
    </tr> 
</table>

Succes.

Groetjes,

Jeroen.
 
Laatst bewerkt:
Hoi Jeroen,
ten eerste bedankt voor je hulp.

Ik heb je code gebruikt maar :
Het werk NIET als ik "Bezorgen" selecteer totaal + 0%
Het werk alleen als ik "Creditcard" selecteer totaal + 5%

:eek:
 
PHP:
$totaal = round($totaal_product + ($totaal_product * 0.10)); 

// schrijf je korter als:

$totaal = round($totaal_product * 1.10);
 
In mijn oplossing zit inderdaad nog een foutje.
Hier is de verbeterde versie:
PHP:
<tabel>  
          <tr>  
        <td>Te betalen</td><td>:</td>  
        <td>  
            <?php  
            $totaal = $totaal_product; 
            if ($type_service == "Bezorgen"){  
                $totaal = round($totaal + ($totaal_product * 0.10));  
            } 
            if ($betalingsmethode == "Creditcard"){  
                $totaal = round($totaal + ($totaal_product * 0.05));  
            }  
            echo "<b>&euro;  ".($totaal)."</b>";  
                        ?>  
        </td>  
    </tr>  
</table>

Ik vind de de tip van ErikBooy007 een betere manier om je berekening te maken.

Groetjes,

Jeroen.
 
ErikBooy007
Bedankt voor de tip, heb de code al aangepast.

JeroenE
PHP:
<tabel>  
          <tr>  
        <td>Te betalen</td><td>:</td>  
        <td>  
            <?php  
            $totaal = $totaal_product; 
            if ($type_service == "Bezorgen"){  
                $totaal = round($totaal + ($totaal_product * 0.10));  
            } 
            if ($betalingsmethode == "Creditcard"){  
                $totaal = round($totaal + ($totaal_product * 0.05));  
            }  
            echo "<b>&euro;  ".($totaal)."</b>";  
                        ?>  
        </td>  
    </tr>  
</table>
De bode bereken 2 keer, zie: $totaal = round($totaal + $totaal_product * 0.10))
Ik heb een beetje kunnen aanpassen zie heieronder:
PHP:
<tabel>  
          <tr>  
        <td>Te betalen</td><td>:</td>  
        <td>  
            <?php  
            $totaal = $totaal_product; 
            if ($type_service == "Bezorgen"){  
                $totaal = round($totaal_product * 1.10);  
            } 
            if ($betalingsmethode == "Creditcard"){  
                $totaal = round($totaal_product * 1.05));  
            }  
            echo "<b>&euro;  ".($totaal)."</b>";  
                        ?>  
        </td>  
    </tr>  
</table>
Maar het probleem blijft het zelfde. Als ik "Bezorgen" selecteer telt 10% niet bij.
Is deze code correct dan?
PHP:
if ($type_service == "Bezorgen"){
		$totaal = round($totaal_product * 1.10);
	} else {
	 	$totaal = $totaal_product;
	}
        if ($betalingsmethode == "Creditcard"){
		$totaal = round($totaal_product * 1.05);
	} else {
	 	$totaal = $totaal_product;
	}
 
Het probleem is dat je eerst de variable $totaal dezelfde waarde geeft als $totaal_product
De tweede keer, bij de eerste if, geef je die de waarde van 1.10 keer $totaal_product, maar de derde keer, bij de tweede if, geef je die de nieuwe waarde van 1.05 keer $totaal_product.
Wat gebeurt is dus dat je telkens een nieuwe waarde geeft zonder de 10 en 5 procent bij te tellen. We tellen die bij het orginele bedrag en geven de uitkomst door aan $totaal. Daardoor verdwijnt de vorige waarde en neemt $totaal de nieuw toegewezen waarde aan.
Hier volgt een verkorte versie van wat moet werken:

PHP:
<tabel>   
          <tr>   
        <td>Te betalen</td><td>:</td>   
        <td>   
            <?php   
            $totaal = $totaal_product;
            $totaal .= ($type_service == "Bezorgen") ? $totaal_product * 0.10 : 0;
            $totaal .= ($type_service == "Creditcard") ? $totaal_product * 0.05 : 0;
            echo "<b>&euro;  " . round($totaal) . "</b>";
                        ?>   
        </td>   
    </tr>   
</table>

De lange versie is:
PHP:
<tabel>   
          <tr>   
        <td>Te betalen</td><td>:</td>   
        <td>   
            <?php   
            $totaal = $totaal_product;  
            if ($type_service == "Bezorgen"){   
                $totaal .= $totaal_product * 0.10);
            }  
            if ($betalingsmethode == "Creditcard"){   
                $totaal .= $totaal_product * 0.05);
            }   
            echo "<b>&euro;  " . round($totaal) . "</b>";   
                        ?>   
        </td>   
    </tr>   
</table>

Als dit niet werkt, dan weet ik het, denk ik, niet meer.

Groetjes,

Jeroen.
 
Hoi Jeroen,
Als ik "Bezorgen" selecteer het werk.
Als ik "Creditcard" selecteer het werk ook.

Maar als ik ze allebei "Bezorgen" en "Creditcard" selecteer wordt 10% bijgeteld.
het moet eigenlijk totaal = (totaal + 10%) + (totaal + 5%).

Ik moet bij zeggen dat Bezorgen en Creditcard zitten op een aparte selecteer menu.
 
Er zat weer een foutje in mijn oplossing dat er door mij ingeslopen is.
PHP:
<tabel>    
          <tr>    
        <td>Te betalen</td><td>:</td>    
        <td>    
            <?php    
            $totaal = $totaal_product; 
            $totaal += ($type_service == "Bezorgen") ? $totaal_product * 0.10 : 0; 
            $totaal += ($betalingsmethode == "Creditcard") ? $totaal_product * 0.05 : 0; 
            echo "<b>&euro;  " . round($totaal) . "</b>"; 
                        ?>    
        </td>    
    </tr>    
</table>

Ik heb het nu zelf getest en het werkt wel degelijk.

Groetjes,

Jeroen.
 
Laatst bewerkt:
Hoi JeroenE,

Weet je misschien hoe ik deze code hieronder kan verkorten?
PHP:
                if ($type_service == "Bezorgen"){
			$via = $type_service." (10%) ";
			$totaal2 = round($totaal_product * 1.10);
		} else {
		 	$via = $type_service." (0%) ";
			$totaal2 = $totaal_product;
		} 
		if ($betalingsmethode == "Creditcard"){
			$via1 = $betalingsmethode." (5%) ";
			$totaal2 = round($totaal_product * 1.05);
		} else {
		 	$via1 = $betalingsmethode." ";
			$totaal2 = $totaal_product;
		}

Ik ga je niuewe code proberen...
Alvast bedankt
 
Een switch is makkelijker denk ik.

PHP:
switch( $sVar ){

  case 'x':
    round();
  break;

  case 'y':
    round();
  break;

  default:
    round();
  break;

}
 
Hoi Jeroen,
PHP:
<tabel>    
          <tr>    
        <td>Te betalen</td><td>:</td>    
        <td>    
            <?php    
            $totaal = $totaal_product; 
            $totaal += ($type_service == "Bezorgen") ? $totaal_product * 0.10 : 0; 
            $totaal += ($betalingsmethode == "Creditcard") ? $totaal_product * 0.05 : 0; 
            echo "<b>&euro;  " . round($totaal) . "</b>"; 
                        ?>    
        </td>    
    </tr>    
</table>
Ik heb deze code geprobeer maar het resultaat is ver naast. De vorige was better.
Als de variabel is het zelfde hoe kan dan veranderen? om de berekening beter te laten lopen.
 
sVu...

sorry hoor dat ik niet veel verstand heb van php. dus weet niks wat je over heb.
Zou je een voorbeel kunnen aangeven?

Iemand heb de code gemaakt voor mijn website en ik wil deze code een beetje uitbereiden en blijven gebruiken als echt handig is :eek:.

Alvast bedankt
 
Hoi Jeroen,
PHP:
<tabel>    
          <tr>    
        <td>Te betalen</td><td>:</td>    
        <td>    
            <?php    
            $totaal = $totaal_product; 
            $totaal += ($type_service == "Bezorgen") ? $totaal_product * 0.10 : 0; 
            $totaal += ($betalingsmethode == "Creditcard") ? $totaal_product * 0.05 : 0; 
            echo "<b>&euro;  " . round($totaal) . "</b>"; 
                        ?>    
        </td>    
    </tr>    
</table>
Ik heb deze code geprobeer maar het resultaat is ver naast. De vorige was better.
Als de variabel is het zelfde hoe kan dan veranderen? om de berekening beter te laten lopen.

Dat gebeurt omdat je voor de = een + zet. Dan weet het script dat de som van wat achter de = komt er gewoon bij moet geteld worden.

Ik kijk voor het andere morgen nog, allee ja, het is eigenlijk al morgen: 01.42uur.

Groetjes,

Jeroen.
 
Hallo,

Eindelijk ik heb dit opgelost.

Mensen, bedankt voor jullie hulp.

groetjes
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan