Geacht forum,

Ik zit met een vreemd probleem op mijn website rspp.nl, nl deze:

i.v.m. met de migratie (half februari 2016) heb ik al mijn paginascripts doorgelopen en deze gewijzigd in mysli procedureel. Deze werken naar behoren.

Op iedere pagina wordt puchfunctions.php geinclude.
Nu heb ik dit script ook gewijzigd naar mysqli en krijg steeds een foutmelding.

++++++++++++++++++++++++++
Notice: Undefined variable: con in /public/sites/www.rspp.nl/library/puchfunctions.php on line 342

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /public/sites/www.rspp.nl/library/puchfunctions.php on line 342
Error, query failed.
++++++++++++++++++++++++++

Inhoud statement:

$query="insert into Pagehits(SessionID,Datum,Tijd,pagina) values('".$sessie."','".$datum."','".$tijd."','".$pathinfo."')";
// This shows the actual query sent to MySQL, and the error. Useful for debugging.

// APRIL 2015 IVM MIGRATIE PHP 5.4 - @ GEPLAATST = ONDERDRUKT FOUTMELDING
if (@$weg ==0) {
$result=mysqli_query($con,$query) or die('Error, query failed. ' . mysqli_connect_error());
}
}

+++++++++++++++++++++++++++

Dus heb ik het oude script puchfunctions.php mysql weer teruggezet en alles werkt weer naar behoren.

Maar nu weet ik niet of dit na de migratie ook nog zo is, maar dan ik dat dan wel weer.

Ik ben al een week bezig met zoeken en knutselen, maar helaas tevergeefs.

Hopelijk weet iemand een oplossing voor mij?

Hartelijke groet, Margot Schuitemaker
>> Begrijp ik het goed dat ik beide functies foo en bar in de header onder ...

"Foo" en "Bar" zijn enkel 'voorbeeldnamen' die je uitsluitend in voorbeelden gebruikt. Uiteindelijk geef je zelf een zinnige naam.
@Margot Ivo had het eerder over "scope", dit wil zeggen "het gebied waarbinnen variabelen bekend zijn".

Als je een normaal script zonder functies hebt, en je introduceert een variabele, is deze vanaf dat punt bekend:
<?php
$test = 41;
// vanaf dit punt is $test bekend
?>

Het gebied waarin $test bekend is is vanaf het punt van zijn introductie.

Gebruik je echter ook functies:
<?php
$test = 41;
// vanaf dit punt is $test bekend

functie whatever() {
    // maar hier is $test niet bekend!
}

// hier is $test (nog steeds) bekend
?>


Dan is binnen die functie $test niet bekend, want functies hebben hun eigen "geldigheidsgebied voor variabelen" (eigen scope).

Er zijn een aantal manieren om (de waarden van) variabelen door te geven aan een functie. Een van die manieren is door middel van een functie-argument. Je moet wel onderscheid maken tussen de declaratie van een functie en de aanroep.

Er is ook een simpelere manier die mogelijk voor nu volstaat, maar ik zou het gebruik hiervan vermijden als het kan: om de variabele $con beschikbaar te maken binnen een functie kun je ook het global keyword gebruiken:
<?php
$test = 41;

function whatever() {
    // $test is niet bekend binnen de functie
    global $test;
    // nu kun je $test gebruiken binnen de functie
}
?>

Dit heeft wel wat implicaties, namelijk dat $test (of in jouw geval $con) al bekend is in de bovengelegen scope en dat deze een (vaste) voorgeschreven betekenis heeft.

Ook kun je je afvragen of het gebruik van een functie in dat geval is geoorloofd: roep je de functie meerdere keren aan, met andere woorden, wordt deze (vaak) hergebruikt? Zo ja, dan heeft deze functie een zekere bestaansrecht. Maar als je deze slechts één keer aanroept dan kun je de bijbehorende code net zo goed uitschrijven, omdat het vatten in een functie hiervan dan waarschijnlijk geen meerwaarde heeft.
Super bedankt!

Betreffende functies begrijp ik, maar ga ik ze neerzetten.

Ik ga jullie antwoorden goed bestuderen/begrijpen en dan verder met knutselen :)

Dag, Margot
Ter info.

Beste Ariën, Gerhard, Ivo, Elmar, Ozzie en Thomas,

Het is mij gelukt, mede dankzij jullie om mijn functiebestand werkend te krijgen.
In eerste instantie heb ik van alles geprobeerd om functies en/of variabelen aan te maken, maar tevergeefs.

Wat ik heb gedaan is een include '.../opendb.php'; boven onderstaand diverse onderstaande statement te zetten:

"$query="select browser from Sessions where SessionID='".$sess."'";
include '.../opendb.php';
$result = mysqli_query($con,$query) or die($query.' Error, query failed. ' . mysqli_connect_error());
$row = mysqli_fetch_array($result);

Dag, Margot

Reageren