Scripting update van 7.4 naar 8.0

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Nanno Koerts

Nanno Koerts

30/06/2022 19:16:30
Quote Anchor link
- 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/
 
PHP hulp

PHP hulp

16/04/2024 10:26:00
 
- Ariën  -
Beheerder

- Ariën -

30/06/2022 19:20:34
Quote Anchor link
Blijkbaar is de variable leeg. Maar dit heeft niks met de vergelijkingsoperator te maken.

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

Ozzie PHP

30/06/2022 19:52:29
Quote Anchor link
Ad Fundum op 30/06/2022 14:08:44:
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 :-)
 
Ad Fundum

Ad Fundum

01/07/2022 09:18:03
Quote Anchor link
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!" :-)
 
Ozzie PHP

Ozzie PHP

01/07/2022 10:03:55
Quote Anchor link
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 :-)
 
Nanno Koerts

Nanno Koerts

01/07/2022 11:12:52
Quote Anchor link
- 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.
 
- Ariën  -
Beheerder

- Ariën -

01/07/2022 11:19:32
Quote Anchor link
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.
 
Nanno Koerts

Nanno Koerts

01/07/2022 11:43:23
Quote Anchor link
- 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:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
 
- Ariën  -
Beheerder

- Ariën -

01/07/2022 11:56:28
Quote Anchor link
Kijk eens naar die waardes en check ook het type met var_dump().
 
Ivo P

Ivo P

01/07/2022 12:23:23
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)

?>


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
 
Nanno Koerts

Nanno Koerts

01/07/2022 12:28:56
Quote Anchor link
Ivo P op 01/07/2022 12:23:23:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)

?>


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.
 
Ivo P

Ivo P

01/07/2022 12:40:39
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
    }
}


?>
 
Ozzie PHP

Ozzie PHP

01/07/2022 12:59:26
Quote Anchor link
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.
 
Nanno Koerts

Nanno Koerts

01/07/2022 15:46:47
Quote Anchor link
Ozzie PHP op 01/07/2022 12:59:26:
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.
 
Ozzie PHP

Ozzie PHP

01/07/2022 16:45:14
Quote Anchor link
>> 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.
 
Ward van der Put
Moderator

Ward van der Put

01/07/2022 18:21:25
Quote Anchor link
De volgende blogposts zijn handig voor wie de overstap nog wil/moet maken. Wat mij er vooral in aanspreekt, is dat ze in korte maar kernachtige codevoorbeelden exact laten zijn wat er verandert.

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.
 
Ad Fundum

Ad Fundum

01/07/2022 22:38:51
Quote Anchor link
Dank Ward, voor die lijsten.
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.
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.