migratie mijndomein.nl naar php 5.6
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
Let erop dat je niet je gegevens hier op het forum plaatst.
Ik vermoed dat je deze query in een function staat (aan je bestandsnaam te zien)?
Waarschijnlijk heb je buiten deze function je MySQLi connectie gestart en zal je deze connectie mee moeten geven als parameter aan de functie.
Bedankt voor jullie snelle reactie.
Op alle pagina's staan drie include bestanden
* config.php (= verbinding dbhost,dbuser,dbnaam)
* puchfunctions.php (staat bv in: euro's maken, waarschuwingen windows alert, is je winkelwagen vol, verschillende arrsy's met categorien frame, motor en wiel, berekeningen prijzen, aantal items enz.
* opendb.php met con-gegevens.
In puchfunctions.php staan geen verbindingopties.
Misschien kunnen jullie hier wat mee?
Dag, Margot
Hoe ziet je config.php en opendb.php er uit?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
// This is an example of config.php
$dbhost='ip';
$dbuser='inlog';
$dbpass='paswoord';
$dbname='naam';
?>
// This is an example of config.php
$dbhost='ip';
$dbuser='inlog';
$dbpass='paswoord';
$dbname='naam';
?>
Sinds 2009 heb ik een goed werkende website.
Je mist de 4e parameter voor je database in mysqli_connect.
http://php.net/manual/en/mysqli.select-db.php moeten gebruiken.
Toevoeging op 02/02/2016 12:29:54:
maar aangezien de foutmelding zegt dat $con niet bekend is, zul je een scope probleem hebben.
Ofwel maak je $con aan in een functie
en is hij daarbuiten dus niet bekend.
ofwel wil je binnen een function $con gebruiken terwijl hij daar onbekend is.
of beide...
de 4e parameter is niet verplicht, maar je zult dan wel Toevoeging op 02/02/2016 12:29:54:
maar aangezien de foutmelding zegt dat $con niet bekend is, zul je een scope probleem hebben.
Ofwel maak je $con aan in een functie
en is hij daarbuiten dus niet bekend.
ofwel wil je binnen een function $con gebruiken terwijl hij daar onbekend is.
of beide...
Met onderstaand statement begin ik ieder pagina:
$con = mysqli_connect($dbhost,$dbuser,$dbpass);
if (!$con)
{
die('Could not connect: ' . mysqli_connect_error());
}
mysqli_select_db($con,$dbname);
Je schrijft: Ofwel maak je $con aan in een functie?
Ik weet niet wat foo betekent, behalve dat het een functie is. Een groter bereik? Moet ik deze voorwaarde(n) in het bestand opendb.php zetten?
Je schrijft: ofwel wil je binnen een function $con gebruiken terwijl hij daar onbekend is? Ik begrijp ook niet wat de functie bar doet.
Waar zet ik onderstaande voorwaarde neer of beiden?
include ..... enz.
en boven onderstaande voorwaarde
$con = mysqli_connect($dbhost,$dbuser,$dbpass);
if (!$con)
{
die('Could not connect: ' . mysqli_connect_error());
}
mysqli_select_db($con,$dbname);
moet zetten?
"Foo" en "Bar" zijn enkel 'voorbeeldnamen' die je uitsluitend in voorbeelden gebruikt. Uiteindelijk geef je zelf een zinnige naam.
Als je een normaal script zonder functies hebt, en je introduceert een variabele, is deze vanaf dat punt bekend:
Het gebied waarin $test bekend is is vanaf het punt van zijn introductie.
Gebruik je echter ook functies:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$test = 41;
// vanaf dit punt is $test bekend
functie whatever() {
// maar hier is $test niet bekend!
}
// hier is $test (nog steeds) bekend
?>
$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:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$test = 41;
function whatever() {
// $test is niet bekend binnen de functie
global $test;
// nu kun je $test gebruiken binnen de functie
}
?>
$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.
Betreffende functies begrijp ik, maar ga ik ze neerzetten.
Ik ga jullie antwoorden goed bestuderen/begrijpen en dan verder met knutselen :)
Dag, Margot
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