[PHP] Global variabelen

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Ik gebruik in meerdere pagina's een dbase connectie.
maar stel dat als er een wachtwoord verandering komt dan zouden in mijn geval nu alle paginas moeten worden aangepast om het weer te kunnen laten werken.
Ik denk dat dit op te lossen valt met een globale variabele.

Mijn vraag is hoe doe ik dat?
Ik zelf denk dat dit kan door een aparte php file te maken met deze variabelen
PHP:
4
global $conn = mysql_connect("***","***","***") or die("Unable to connect to SQL server");

deze zal dan vervolgens moeten worden aangeroepen door de betreffende paginas die er gebruik van maken.
Dit zal dan moeten met een include neem ik aan??
PHP:
4
include('..//global_vars.php')

als dit zo is moet dit dan ook bovenaan in de pagina in de code komen?

[ Voor 11% gewijzigd door Tijgertje84 op 24-10-2005 12:15 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 22-09 15:44
De mooiste oplossing is gewoon een aparte include (of class) te maken die een function dbConnect() erin heeft zitten. Dit bestand include je op elke pagina, en dan heb je maar op 1 plaats de gegevens staan. Mochten die ooit wijzigen, hoef je dat maar 1x te vervangen.
Natuurlijk kan je ook een configuratiebestandje maken met de belangrijkste variabelen. Eventueel zijn beide oplossingen te combineren, het ligt er een beetje aan hoe complex je script is (een simpel script is deze moeite m.i. niet waard :)).

Acties:
  • 0 Henk 'm!

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
In princiepe hoef je die niet global te maken. Als je hem include zit hij al in je script.

db.inc.php
PHP:
1
2
3
4
5
6
7
8
9
<?
  $DB["server"] = "localhost";
  $DB["user"] = "user";
  $DB["pass"] = "pass";
  $DB["database"] = "dbtje";

  $connection_link = mysql_connect($DB["server"],$DB["user"],$DB["pass"]);
  @mysql_select_db($DB["database"]);
?>


In je script:
PHP:
1
2
3
<?
  include_once("db.inc.php");
?>

[ Voor 42% gewijzigd door Fles op 24-10-2005 12:15 ]


Acties:
  • 0 Henk 'm!

  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 05-09 21:19

Wacky

Dr. Lektroluv \o/

Nog netter voor configuraties is define:
code:
1
2
define("DB_USER", "xxxx");
define("DB_PASS", "xxxx");

Voordeel hiervan is dat deze variabelen nooit overschreven kunnen worden in je code :)

Nu ook met Flickr account


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Graveheart schreef op maandag 24 oktober 2005 @ 12:14:
In princiepe hoef je die niet global te maken. Als je hem include zit hij al in je script.

db.inc.php
PHP:
1
2
3
4
5
6
7
8
9
<?
  $DB["server"] = "localhost";
  $DB["user"] = "user";
  $DB["pass"] = "pass";
  $DB["database"] = "dbtje";

  $connection_link = mysql_connect($DB["server"],$DB["user"],$DB["pass"]);
  @mysql_select_db($DB["database"]);
?>


In je script:
PHP:
1
2
3
<?
  include_once("db.inc.php");
?>
ok mooi dus dan zat ik al redelijk in de goede richting :)
ik miste inderdaad nog de db-connect maar eht ging in het voorbeeld van mij om het id
maar nu zie ik een @ staan bij je script... wat houd dit in???

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Wacky:
Nog netter voor configuraties is define:
Voordeel hiervan is dat deze variabelen nooit overschreven kunnen worden in je code :)
Het zijn dan ook geen variabelen, maar constants, om precies te zijn. ;)

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Wacky schreef op maandag 24 oktober 2005 @ 12:16:
Nog netter voor configuraties is define:
code:
1
2
define("DB_USER", "xxxx");
define("DB_PASS", "xxxx");

Voordeel hiervan is dat deze variabelen nooit overschreven kunnen worden in je code :)
Is idd netter :) Hoewel het natuurlijk niet meer uit maakt of deze variabelen overschreven worden. Tussen de declaratie en de connectie komt toch geen verdere code te staan. Ik ga er niet vanuit dat je dingen in je connectie script propt ;)

Een @ is om eventuele foutmeldingen niet weergeven.

[ Voor 105% gewijzigd door Fles op 24-10-2005 12:24 ]


Acties:
  • 0 Henk 'm!

  • OverSoft
  • Registratie: December 2000
  • Laatst online: 22-09 11:11
