Scripting update van 7.4 naar 8.0
- 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/
Kijk eens met print_r(...) naar je array.
Ad Fundum op 30/06/2022 14:08:44:
Ik zal er op gaan letten. Het is er min of meer ingeslopen na 21 jaar programmeren in PHP.
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.
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.
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.
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.
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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.
$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().
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?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)
?>
$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
Ivo P op 01/07/2022 12:23:23:
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
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?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)
?>
$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
Wil je me helpen om dit stukje code te verbeteren dan? Ik wil het leren en begrijpen en dat doe ik soms gewoon niet. Ben maar een amateur op dit gebied. En als ik hulp krijg bij de juiste manier van, dan neem ik dat mee in mijn ontwikkeling op dit gebied.
Ik weet soms echt niet wat en wanneer ik iets moet gebruiken en op welke manier omdat de kennis me ontbreekt. En daarom vraag ik hulp om het wel te leren begrijpen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$controle_ip_in_mandje = mysqli_query($connect_agenda,
"SELECT * FROM Mandje where IP='$ip_x'");
// we gaan verder als we _iets_ vonden:
if(mysqli_num_rows($controle_ip_in_mandje) > 0 ) {
$row_x = mysqli_fetch_assoc($controle_ip_in_mandje);
if ($row_x['IP'] != $ip_x && $row_x['Port'] != $ses_id) {
// hier gaan we nooit komen: immers $row['IP'] is altijd gelijk aan $ip_x
}
}
?>
$controle_ip_in_mandje = mysqli_query($connect_agenda,
"SELECT * FROM Mandje where IP='$ip_x'");
// we gaan verder als we _iets_ vonden:
if(mysqli_num_rows($controle_ip_in_mandje) > 0 ) {
$row_x = mysqli_fetch_assoc($controle_ip_in_mandje);
if ($row_x['IP'] != $ip_x && $row_x['Port'] != $ses_id) {
// hier gaan we nooit komen: immers $row['IP'] is altijd gelijk aan $ip_x
}
}
?>
Nanno Koerts op 01/07/2022 12:28:56:
Ik weet soms echt niet wat en wanneer ik iets moet gebruiken en op welke manier omdat de kennis me ontbreekt. En daarom vraag ik hulp om het wel te leren begrijpen.
Zelfinzicht is prima en de eerste stap naar verbetering! Hulp vragen mag altijd, maar als ik zo vrij mag zijn je te adviseren: koop een (basis)boek over PHP. Door het lezen van een boek leer je de basis, en als je jezelf verder wenst te ontwikkelen dan is dat een zeer zinvolle en waardevolle stap.
Ozzie PHP op 01/07/2022 12:59:26:
Zelfinzicht is prima en de eerste stap naar verbetering! Hulp vragen mag altijd, maar als ik zo vrij mag zijn je te adviseren: koop een (basis)boek over PHP. Door het lezen van een boek leer je de basis, en als je jezelf verder wenst te ontwikkelen dan is dat een zeer zinvolle en waardevolle stap.
Nanno Koerts op 01/07/2022 12:28:56:
Ik weet soms echt niet wat en wanneer ik iets moet gebruiken en op welke manier omdat de kennis me ontbreekt. En daarom vraag ik hulp om het wel te leren begrijpen.
Zelfinzicht is prima en de eerste stap naar verbetering! Hulp vragen mag altijd, maar als ik zo vrij mag zijn je te adviseren: koop een (basis)boek over PHP. Door het lezen van een boek leer je de basis, en als je jezelf verder wenst te ontwikkelen dan is dat een zeer zinvolle en waardevolle stap.
Ik heb al veel online opgestoken en daarmee code toegepast op mijn website. Ik gebruik enkel php code om dingen in en uit de database te halen. Daarnaast een stukje controle. Ik heb de website onder controle in php 7.4 en probeer over te gaan naar 8.0. Ook hier probeer ik via internet de oplossingen te vinden. En gellukig is daar ook de website php HULP. En hoop ik dus ook als amateur geholpen te worden om een minder grote amateur te zijn.
Het is net als met wiskunde, je moet dingen aannemen en begrijpen. Mijn hersenen snappen de logica soms niet wat ik moet gebruiken en waarom. Met kleine stapjes en voorbeelden kom ik wel een stap verder en uitleg waarom we doen wat we doen.
Juist daarom dus een boek aanschaffen waarin alles stapje voor stapje wordt uitgelegd ;-) Het is niet vreemd dat je dingen niet snapt of dat dingen niet (geheel) duidelijk zijn, als je nooit de basis hebt geleerd.
What's new in PHP 8:
https://stitcher.io/blog/new-in-php-8
What's new in PHP 8.1:
https://stitcher.io/blog/new-in-php-81
What's new in PHP 8.2:
https://stitcher.io/blog/new-in-php-82
Ik zou ze in deze volgorde lezen, want sommige wijzigingen zijn een logisch vervolg op eerdere updates.
De lijsten van nieuwe mogelijkheden zijn fantastisch lang!
De officiële lijsten lijken wat korter:
8.0: https://www.php.net/manual/en/migration80.new-features.php
8.1: https://www.php.net/manual/en/migration81.new-features.php
Je moet wel rekening houden dat nog niet alle documentatie is bijgewerkt.
Bijvoorbeeld als je begint met PHP denk je dat je commentaar in je code kunt gebruiken na een '#', omdat je de handleiding gelezen hebt. Maar in PHP 8 klopt dat niet meer helemaal, een deel van het commentaar wordt behandeld als code, volgens dit nieuwe stukje handleiding. Dat is niet erg als je het maar van te voren weet. Overigens is het concept om code in commentaar te stoppen niet nieuw; Doctrine doet dit ook, en je hebt ook nog DocBlocks waarmee je automatisch documentatie kan laten maken met een tool als phpDocumentor.