Php7 platform overgezet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 4 5 6 volgende »

Margot Schuitemaker

Margot Schuitemaker

13/07/2018 21:15:21
Quote Anchor link
13-7-2018

Beste phpHelpdeskers,

Ik ben klant van Mijndomein. Mijndomein heeft een aantal dagen geleden mijn website rspp.nl overgezet naar een nieuw platform php vs 7.1. Mijn phpscripts ondersteunen dat nog niet. Er is een mogelijkheid bij Mijndomein om het platform terug te zetten naar vs 5.6, wat ik ook heb gedaan. Begin 2019 komt PHP 5.6 te vervallen.
Wat ik nu niet begrijp is dat ik ineens die foutmelding(en) krijg ná het vernieuwen van het platform. Het script is sinds twee jaar niet gewijzigd en werkte uitstekend.
Sinds het nieuwe platform er is, stonden er drie fouten op mijn website die inmiddels zijn opgelost. Daarna kreeg stond er weer eentje welke ik niet kan oplossen.

•Notice: Undefined variable: weg in /home/public/sites/www.rspp.nl/library/puchfunctions.php on line 336

Het betreft een voorwaardelijke uitdrukking if ($weg == 0)
Is hier een andere vergelijking voor in php5.6?

Misschien dat u mij hierbij verder kan helpen? Alvast hartelijk bedankt.

Met vriendelijke groet,

Margot Schuitemaker
 
PHP hulp

PHP hulp

29/03/2024 11:29:57
 
Ivo P

Ivo P

13/07/2018 22:06:14
Quote Anchor link
Je variabele $weg bestaat dus (soms) niet.
Vraag je eerst af waarom dat voor kan komen.

Je kunt het oplossen met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if(!isset($weg) || $weg == 0) ?>


Maar vraag je toch af, hoe $weg niet kan bestaan. Waar zou die vandaan moeten komen?
 
Rob Doemaarwat

Rob Doemaarwat

13/07/2018 22:29:07
Quote Anchor link
Zoals Ivo al duidelijk probeert te maken: er zit een fout in je code. Voorheen zag je die niet, omdat PHP daar "niet moeilijk over deed" (on the fly gewoon een variabele aanmaakte). Waarschijnlijk staat het "error reporting" niveau in de nieuwe omgeving "strakker", waardoor het probleem nu wel gemeld wordt.

Je kunt de oude situatie "herstellen" door de "Notice" meldingen nog steeds niet te tonen. Dit kan door onderstaand stukje code boven in je script op te nemen (hiermee sluit je de notices van het rapporteren):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
error_reporting(error_reporting() & ~E_NOTICE);

Maar nogmaals: dit is geen echte oplossing (gewoon je ogen dicht doen zodat je het probleem niet meer ziet). De echte oplossing is uitzoeken waarom die $weg (soms) niet bestaat, en het dan fixen. Ik vermoed dat er zoiets gebeurt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
if($_POST){
  //doe iets
  $weg = 5; //of zoiets
}

//meer code

if ($weg == 0){
  //enz
}

Als er nu geen $_POST is, dan wordt $weg nooit ingesteld, en krijg je de Notice (en als er wel een $_POST is -> geen melding).

Dit is dan eenvoudig op te lossen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
$weg = 0; //initialiseer $weg

if($_POST){
  //doe iets
  $weg = 5; //of ziets
}

//enz
Gewijzigd op 13/07/2018 22:31:21 door Rob Doemaarwat
 
Margot Schuitemaker

Margot Schuitemaker

13/07/2018 22:36:25
Quote Anchor link
Hallo Ivo,

In 2008 is de webshop door mijn (coach)collega en mij. Telkens wanneer er een migratie is bij mijndomein moet ik mij erin verdiepen, daar de coach uit zicht is. Het lukt mij telkens wel om de website online te houden, ik zou mij moeten verdiepen in jouw vraag.
Bedankt voor je snelle reactie. Ik las er net over in het digitale phpboek en was aan het expirimenteren hoe:)
Het werkt! Ik zal bij een andere pagina nog twee fouten:

Notice: Undefined variable: aantalitems in /home/public/sites/www.rspp.nl/library/puchfunctions.php on line 94
list($$aantalitems) = $row;

Notice: Undefined variable: aantalitems in /home/public/sites/www.rspp.nl/library/puchfunctions.php on line 95
return $aantalitems;

Misschien zou je mij nog eens willen helpen?
 
- Ariën  -
Beheerder

- Ariën -

13/07/2018 22:42:41
Quote Anchor link
Wat staat er rond die lijn 94?
 
Margot Schuitemaker

Margot Schuitemaker

13/07/2018 22:46:40
Quote Anchor link
Dank je wel! Ik ga ermee aan de slag.

Hartelijke groet, Margot

Toevoeging op 13/07/2018 22:53:44:

