Script werkt in PHP 7.4 maar niet in 8.0
Deze gebruikt PHP voor berekeningen. Werkt allemaal in PHP 7.4. Maar als ik 8.0 aanzet, dan niet meer. Ik ben geen kenner en vernam dat er in 8.0 een paar dingen anders zijn.
Wellicht kan iemand van onderstaand voorbeeld gelijk zien wat er aan de hand is/wat 8.0 niet accepteert. Alvast dank.
Code (php)
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
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
$tebehalentotaal=str_replace(',' , '.',$tebehalentotaal);
$behaaldepunten=str_replace(',' , '.',$behaaldepunten);
$ditgeeft60bij=$tebehalentotaal*0.6;
$foutperpunt=($tebehalentotaal-$ditgeeft60bij)/4;
$foutperpunt=number_format($foutperpunt,2,".",",");
$ditgeeft55bij=number_format($ditgeeft60bij,2,".",",");
$cijfer=10-(($tebehalentotaal-$behaaldepunten)*(4/($tebehalentotaal-$ditgeeft60bij)));
$cijfer=max($cijfer,1);
$cijfer=number_format($cijfer,2,".",",");
$date=date("d/M/Y");
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$tableresult="";
$tableresult.="<table class='uk-table uk-table-striped uk-table-small'>";
$tableresult.="<thead>";
$tableresult.="<tr>";
$tableresult.="<th style='color:#0bc9eb;font-weight:bold'>Goed</th>";
$tableresult.="<th style='color:#0bc9eb;font-weight:bold'>Fout</th>";
$tableresult.="<th style='color:#0bc9eb;text-align:right;font-weight:bold'>Cijfer</th>";
$tableresult.="</tr>";
$tableresult.="</thead>";
//$i from 0 to te behalen totaal,increasing by half:
for($i=0;$i<=$tebehalentotaal;$i+=0.5){
//resultaat
$resultaat=(10-($i*(4/($tebehalentotaal-$ditgeeft60bij))));
if($resultaat<1){
$resultaat="1.0";
}
else{
$resultaat=number_format($resultaat,1,".",",");
}
//resultaat heel color
if($resultaat>=6){
$resultcolor="#47d147";
}
else{
$resultcolor="#ff471a";
}
//punten
$tableresult.="<tr>";
$tableresult.="<td style='color:#ffffff'>".($tebehalentotaal-$i)."</td>";
//fouten
$tableresult.="<td style='font-size:16px'>".($i)."</td>";
//resultaat
$tableresult.="<td style='color:$resultcolor;text-align:right'>".$resultaat."</td>";
}
$tableresult.="<tfoot>";
$tableresult.="<tr>";
$tableresult.="<th style='color:#0bc9eb;font-weight:bold'>Goed</th>";
$tableresult.="<th style='color:#0bc9eb;font-weight:bold'>Fout</th>";
$tableresult.="<th style='color:#0bc9eb;text-align:right;font-weight:bold'>Cijfer</th>";
$tableresult.="</tr>";
$tableresult.="</foot>";
$tableresult.="</table>";
$behaaldepunten=str_replace(',' , '.',$behaaldepunten);
$ditgeeft60bij=$tebehalentotaal*0.6;
$foutperpunt=($tebehalentotaal-$ditgeeft60bij)/4;
$foutperpunt=number_format($foutperpunt,2,".",",");
$ditgeeft55bij=number_format($ditgeeft60bij,2,".",",");
$cijfer=10-(($tebehalentotaal-$behaaldepunten)*(4/($tebehalentotaal-$ditgeeft60bij)));
$cijfer=max($cijfer,1);
$cijfer=number_format($cijfer,2,".",",");
$date=date("d/M/Y");
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$tableresult="";
$tableresult.="<table class='uk-table uk-table-striped uk-table-small'>";
$tableresult.="<thead>";
$tableresult.="<tr>";
$tableresult.="<th style='color:#0bc9eb;font-weight:bold'>Goed</th>";
$tableresult.="<th style='color:#0bc9eb;font-weight:bold'>Fout</th>";
$tableresult.="<th style='color:#0bc9eb;text-align:right;font-weight:bold'>Cijfer</th>";
$tableresult.="</tr>";
$tableresult.="</thead>";
//$i from 0 to te behalen totaal,increasing by half:
for($i=0;$i<=$tebehalentotaal;$i+=0.5){
//resultaat
$resultaat=(10-($i*(4/($tebehalentotaal-$ditgeeft60bij))));
if($resultaat<1){
$resultaat="1.0";
}
else{
$resultaat=number_format($resultaat,1,".",",");
}
//resultaat heel color
if($resultaat>=6){
$resultcolor="#47d147";
}
else{
$resultcolor="#ff471a";
}
//punten
$tableresult.="<tr>";
$tableresult.="<td style='color:#ffffff'>".($tebehalentotaal-$i)."</td>";
//fouten
$tableresult.="<td style='font-size:16px'>".($i)."</td>";
//resultaat
$tableresult.="<td style='color:$resultcolor;text-align:right'>".$resultaat."</td>";
}
$tableresult.="<tfoot>";
$tableresult.="<tr>";
$tableresult.="<th style='color:#0bc9eb;font-weight:bold'>Goed</th>";
$tableresult.="<th style='color:#0bc9eb;font-weight:bold'>Fout</th>";
$tableresult.="<th style='color:#0bc9eb;text-align:right;font-weight:bold'>Cijfer</th>";
$tableresult.="</tr>";
$tableresult.="</foot>";
$tableresult.="</table>";
En zo niet, wat meldt de error-log?
Verder ben ik benieuwd of de vertoonde code wel echt van CalcBuilder is? Erg vaak is de code voorzien van Engelse taal en comments. Of is het custom-made?
Gewijzigd op 24/10/2022 10:46:18 door - Ariën -
Dank voor de reactie. De berekening op de webpagina/frontend wordt niet uitgevoerd. Error log heb ik nog niet gecheckt/gevonden.
Zoek de error_log dan maar eens op. Daar staat meer in. Misschien kan je deze vinden via je hosting-panel of buiten je webroot in je (S)FTP
Bedankt, ik ga even zoeken.
Toevoeging op 24/10/2022 11:39:20:
- Ariën - op 24/10/2022 10:43:29:
Verder ben ik benieuwd of de vertoonde code wel echt van CalcBuilder is? Erg vaak is de code voorzien van Engelse taal en comments. Of is het custom-made?
Kan je dit bevestigen?
https://www.moonsoft.es/joomla/product/3-calc-builder
Ik verwacht niet dat ze Nederlandse taal zouden gebruiken in hun scripts. :-)
Is het wel de juiste code?
Is het nog gelukt?
Wat PHP 8 niet accepteerde (en 7 dus wel) was:
$variabele=str_replace(',' , '.',$variabele);
Dit moest worden:
$variabele=floatval(str_replace(',' , '.',$variabele));
En dat het probleem pas optrad op de plek waar je $variabele gebruikte waar ook nog gecontroleerd werd op $variabele een getal was.
Dus niet een string die gelijkenis vertoont met een getal, maar echt een getal is.
Zou te maken kunnen hebben met typehinting
Bedankt voor reactie. Jammergenoeg heb ik te weinig kennis om het te begrijpen. Voor mij werkt het op deze manier maar het lijkt dus een workaround.