Tijgertje84 schreef op maandag 24 oktober 2005 @ 12:18:
[...]

ok mooi dus dan zat ik al redelijk in de goede richting :)
ik miste inderdaad nog de db-connect maar eht ging in het voorbeeld van mij om het id
maar nu zie ik een @ staan bij je script... wat houd dit in???
@ onderdrukt foutmeldingen van PHP en moet je eigenlijk alleen gebruiken als je zeker weten dat die functie niet fout kan gaan, of als je zelf een errorhandler hebt geschreven.

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 21:46
Tijgertje84 schreef op maandag 24 oktober 2005 @ 12:18:
[...]

ok mooi dus dan zat ik al redelijk in de goede richting :)
ik miste inderdaad nog de db-connect maar eht ging in het voorbeeld van mij om het id
maar nu zie ik een @ staan bij je script... wat houd dit in???
De @ kan worden gebruikt om foutmeldingen te onderdrukken, dus dan krijg je niet een error op je scherm als de database bijvoorbeeld offline is.

Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Ook na te zoeken in de manual... :)

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Wacky schreef op maandag 24 oktober 2005 @ 12:16:
Nog netter voor configuraties is define:
code:
1
2
define("DB_USER", "xxxx");
define("DB_PASS", "xxxx");

Voordeel hiervan is dat deze variabelen nooit overschreven kunnen worden in je code :)
ik zag dat define stukje, maar kan dit wat hieronder staat ook??
PHP:
4
5
6
7
8
9
10
  define($DB,"xxxx") ;
  define($DB_USER, "xxxx");
  define($DB_PASS, "xxxx");
  define($DB_DB, "xxxx");

  $conn = mysql_connect($DB,$DB_USER,$DB_PASS); 
  @mysql_select_db($DB_DB);

[ Voor 10% gewijzigd door Tijgertje84 op 24-10-2005 12:25 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Dat is de bedoeling met define idd.

Alleen gebruik je dan ipv
PHP:
1
define($DB,"xxxx") ;

dit
PHP:
1
define("DB","xxxx") ;


Tenzij je de naam van DB de waarde van $DB wilt hebben ;)

[ Voor 82% gewijzigd door Fles op 24-10-2005 12:30 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Een goede truc voor betere beveiliging is ook (indien mogelijk) de include-file waarin het wachtwoord staat buiten de publieke web directory op te slaan. Als de webserver dan eens verkeerd is geconfigureerd waardoor je PHP niet uitgevoerd, maar gewoon weergegeven wordt, dan kan men die file niet bekijken...

Overigens kun je ook beter 'require' (of require_once) gebruiken dan 'include'. Immers is het een noodzakelijk bestand voor je pagina.

Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Probeer 't es uit, dan weet je het meteen. :)
In jouw geval zou ik overigens zeker niet werken met error-suppression door @. In tegendeel zou ik juist ervoor zorgen dat je *alle* errors altijd te zien kreeg en daarom voor de zekerheid het volgende helemaal bovenaan je scripts toevoegen:
PHP:
1
error_reporting(E_ALL);


Je zit duidelijk in een leer- / ontwikkelfase en je kunt pas goed debuggen als je weet waar je fouten hebt. Fouten onderdrukken is dan niet handig. ;)

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Tijgertje84 schreef op maandag 24 oktober 2005 @ 12:25:
[...]

ik zag dat define stukje, maar kan dit wat hieronder staat ook??
PHP:
4
5
6
7
8
9
10
  define($DB,"xxxx") ;
  define($DB_USER, "xxxx");
  define($DB_PASS, "xxxx");
  define($DB_DB, "xxxx");

  $conn = mysql_connect($DB,$DB_USER,$DB_PASS); 
  @mysql_select_db($DB_DB);
Nee, lees de manual even.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
en bedankt voor het antwoord over @ :)
vond dit op de site en de volgende code geeft het heel duidelijk weer :)
PHP:
4
5
6
7
8
9
10
11
12
13
14
function my_error_handler(.......)
{
  if(error_reporting() == 0) // error_reporting() = 0, so it was called with @ in front of it
  {
   // do nothing
  }
  else
  {
   // do something
  }
}

was ff weg had pauze :+
ok bedankt dus ik heb het gewoon zo opgelost
PHP:
4
5
6
7
8
9
10
11
define("DB","***") ;
  define("DB_USER", "***");
  define("DB_PASS", "***");
  define("DB_DB", "***");

  $conn = mysql_connect("DB","DB_USER","DB_PASS"); 
  mysql_select_db("DB_DB") or die("Unable to select database"); 
