Bekijk Volledige Versie : include voor DB connectie [php]
Matthijs de Z
21/12/05, 22:00
Hallo,
ik heb in een bestand dblogin.inc
de volgende code staan:
<?php
//puur ter controle
echo"<br><b>INCLUDE</b><br>";
//de functie waar het om gaat
function dbLoginFunction()
{
//database openen en gegevens invoeren
$dbname = "deDataBase";
$loginname = "boterhammetkaas";
$loginpass = "hoiHoeIsHet";
$dbhost ="localhost";
$dbcon = mysql_connect("$dbhost","$loginname","$loginpass") or die("er
gaat iets mis<br>".mysql_error());
// puur ter controle
if($dbcon) echo"<br>verbonden<br>";
if (is_resource($dbcon)) echo"<br>Is idd een resource<br>";
};
?>
En in een bestand (datainvoer.php) waar ik die functie in wil gebruiken,
staat dit:
//bestand staat in dezelfde dir
include('dblogin.inc');
dbLoginFunction();
if(!is_resource($dbcon)) echo"<br><b>help</b><br>";
en dit is de output:
------------------
INCLUDE
verbonden
Is idd een resource
help
-------------------
het bestand wordt dus geïnclude, binnen het bestand dblogin.inc wordt ook
een verbinding gemaakt, maar als ik dan later binnen de code van het andere
bestand (datainvoer.php) is er blijkbaar geen verbinding meer, aangezien
daar "help" komt te staan (if(!is_resource($dbcon))
echo"<br><b>help</b><br>";)
waarrrrrrommmmm?
Groeten,
Matthijs
Arnoud Galactus Engelfriet
21/12/05, 22:15
In article <docfcn$1ne6$1@nl-news.euro.net>,
Matthijs de Z <haalallesvoorhetstreepjesplushetstreepjezelfweg-mldz@hotmail.com> wrote:
>het bestand wordt dus geïnclude, binnen het bestand dblogin.inc wordt ook
>een verbinding gemaakt, maar als ik dan later binnen de code van het andere
>bestand (datainvoer.php) is er blijkbaar geen verbinding meer, aangezien
>daar "help" komt te staan (if(!is_resource($dbcon))
>echo"<br><b>help</b><br>";)
De variabele $dbcon bestaat alleen in de scope van de functie
dbLoginFunction(). Zodra die functie klaar is, gooit PHP de inhoud
van $dbcon weg. Bij je if !is_resource kijk je dus naar een hele
andere variabele die toevallig ook $dbcon heet.
Oftewel, je moet $dbcon als resultaat van doLoginFunct() terug
laten komen. In het hoofdprogramma lees je die waarde dan uit
en doe je er leuke dingen mee.
Arnoud
--
Arnoud Engelfriet, Dutch & European patent attorney - Speaking only for myself
Patents, copyright and IPR explained for techies: http://www.iusmentis.com/
Matthijs de Z
21/12/05, 22:30
> De variabele $dbcon bestaat alleen in de scope van de functie
> dbLoginFunction(). Zodra die functie klaar is, gooit PHP de inhoud
> van $dbcon weg. Bij je if !is_resource kijk je dus naar een hele
> andere variabele die toevallig ook $dbcon heet.
>
> Oftewel, je moet $dbcon als resultaat van doLoginFunct() terug
> laten komen. In het hoofdprogramma lees je die waarde dan uit
> en doe je er leuke dingen mee.
Als ik er dit van maak:
function dbLoginFunction()
{
//database openen en gegevens invoeren
$dbname = "deDataBase";
$loginname = "boterhammetkaas";
$loginpass = "hoiHoeIsHet";
$dbhost ="localhost";
$dbcon = mysql_connect("$dbhost","$loginname","$loginpass") or die("er
gaat iets mis<br>".mysql_error());
return $dbcon;
// puur ter controle
if($dbcon) echo"<br>verbonden<br>";
if (is_resource($dbcon)) echo"<br>Is idd een resource<br>";
};
Krijg ik nog steeds geen bestaande DB connectie. Hoe zou jij het "terug
laten komen"? Want ik dacht dat je met return een waarde kon teruggeven
vanuit een functie.
Groeten,
Matthijs
>
> Arnoud
>
> --
> Arnoud Engelfriet, Dutch & European patent attorney - Speaking only for
myself
> Patents, copyright and IPR explained for techies:
http://www.iusmentis.com/
Matthijs de Z
21/12/05, 22:45
> Als ik er dit van maak:
[binnen de functie]
> return $dbcon;
werkte niet
global $dbcon;
werkt volgens mij wel. Maar dan moet ik ook de andere variabelen global
maken. Is het ook mogelijk om alle variabalen van een functie die in een
include bestand staat in 1 keer global te maken?
Groeten,
Matthijs
Matthijs de Z
21/12/05, 22:45
> global $dbcon;
>
> werkt volgens mij wel. Maar dan moet ik ook de andere variabelen global
> maken. Is het ook mogelijk om alle variabalen van een functie die in een
> include bestand staat in 1 keer global te maken?
behalve dan een regel te maken met
global $dbcon, $tweedevar, $derdevar.....
Jelle Nelis
21/12/05, 22:45
Matthijs de Z wrote:
>> De variabele $dbcon bestaat alleen in de scope van de functie
>> dbLoginFunction(). Zodra die functie klaar is, gooit PHP de inhoud
>> van $dbcon weg. Bij je if !is_resource kijk je dus naar een hele
>> andere variabele die toevallig ook $dbcon heet.
>>
>> Oftewel, je moet $dbcon als resultaat van doLoginFunct() terug
>> laten komen. In het hoofdprogramma lees je die waarde dan uit
>> en doe je er leuke dingen mee.
>
> Als ik er dit van maak:
>
> function dbLoginFunction()
> {
> //database openen en gegevens invoeren
> $dbname = "deDataBase";
> $loginname = "boterhammetkaas";
> $loginpass = "hoiHoeIsHet";
> $dbhost ="localhost";
>
> $dbcon = mysql_connect("$dbhost","$loginname","$loginpass") or die("er
> gaat iets mis<br>".mysql_error());
>
> return $dbcon;
>
> // puur ter controle
> if($dbcon) echo"<br>verbonden<br>";
> if (is_resource($dbcon)) echo"<br>Is idd een resource<br>";
> };
>
> Krijg ik nog steeds geen bestaande DB connectie. Hoe zou jij het "terug
> laten komen"? Want ik dacht dat je met return een waarde kon teruggeven
> vanuit een functie.
> Groeten,
>
> Matthijs
>
>
>> Arnoud
>>
>> --
>> Arnoud Engelfriet, Dutch & European patent attorney - Speaking only for
> myself
>> Patents, copyright and IPR explained for techies:
> http://www.iusmentis.com/
>
>
In het bestand dat de functie gebruikt (in jouw geval datainvoer.php):
$dbcon = dbLoginFunction();
--
Zelfstandig Euphony consultant
BC-ID 018122257
Matthijs de Z
21/12/05, 22:45
> In het bestand dat de functie gebruikt (in jouw geval datainvoer.php):
> $dbcon = dbLoginFunction();
AH, zo simpel kan het dus ook zijn ;-)
"Matthijs de Z"
<haalallesvoorhetstreepjesplushetstreepjezelfweg-mldz@hotmail.com> schreef
in bericht news:doci2f$1qiv$1@nl-news.euro.net...
>> In het bestand dat de functie gebruikt (in jouw geval datainvoer.php):
>> $dbcon = dbLoginFunction();
>
> AH, zo simpel kan het dus ook zijn ;-)
>
>
Ik zou overigens geen .inc voor je database connectie file gebruiken maar
..php. Een inc file kan iemand lezen namelijk dus als iemand je site 'slurpt'
(met bijv. webgrabber) dan kan ik die daarna zo de connectie met je database
lezen....
Arnoud Galactus Engelfriet
22/12/05, 09:45
In article <b1573$43aa725f$d969db07$11727@cache40.multikabel.n et>,
Marcel <sorryafraidofspam@nospam.com> wrote:
>Ik zou overigens geen .inc voor je database connectie file gebruiken maar
>.php. Een inc file kan iemand lezen namelijk dus als iemand je site 'slurpt'
>(met bijv. webgrabber) dan kan ik die daarna zo de connectie met je database
>lezen....
Allereerst moet die iemand dan wel weten hoe je .inc heet,
maar "login.inc" of zo zou een goeie gok zijn.
Verder, stel dat PHP zelf stukgaat of per ongeluk uitgezet wordt
door de admin. Dan kan iedereen je .php bestanden downloaden als
gewone tekst. Daar moeten dus geen wachtwoorden instaan!
Persoonlijk zou ik zo'n include file altijd buiten de public_html
houden. Je PHP script kan elk bestand openen, maar de webserver
zal het bestand dan nooit opsturen.
require("/home/galactus/etc/login.inc");
Knappe jongen die die op weet te vragen via mijn webserver.
Arnoud
--
Arnoud Engelfriet, Dutch & European patent attorney - Speaking only for myself
Patents, copyright and IPR explained for techies: http://www.iusmentis.com/
Erick T. Barkhuis
22/12/05, 09:45
Marcel:
> Ik zou overigens geen .inc voor je database connectie file gebruiken maar
> .php. Een inc file kan iemand lezen namelijk dus als iemand je site 'slurpt'
> (met bijv. webgrabber) dan kan ik die daarna zo de connectie met je database
> lezen....
Zulke progsels halen toch alleen de bestanden op die ze tegenkomen via
koppelingen (als hyperlinks, frames en images)?
Hoe moet webgrabber weten dat er ergens een bestand MijnDB.inc staat in
een willekeurige directory?
--
Erick
"Editing is a rewording activity"
In article <dodomn$2q81$1@toad.stack.nl>,
galactus@stack.nl (Arnoud "Galactus" Engelfriet) writes:
[...]
> Persoonlijk zou ik zo'n include file altijd buiten de public_html
> houden. Je PHP script kan elk bestand openen, maar de webserver
> zal het bestand dan nooit opsturen.
> require("/home/galactus/etc/login.inc");
> Knappe jongen die die op weet te vragen via mijn webserver.
Vanuit /home/andere-local-user
zou het best wel eens te doen kunnen zijn...
Een goede rede om de webserver samen met de webmasters in een
jale te zetten.
Matthijs de Z
22/12/05, 10:45
> >Ik zou overigens geen .inc voor je database connectie file gebruiken maar
> >.php. Een inc file kan iemand lezen namelijk dus als iemand je site
'slurpt'
> >(met bijv. webgrabber) dan kan ik die daarna zo de connectie met je
database
> >lezen....
daar heb je gelijk in. Bedankt voor de tip
> Persoonlijk zou ik zo'n include file altijd buiten de public_html
> houden. Je PHP script kan elk bestand openen, maar de webserver
> zal het bestand dan nooit opsturen.
> require("/home/galactus/etc/login.inc");
Helaas staat de host dat om één of andere vage reden niet toe....
Maar ik verzin wel iets. Kan altijd nog een chmod 0000 doen en als ik het
bestand nodig heb weer terugzetten naar een leesbaar bestand.
Mazzel,
Matthijs
finalwebsites.com
22/12/05, 11:00
Matthijs, je kan ook gebruik maken can constant variabels:
http://nl3.php.net/Constants
--
gr. Olaf
PHP classes and scripts: http://www.finalwebsites.com
On 22 Dec 2005 09:29:57 GMT, Operator <root@mier.doktercom.nl> wrote:
> In article <dodomn$2q81$1@toad.stack.nl>,
> galactus@stack.nl (Arnoud "Galactus" Engelfriet) writes:
>
> [...]
>> Persoonlijk zou ik zo'n include file altijd buiten de public_html
>> houden. Je PHP script kan elk bestand openen, maar de webserver
>> zal het bestand dan nooit opsturen.
>> require("/home/galactus/etc/login.inc");
>> Knappe jongen die die op weet te vragen via mijn webserver.
>
> Vanuit /home/andere-local-user
> zou het best wel eens te doen kunnen zijn...
>
> Een goede rede om de webserver samen met de webmasters in een
> jale te zetten.
Op zich hadden ze daar safe_mode en open_basedir voor. Gelukkig
gaan ze safe_mode nu echt opdoeken want ik kan me minimaal 3 versies
voor de geest halen waarbij je een symbolic link kon aanmaken voor
bovenstaande gevallen en je dan alsnog het bestand kon uitlezen.
Hans
--
<iemand>
iemand heeft een gat gevonden in pdp's access.db? bel cnn
http://blacklist.kernelnewbies.nl
> Zulke progsels halen toch alleen de bestanden op die ze tegenkomen via
> koppelingen (als hyperlinks, frames en images)?
> Hoe moet webgrabber weten dat er ergens een bestand MijnDB.inc staat in
> een willekeurige directory?
> --
Ja inderdaad daar heb je gelijk in. Nou ja, blijft dus alleen over dat
iemand een bestand als dblogin.inc zoals Matthijs gebruikt zou kunnen
raden..... het bestand buiten de root zetten is ook idd een extra
veiligheid. Ook zou ik er toch php van maken....idd als php uitgezet wordt
dan zie je de sourcecode maar plotselinge uitval van parsing van PHP code
schijnt bij PHP vrijwel nooit tot bijna nooit voor te komen (bij ASP schijnt
dat veel vaker te gebeuren)
Marcel
Erick T. Barkhuis
22/12/05, 11:45
Marcel:
> idd als php uitgezet wordt dan zie je de sourcecode
Welnee. Als PHP uitvalt, dan wordt de 'include()' ook niet uitgevoerd, en
blijft het dblogin-bestandje geparkeerd op de server staan zonder dat
iemand dat ding binnenkrijgt.
--
Erick
"Begin ik misschien aan wedervraagmoeheid te lijden?" - René Pijlman in
niwo
Matthijs de Z
22/12/05, 12:00
> Matthijs, je kan ook gebruik maken can constant variabels:
>
> http://nl3.php.net/Constants
nog nooit van gehoord. Maar bedankt, ik ga het zo eens even doorlezen.
Groeten,
Matthijs
Arnoud Galactus Engelfriet
22/12/05, 12:00
In article <MPG.1e14a02a79fefd8b989c3a@news.individual.net>,
Erick T. Barkhuis <erick.usenet@ardane.c-o-m> wrote:
>Marcel:
>
>> idd als php uitgezet wordt dan zie je de sourcecode
>
>Welnee. Als PHP uitvalt, dan wordt de 'include()' ook niet uitgevoerd, en
>blijft het dblogin-bestandje geparkeerd op de server staan zonder dat
>iemand dat ding binnenkrijgt.
Totdat ik de source lees, kijk wat er wordt ge-include()'d en
dat handmatig opvraag.
Arnoud
--
Arnoud Engelfriet, Dutch & European patent attorney - Speaking only for myself
Patents, copyright and IPR explained for techies: http://www.iusmentis.com/
"Arnoud "Galactus" Engelfriet" <galactus@stack.nl> schreef in bericht
news:doe0k5$2je$1@toad.stack.nl...
> In article <MPG.1e14a02a79fefd8b989c3a@news.individual.net>,
> Erick T. Barkhuis <erick.usenet@ardane.c-o-m> wrote:
>>Marcel:
>>
>>> idd als php uitgezet wordt dan zie je de sourcecode
>>
>>Welnee. Als PHP uitvalt, dan wordt de 'include()' ook niet uitgevoerd, en
>>blijft het dblogin-bestandje geparkeerd op de server staan zonder dat
>>iemand dat ding binnenkrijgt.
>
> Totdat ik de source lees, kijk wat er wordt ge-include()'d en
> dat handmatig opvraag.
>
> Arnoud
>
> --
Ja dat is hem....!!!
Erick T. Barkhuis
22/12/05, 12:15
Arnoud Galactus Engelfriet:
> In article <MPG.1e14a02a79fefd8b989c3a@news.individual.net>,
> Erick T. Barkhuis <erick.usenet@ardane.c-o-m> wrote:
> >Marcel:
> >
> >> idd als php uitgezet wordt dan zie je de sourcecode
> >
> >Welnee. Als PHP uitvalt, dan wordt de 'include()' ook niet uitgevoerd,
>
> Totdat ik de source lees, kijk wat er wordt ge-include()'d en
> dat handmatig opvraag.
Je moet die include() dan ook onzichtbaar in de source opnemen,
natuurlijk:
<p style="display:none;">
include('dblogin.inc');
</p>
Ben je overal vanaf!
--
Erick
"Het valt mij op dat Opera toch wat problemen heeft met php" - Jeroen FF
Heymans in niwo
Geert Wirken
22/12/05, 17:00
Erick T. Barkhuis schreef op 22-12-2005 12:04:
> Je moet die include() dan ook onzichtbaar in de source opnemen,
> natuurlijk:
>
> <p style="display:none;">
> include('dblogin.inc');
> </p>
>
> Ben je overal vanaf!
Niet, dus.
Je kunt het beste het bestand dat je include() op een plek zetten waar
je als bezoeker niet bij kunt: in een map buiten de DocumentRoot, of
beveiligen (bv. met .htaccess).
--
Met vriendelijke groeten,
Geert Wirken
Erick T. Barkhuis
22/12/05, 17:00
Geert Wirken:
> Erick T. Barkhuis schreef op 22-12-2005 12:04:
> > Je moet die include() dan ook onzichtbaar in de source opnemen,
> > natuurlijk:
> >
> > <p style="display:none;">
> > include('dblogin.inc');
> > </p>
> >
> > Ben je overal vanaf!
>
> Niet, dus.
*proest*
Heb je het al eens geprobeerd, dan?
--
Erick
"Ok, je kunt natuurlijk alles proberen, echter dan doet ie het soms
goed." - Loek in niwo
Warden Dave
22/12/05, 17:15
"Erick T. Barkhuis" <erick.usenet@ardane.c-o-m> wrote:
> Geert Wirken:
>> Erick T. Barkhuis schreef op 22-12-2005 12:04:
>>> Je moet die include() dan ook onzichtbaar in de source opnemen,
>>> natuurlijk:
>>> <p style="display:none;">
>>> include('dblogin.inc');
>>> </p>
>>>
>>> Ben je overal vanaf!
>> Niet, dus.
> *proest*
Geert heeft 'ergens' wel gelijk! [d.w.z., niet iedereen heeft een (goed
beveiligde) humorscanner in huis.]
WD
Erick T. Barkhuis
22/12/05, 17:15
Warden Dave:
> Erick :
> > Geert Wirken:
> >> Erick :
>
> >>> Je moet die include() dan ook onzichtbaar in de source opnemen,
> >>> natuurlijk:
>
> >>> <p style="display:none;">
> >>> include('dblogin.inc');
> >>> </p>
> >>>
> >>> Ben je overal vanaf!
>
> >> Niet, dus.
>
> > *proest*
>
> Geert heeft 'ergens' wel gelijk! [d.w.z., niet iedereen heeft een (goed
> beveiligde) humorscanner in huis.]
Wellicht had ik het dan wat makkelijker scanbaar moeten maken middels:
<script type="text/php" style="display:none;">include()</script>?
--
Erick
"Welke uitvluchten verzonnen mensen eigenlijk voor er computers waren?"
Erick T Barkhuis <erick.usenet@ardane.c-o-m>:
> Wellicht had ik het dan wat makkelijker scanbaar moeten maken middels:
> <script type="text/php" style="display:none;">include()</script>?
Hij had het nog over .htaccess, dus je moet die class gebruiken?
<script type="text/php" class="htaccess">include()</script>?
--
robert
Warden Dave
22/12/05, 17:30
"Erick T. Barkhuis" <erick.usenet@ardane.c-o-m> wrote:
> Warden Dave:
>> Geert heeft 'ergens' wel gelijk! [d.w.z., niet iedereen heeft een
>> (goed beveiligde) humorscanner in huis.]
>
> Wellicht had ik het dan wat makkelijker scanbaar moeten maken middels:
> <script type="text/php" style="display:none;">include()</script>?
Jaja. Wat dan, net zo goed, ook gelijk zou kunnen:
<uitvlucht
type = "tekst/pre-oudejaarsconferance"
style = "DISPLAY:NONE"
>include 'grollen_en_grappen.inc';
</uitvlucht>
[Geschikt voor lezers tussen de 0 en 130 jaar.]
WD
Geert Wirken
22/12/05, 17:45
Erick T. Barkhuis schreef op 22-12-2005 16:49:
> *proest*
> Heb je het al eens geprobeerd, dan?
Huh, niet helemaal wakker denk ik ;)
Geert Wirken
22/12/05, 17:45
robert schreef op 22-12-2005 17:12:
> Hij had het nog over .htaccess, dus je moet die class gebruiken?
> <script type="text/php" class="htaccess">include()</script>?
Ja, goed plan ;)
--
[en ik zal voortaan beter lezen...]
Arnoud Galactus Engelfriet wrote:
> In article <b1573$43aa725f$d969db07$11727@cache40.multikabel.n et>,
> Marcel <sorryafraidofspam@nospam.com> wrote:
>
>>Ik zou overigens geen .inc voor je database connectie file gebruiken maar
>>.php. Een inc file kan iemand lezen namelijk dus als iemand je site 'slurpt'
>>(met bijv. webgrabber) dan kan ik die daarna zo de connectie met je database
>>lezen....
>
>
> Allereerst moet die iemand dan wel weten hoe je .inc heet,
> maar "login.inc" of zo zou een goeie gok zijn.
>
> Verder, stel dat PHP zelf stukgaat of per ongeluk uitgezet wordt
> door de admin. Dan kan iedereen je .php bestanden downloaden als
> gewone tekst. Daar moeten dus geen wachtwoorden instaan!
>
> Persoonlijk zou ik zo'n include file altijd buiten de public_html
> houden. Je PHP script kan elk bestand openen, maar de webserver
> zal het bestand dan nooit opsturen.
> require("/home/galactus/etc/login.inc");
> Knappe jongen die die op weet te vragen via mijn webserver.
>
> Arnoud
>
Als je de volgende instructie opneemt in je .htaccess bestand (die in de
webroot staat) loop je geen risico meer dat een .inc file geopend kan
worden - ook al zou deze in een subdirectory van de webroot staan.
<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>
Uiteraard blijft het beter om .inc files buiten de webroot te zetten,
maar als dat niet kan is dit een mooie tussenoplossing.
Gr, Juliette