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
Je variabele $weg bestaat dus (soms) niet.
Vraag je eerst af waarom dat voor kan komen.

Je kunt het oplossen met
<?php if(!isset($weg) || $weg == 0) ?>

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

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):
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:

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:

$weg = 0; //initialiseer $weg

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

//enz
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?
Wat staat er rond die lijn 94?
Dank je wel! Ik ga ermee aan de slag.

Hartelijke groet, Margot

[size=xsmall]Toevoeging op 13/07/2018 22:53:44:[/size]

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;
}
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.
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



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.
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:
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 ...).
Het script is sinds twee jaar niet gewijzigd en werkte uitstekend.

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:
$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.

Reageren