function itemsperpagina($categorie) {
//deze functie berekent het aantal items per pagina, of eigenlijk per categorie
//invoer: $categorie, een string met de waarden 'frame', 'wiel', of 'motor'
//uitvoer: het aantal items
$query="select count(art_id) as aantal from artikel where cat_naam='".$categorie."'";
$result = mysql_query($query) or die($query.' Error, query failed. ' . mysql_error());
$row = mysql_fetch_array($result);

line 94: list($$aantalitems) = $row;

line 95: return $aantalitems;
}
 
- Ariën  -
Beheerder

- Ariën -

13/07/2018 22:55:24
Quote Anchor link
In PHP7 werken de mysql_***() functies ook niet meer. Ikzelf raad MySQLi aan als functiebibliotheek.

Omdat $row geen array bevat omdat de functie erin niet meer bestaat, zal je met list() in deze situatie niet de gewenste uitvoer krijgen.
Gewijzigd op 13/07/2018 22:57:52 door - Ariën -
 
Margot Schuitemaker

Margot Schuitemaker

13/07/2018 23:05:57
Quote Anchor link
Is er niet een tijdelijke oplossing voor?

Voor het 'mooie' heb ik tijdelijk onderstaand statement van jou bovenin de pagina gezet error_reporting(error_reporting() & ~E_NOTICE);

Ga dat verder uitzoeken.

Moet ik alle scripts wijzigen in mysqli betreffende php7? Ik ga voor info ook naar w3schools en http://www.phpboek.net. Wat zou ik moeten doen om mijn webshop/site in php7 werkbaar te maken? Is er een goede website voor php7 info of is er een goed leesbaar boek in omloop. Misschien dat jij/jullie dat weten?

Enorm bedankt, Margot
 
- Ariën  -
Beheerder

- Ariën -

13/07/2018 23:14:24
Quote Anchor link
Alle wijzigingen tussen de PHP-versies kan je hier vinden:

PHP 5.4-> 5.5
http://php.net/manual/en/migration55.php


PHP 5.5-> 5.6
http://php.net/manual/en/migration56.php


PHP 5.6-> 7.0
http://php.net/manual/en/migration70.php

PHP 7.0-> 7.1
http://php.net/manual/en/migration71.php

PHP 7.1-> 7.2
http://php.net/manual/en/migration72.php

Maar je zult voor PHP 7 écht de oude mysql_***() functies uit je code moeten ombouwen naar MySQLi-functies (aanrader!) of PDO.
 
Rob Doemaarwat

Rob Doemaarwat

13/07/2018 23:18:00
Quote Anchor link
Ik zie nu al 3x $$aantalitems staan (met twee dollar tekens), dus ik vermoed dat het langzamerhand geen typefout meer is. Wat je hier doet is een variabele "aanroepen" met de naam $aantalitems. En die is inderdaad nog niet bekend. Als je er gewoon een enkel dollar teken van maakt werkt het volgens mij weer (maar dit zou in het verleden ook nooit hebben kunnen werken - alleen zag je de foutmelding niet). Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
list($aantalitems) = $row;


(o, keek net op de site; heb zelf een MV50 gehad - dat was even een trip down memory lane, vooral qua dagenlang sleutelwerk, en alles wat er stuk kon gaan aan dat ding ...).
 
Thomas van den Heuvel

Thomas van den Heuvel

14/07/2018 01:11:45
Quote Anchor link
Quote:
Het script is sinds twee jaar niet gewijzigd en werkte uitstekend.

Quote:
In 2008 is de webshop door mijn (coach)collega en mij.

Ook software is aan slijtage onderhevig. Een gezonde taal verandert over tijd. Oude dingen gaan eruit en er komen andere/betere onderdelen voor in de plaats. Je hebt dus een (homegrown?) webshop die ergens in 2008 is ontstaan/geschreven en daarna bij tijd en wijlen is bijgespijkerd? Misschien wordt het dan eens tijd om alle code op de schop te gooien, want als ik dit soort dingen zie:
Quote:
$query="select count(art_id) as aantal from artikel where cat_naam='".$categorie."'";
$result = mysql_query($query) or die($query.' Error, query failed. ' . mysql_error());
$row = mysql_fetch_array($result);

Stemt mij dat niet erg gerust.

Security is tegenwoordig een ding (en is het altijd wel geweest eigenlijk). Ik weet niet in hoeverre de website/webshop onderdeel uitmaakt van de bedrijfsvoering (kun je via deze site ook echt dingen kopen? en zonee, wellicht het overwegen waard met een betaalkoppeling?), maar het lijkt mij zaak dat dit soort dingen goed geregeld zijn. Ook is er tegenwoordig zoiets als de Algemene Verordening Gegevensbescherming (AVG), dit houdt o.a. in dat wanneer iemand iets via een site m.b.t. persoonsgegevens regelt dit aan bepaalde spelregels is onderworpen. Tegenwoordig zou ik bij een webshop op zijn minst een beveiligde site (verbinding via https) verwachten.
 
Ben van Velzen

Ben van Velzen