//ipv @

[ Voor 33% gewijzigd door Tijgertje84 op 24-10-2005 13:02 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Graveheart schreef op maandag 24 oktober 2005 @ 12:20:
[...]

Is idd netter :) Hoewel het natuurlijk niet meer uit maakt of deze variabelen overschreven worden. Tussen de declaratie en de connectie komt toch geen verdere code te staan. Ik ga er niet vanuit dat je dingen in je connectie script propt ;)
Een ander voordeel is dat de constanten altijd beschikbaar zijn, ook in functies zonder ze eerst als global te moeten declareren, zoals met variabelen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Tijgertje84 schreef op maandag 24 oktober 2005 @ 12:25:
[...]

ik zag dat define stukje, maar kan dit wat hieronder staat ook??
PHP:
4
5
6
7
8
9
10
  define($DB,"xxxx") ;
  define($DB_USER, "xxxx");
  define($DB_PASS, "xxxx");
  define($DB_DB, "xxxx");

  $conn = mysql_connect($DB,$DB_USER,$DB_PASS); 
  @mysql_select_db($DB_DB);
Het kán, maar doet niet wat je wilt. Maar waarom zou je het willen, als je "DB" definieert, kun je vervolgens overal door DB te gebruiken de juiste setting accessen:
PHP:
1
2
3
4
define("DB", "xxx");
// ,,,

mysql_connect(DB, DB_USER, DB_PASS);
Tijgertje84 schreef op maandag 24 oktober 2005 @ 12:31:
ok bedankt dus ik heb het gewoon zo opgelost
PHP:
4
5
6
7
8
9
10
11
define("DB","***") ;
  define("DB_USER", "***");
  define("DB_PASS", "***");
  define("DB_DB", "***");

  $conn = mysql_connect("DB","DB_USER","DB_PASS"); 
  mysql_select_db("DB_DB") or die("Unable to select database"); 
//ipv @
En dat werkt dus niet, tenzij je databaseserver echt "DB" heet, en je username "DB_USER" is, etc. :)

[ Voor 30% gewijzigd door .oisyn op 24-10-2005 13:07 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Tijgertje84 schreef op maandag 24 oktober 2005 @ 12:31:
ok bedankt dus ik heb het gewoon zo opgelost
PHP:
4
5
6
7
8
9
10
11
define("DB","***") ;
  define("DB_USER", "***");
  define("DB_PASS", "***");
  define("DB_DB", "***");

  $conn = mysql_connect("DB","DB_USER","DB_PASS"); 
  mysql_select_db("DB_DB") or die("Unable to select database"); 
//ipv @
en dat werkt :o

ik zou het zo doen ;)
PHP:
1
  $conn = mysql_connect(DB,DB_USER,DB_PASS);

Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Erkens schreef op maandag 24 oktober 2005 @ 13:08:
[...]

en dat werkt :o

ik zou het zo doen ;)
PHP:
1
  $conn = mysql_connect(DB,DB_USER,DB_PASS);
jullie hebben gelijk :)
was gewoon ff aan het testen en kreeg zelf een melding want omdat ik die @ heb weggehaald heb ik deze errors erbij gezet:
PHP:
4
5
$conn = mysql_connect(DB,DB_USER,DB_PASS) or die("Unable to connect to SQL server"); 
  mysql_select_db(DB_DB) or die("Unable to select database");

en idd ik kreeg de error :)
nu niet meer :P

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
.oisyn schreef op maandag 24 oktober 2005 @ 13:04:
[...]

Een ander voordeel is dat de constanten altijd beschikbaar zijn, ook in functies zonder ze eerst als global te moeten declareren, zoals met variabelen.
Ook hier heb je weinig mee te maken in deze situatie natuurlijk ;)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Graveheart schreef op maandag 24 oktober 2005 @ 13:32:
Ook hier heb je weinig mee te maken in deze situatie natuurlijk ;)
zoals het voorbeeldje niet nee, maar wat ik zelf altijd doe is een connectie maken in een simpele class welke gebruik maakt van dergelijke constanten voor authenticatie etc.
Hierdoor kan ik de settings eenvoudig in een andere file (eventueel buiten de webroot) zetten zonder dat mijn applicatie daarop stuk gaat omdat er een zooi "global" moet zijn, wat je liever wilt voorkomen voor het overzicht.
Daarnaast zijn dit gewoon waarden die je eenmalig insteld en tijdens de loop van de applicatie niet veranderd. Waarom dan een variabele gebruiken?
Pagina: 1