Beste mensen,

Ik heb onlangs mijn gehele scripting zo goed als mogelijk omgezet van 5.4 naar 7.4.
Alles werkt gelukkig naar behoren. Maar als ik nu naar versie 8 overschakel dan loopt mijn website vast. Ik zie geen error afhandeling op de pagina dus ik weet ook niet wat ik aan moet passen. Ik vernam dat er diverse drastische aanpassingen zijn gedaan in 8.0 maar kom er niet goed uit welke dat allemaal zijn.
Is er een tool om mijn huidige script in te laden en advies krijg van de tool wat er fout is of anders moet?
Is er een lijst met een overzicht van de wijzigingen?

Graag jullie input.

Groet,

Nanno
- Ariën - op 30/06/2022 19:15:12

Sla je SQL op in een losse variabele en echo deze eens. Controleer ook $controle_ip_in_mandje of deze niet false is.


Notice: Trying to access array offset on value of type null in /mnt/
Blijkbaar is de variable leeg. Maar dit heeft niks met de vergelijkingsoperator te maken.

Kijk eens met print_r(...) naar je array.
Ad Fundum op 30/06/2022 14:08:44

[quote="Ozzie PHP op 29/06/2022 16:42:45"]Ad Fundum, begrijp me niet verkeerd hoor, maar kun je je "afkeur" of hoe je het ook wil noemen jegens PHP niet gewoon achterwege laten?

Ik zal er op gaan letten. Het is er min of meer ingeslopen na 21 jaar programmeren in PHP.
[/quote]
Dankjewel voor je reactie en de sportieve wijze waarop je met mijn feedback omgaat. Ik begrijp goed dat je je wel eens over zaken frustreert. De vele mogelijkheden en de wijze waarop PHP ermee omgaat, bieden echter ook kansen. Het biedt jou de mogelijkheid om slimmere en robuustere code te programmeren waarmee je je concullega's het nakijken geeft. Misschien is dat een zinvollere, en vooral ook leukere, manier om er tegenaan te kijken. Zie het als onontdekt land met tal van goede en minder goede opties waarin je lekker je gang kunt gaan, en waarin je op jouw eigen manier via jouw eigen pad de perfecte code kunt schrijven. Kortom, als tip, focus je niet teveel op hetgeen er niet goed gaat, maar probeer zelf sturing te geven waardoor je valkuilen omzeilt en je mooie dingen creëert. Dat maakt het leven voor jezelf een stukje leuker :-)
Ozzie PHP op 30/06/2022 19:52:29

[...] Dat maakt het leven voor jezelf een stukje leuker :-)

Je hebt gelijk, het is de toon die de muziek maakt.
De volgende keer wanneer ik iemand zie worstelen vanuit de mij bekende valkuilen zal ik minder negatief zijn over die valkuilen, en meer positief over hoe het beter kan.

Dat gezegd hebbende, ga ik vandaag toch weer bezig in PHP. (Ik kom er niet vanaf ;-)
Een website die ik in 2008 heb gemaakt (met PHP 5.x), is aan een update toe. Ik ga PHP combineren met Rust, door de front-end met WebAssembly te maken.
Met Ward in m'n achterhoofd: "ja, meteen met unit tests!" :-)
Kijk ... het is inderdaad de toon die de muziek maakt, en in plaats van een vastgelopen langspeelplaat klink je nu als een nieuwe binnenkomer in de Top-40 op weg naar nr. 1 positie!! Deze positieve Ad Fundum bevalt een stuk beter :-)
- Ariën - op 30/06/2022 19:20:34

Blijkbaar is de variable leeg. Maar dit heeft niks met de vergelijkingsoperator te maken.

Kijk eens met print_r(...) naar je array.


Het is inderdaad de controle of het ip-adres wel of niet aanwezig is in de database Mandje.
Als deze niet aanwezig is, dan moet daar van mijn kant een error echo melding op het scherm komen. Is deze wel aanwezig, dan doorgaan naar de rest van het script.

Met php 7.4 krijg ik geen Notice vanuit de server en met php 8 dus wel.

Ik had iets gelezen over deze controle en dat daar veranderingen in zijn, maar ik begrijp het niet goed. Gebrek aan programmeer kennis.
Waar las je dat over die controles?

if ($row_x['IP'] != $ip_x && $row_x['Port'] != $ses_id)

Echo alle waardes eens en kijk of ze de juiste waardes bevatten die je verwacht.
Sowieso zie ik hier $row_x['IP'] staan, terwijl je met een fetch_object deze probeert op te halen.
- Ariën - op 01/07/2022 11:19:32

Waar las je dat over die controles?

if ($row_x['IP'] != $ip_x && $row_x['Port'] != $ses_id)

Echo alle waardes eens en kijk of ze de juiste waardes bevatten die je verwacht.
Sowieso zie ik hier $row_x['IP'] staan, terwijl je met een fetch_object deze probeert op te halen.


De object had ik even gebruikt om een andere manier te testen en was ik vergeten terug te zetten naar array. Dus verkeerd hier geplaatst. In het script weer aangepast en blijf dezelfde melding krijgen.

Dit las ik over de wijzigingen:


The change in string to int comparison mentioned above (e.g. '' == 0 now equates to false) has some other nasty consequences:

$a = '';

// php 8

if ( $a < 0 ) echo 'true'; // echos true
if ( $a < -1) echo 'true'; // echos true
if ( $a < -100 ) echo 'true'; // echos true

// php 7

if ( $a < 0 ) echo 'true'; // no output
if ( $a < -1) echo 'true'; // no output
if ( $a < -100 ) echo 'true'; // no output

So in a situation where you may have a web form input and expected an empty value to equate to 0, watch out not only for == 0, != 0, and <= 0 comparisons, but ALL < or <= comparisons to negative integers.


Kijk eens naar die waardes en check ook het type met var_dump().
<?php
$controle_ip_in_mandje = mysqli_query($connect_agenda,
"SELECT * FROM Mandje where IP='$ip_x'");
$row_x = mysqli_fetch_object($controle_ip_in_mandje);

if ($row_x['IP'] != $ip_x && $row_x['Port'] != $ses_id)

?>

Je haalt hier dus (alle) records op waarvoor de kolom IP een zekere waarde bevat. Die staat in $ip_x.
Uit die query komen 0 of meer rijen.

Alleen in het geval er minstens 1 gevonden is, heeft het zin om een fetchfunctie te gebruiken om rijen op te vragen.
Dat controleer jij niet. En ik schat in dat je nu géén rijen vond en daarom geeft fetch niets terug.

Daarna probeer je de niet-gevonden waarde te vergelijken met $ip_x.
Dat is op zich al raar: je hebt net gevraagd om alle rijen waarbij IP=$ip_x, dus wat kan het anders zijn?

Het zou nog wel zin kunnen hebben om met ses_id te vergelijken, al had dat ook in de query gekund.

Maar check voor de fetch functie even of er num_rows > 0 gevonden zijn

Reageren