Warning: Division by zero
Ik heb op mijn webshop in ledverlichting een kleine besparingscalculator..
Sinds eergisteren ben ik overgestapt van hostingprovider TransIP naar GoDaddy (vanwege SSL)
Met deze overstap is het volgende probleem in mijn calculator naar voren gekomen: Warning: Division by zero in 3 regels..
Ik weet wat dit betekent.. Delen door nul kan niet! Of er wordt geen waarde gegeven of verkregen..
Mijn vermoeden is dat er een klein foutje in mijn script zit waardoor er geen waarde verkregen wordt..
Wel vind ik het raar dat het bij mijn vorige hostingprovider wel werkte en bij mijn huidige ineens niet meer!
Ik heb de afgelopen twee dagen en nachten het hele internet afgestruind en vanalles geprobeerd maar het wil niet lukken :(
Normaal wil ik zulke dingen per se zélf oplossen maar aangezien haast geboden is hoop ik dat iemand me hier even op weg kan helpen.
Dit zijn twee van de regels waar het dus fout gaat:
Quote:
$gloeilampTerugverdienUren = $gloeilampVerschilAanschaf / $gloeilampVerschilPerUur;
$gloeilampTerugverdienDagen = $gloeilampTerugverdienUren / $branduren;
$gloeilampTerugverdienDagen = $gloeilampTerugverdienUren / $branduren;
Mijn script begint als volgt:
Quote:
$gloeilampAantal = $_GET[gloeilampAantal];
$gloeilampWatt = $_GET[gloeilampWatt];
$branduren = $_GET[branduren];
$kwPrijs = $_GET[kwPrijs];
$ledgloeilampPrijs = $_GET[ledgloeilampPrijs];
$gloeilampWatt = $_GET[gloeilampWatt];
$branduren = $_GET[branduren];
$kwPrijs = $_GET[kwPrijs];
$ledgloeilampPrijs = $_GET[ledgloeilampPrijs];
De waarde voor $branduren zou via het formulier verkregen moeten worden..
Hier staat de calculator: http://www.anyled.nl/index.php?route=information/information&information_id=8
Bij voorbaat dank voor mijn reddende engel!
Gewijzigd op 07/04/2014 17:36:04 door Jan Joosten
Doe eens een var_dump() op die variabelen.
Komen de variabelen uit de database? Let dan goed op verschillen tussen hoofd en kleine letters bij de tabelnamen en kolomnamen.
Jan Joosten op 07/04/2014 17:31:38:
De waarde voor $branduren zou via het formulier verkregen moeten worden..
Maar op het moment dat het formulier wordt getoond, is er nog niets verzonden.
Dus is $branduren leeg/0.
Lijkt me goed om te controleren of het formulier verzonden is. Zo ja: voer dan berekeningen uit.
De gegevens komen trouwens niet uit een database.
Obelix en Idefix, daar lijkt wat in te zitten over dat het formulier nog niet verzonden is en $branduren op dat moment leeg/0 is.
Maar.. standaard staan de branduren op 4..
Dit is de slider die voor de branduren zorgt:
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
</script>
</td></tr>
<tr>
<th>Branduren per dag: </th>
<td><input id="input3" size=3 type="text" name="branduren" /></td><td>
<script>
var slider3 = new dhtmlxSlider(null, {
size:200,
skin: "default",
vertical:false,
step:1,
min:1,
max:24,
value:<? if (empty($branduren)){ echo '4';} else {echo $branduren;}?>
})
slider3.linkTo('input3');
slider3.setSkin('default');
slider3.init();
</script>
?>
</script>
</td></tr>
<tr>
<th>Branduren per dag: </th>
<td><input id="input3" size=3 type="text" name="branduren" /></td><td>
<script>
var slider3 = new dhtmlxSlider(null, {
size:200,
skin: "default",
vertical:false,
step:1,
min:1,
max:24,
value:<? if (empty($branduren)){ echo '4';} else {echo $branduren;}?>
})
slider3.linkTo('input3');
slider3.setSkin('default');
slider3.init();
</script>
?>
De berekening zelf hoeft ook pas uitgevoerd te worden als op 'bereken mijn besparing' word geklikt.
Misschien zit het 'm in de volgorde van mijn script?
Gewijzigd op 07/04/2014 21:31:55 door Jan Joosten
De tip van Frank lijkt me wel goed (al merk je misschien niet het verschil).
Ook het antwoord op de vraag van San The ben ik benieuwd naar.
Wat is de volgorde in je script? Laat anders eens relevante code (of de opbouw van je pagina) zien.
Ik zou eerst controleren of het formulier verzonden is. Ja? Controleer (!) en verwerk de gegevens en toon de uitkomst daarvan op het scherm.
Nee? Laat alleen het formulier zien (er hoeven dan geen berekeningen te worden gemaakt)
Word deze waarde door deze regel niet voor $branduren ingevuld omdat javascript word gebruikt?
Het formulier is bij het laden van de pagina nog niet verzonden als het goed is..
De berekeningen en onderliggende berekeningen van de desbetreffende foute regels geven me ook echt geen 0 als uitkomst.
Ik ga morgen verder proberen of ik dit met jullie tips krijg opgelost.
In ieder geval bedankt voor de hulp zover!
Gewijzigd op 08/04/2014 13:16:33 door Jan Joosten
Na het submitten worden 2 van de foutmeldingen al weggehaald dus ik ga er vanuit dat de variabele gewoon leeg is of 0.
Je begint in je script met het ophalen van $_GET waarden, terwijl je nergens controleert of het formulier verzonden is en of er waarden worden doorgegeven die voldoen aan bepaalde criteria.
Op regel 155 gebruik je al $branduren, terwijl die daar nog niet bestaat.
Ik zou het script herschrijven en de structuur aanpassen. Eerst controles en berekeningen, dan pas uitput.
Nu heb je eerst een beetje php, dan css, dan weer php en html.
Verder is het al een aantal jaar gebruikelijk om je pagina op te maken met css ipv inline (<span style="color:darkgreen; font-size:12px;">)
@Jan,
Die fouten hebben er altijd ingezeten, alleen kreeg je ze bij je vorige provider niet in beeld.
Je kan dus beter (zoals Obelix ook aangeeft) heel de berekening naar het begin van je script halen en deze pas uitvoeren nadat je gecontroleerd hebt of het formulier verzonden is.
Ger van Steenderen op 08/04/2014 09:37:30:
Error reporting staat aan, dat is de reden van dit topic ;-)
Maar dan had ik ook melding verwacht dat niet alle variabelen bestaan.
De calculator doet opzich z'n werk nu maar ga zodra ik tijd heb het hele script doornemen/herschrijven/aanpassen. (heb 'm zelf ook niet geschreven)
In ieder geval bedankt voor de tekst en uitleg anders was ik er waarschijnlijk nog lang mee bezig geweest!