14/07/2018 02:52:38
Quote Anchor link
+1. En zeker sinds er een meldplicht is voor datalekken die je had (moeten) weten ben je met dit soort constructies heel erg de sjaak.

Dit soort code schreeuwt bij mij om een audit. Heb je hier ooit een externe partij op los gelaten? Er zijn er genoeg die gewoon met een bot je site doornemen en dit soort lekken heel eenvoudig boven water krijgen. Zeker als de code deel is van je bedrijfsvoering is het vandaag de dag een must. Relatief gezien is het niet duur, zeker niet als je bedenkt hoe duur claims kunnen worden.
 
Margot Schuitemaker

Margot Schuitemaker

15/07/2018 23:00:13
Quote Anchor link
Hartelijk bedankt voor jullie informatie.

Groet, Margot
 
- Ariën  -
Beheerder

- Ariën -

15/07/2018 23:12:28
Quote Anchor link
Ik raad aan om eerst maar even SSL aan te zetten. het hoeft bij je provider vast niet lastig te zijn als ze Let's Encrypt gebruiken.
 
Margot Schuitemaker

Margot Schuitemaker

16/07/2018 22:24:42
Quote Anchor link
Hoi Ariën, bij mijndomein heb je een ssl-instellingenknop welke ik heb 'aangezet'. Op dit moment wordt mijn aanvraag verwerkt.
 
- Ariën  -
Beheerder

- Ariën -

16/07/2018 22:30:46
Quote Anchor link
https://www.rspp.nl/ werkt inderdaad.

Je moet er nu alleen nog met .htaccess voor zorgen dat je alles van http doorsluist naar https.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
# Stuur alle onveilige http-verzoeken door naar https...
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Gewijzigd op 16/07/2018 22:35:12 door - Ariën -
 
Margot Schuitemaker

Margot Schuitemaker

16/07/2018 22:56:53
Quote Anchor link
Ik heb je code in .htaccess gezet en kreeg onderstaande melding:

De pagina verwijst niet op een juiste manier door
Fout tijdens het verbinden met rspp.nl.
Dit probleem kan soms worden veroorzaakt door het uitschakelen of weigeren van cookies.

Ik heb het weer teruggezet.

Ik vind het echt geweldig van je om telkens direct te reageren.



Toevoeging op 16/07/2018 23:01:45:

De ssl-aanvraag is nog aan het verwerken in mijndomein. Wanneer gereed, krijg ik misschien een optie(s) van doorverwijzen oid
 
- Ariën  -
Beheerder

- Ariën -

16/07/2018 23:13:52
Quote Anchor link
Gebruik je subdomeinen of iets dergelijks? Want ik heb geen problemen met deze vorm van redirect. Maar misschien wordt er uiteindelijk wel HSTS gebruikt, en dan zou het automatisch kunnen gaan.
Gewijzigd op 16/07/2018 23:15:03 door - Ariën -
 
Margot Schuitemaker

Margot Schuitemaker

17/07/2018 21:37:55
Quote Anchor link
Nee, heb geen subdomeinen.

Hieronder staat wat mijndomein op hun site hebben staan ivm ssl:
SL Doorverwijzen

Zodra het certificaat actief is kan je de bezoekers van je website doorverwijzen naar de HTTPS versie van je website. Hiervoor krijg je de volgende opties te zien:

Zowel http als https
Met deze optie is je website via zowel HTTP:// als HTTPS:// bereikbaar. Het is aan de bezoeker welke versie er gebruikt wordt. Je website kan de bezoeker desgewenst alsnog doorsturen naar HTTPS

Stuur http door naar https
Met deze optie wordt de bezoeker door onze servers naar de HTTPS versie van je website gestuurd. Er wordt geen HSTS toegepast, dit kan je desgewenst zelf instellen.
 
- Ariën  -
Beheerder

- Ariën -

17/07/2018 22:01:26
Quote Anchor link
'Stuur http door naar https' is de beste oplossing. Dan wordt alles doorgestuurd naar https, en hoef je zelf geen extra aanpassingen te doen.
 
Rob Doemaarwat

Rob Doemaarwat

18/07/2018 14:14:32
Quote Anchor link
Voor wat betreft de mysqli_* functies kun je ook de "quick & dirty" methode hanteren:
- plaats dit https://raw.githubusercontent.com/dshafik/php7-mysql-shim/master/lib/mysql.php bestand bij je PHP bestanden.
- include het voordat je een mysql_connect() doet.
- klaar, alles werkt weer onder PHP 7!

Overpeinzingen:
- het is niet de meest "professionele", en meeste efficiënte oplossing (alle calls moeten via deze "shim" = extra code+tijd).
- de problemen met SQL-injectie blijven gewoon bestaan.
- je bent wel heel snel klaar (ik heb op deze manier probleemloos bakken aan legacy code "mee" gekregen naar PHP 7; moet allemaal nog een keer uitgefaseerd worden, maar "nu even niet").
 

Pagina: 1 2 3 4 5 6 volgende »



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.