1 2 3 4 5 6 7 8 9 | <? $host = "hostip"; $Username = "username"; $Password = "WaChTwOoRd"; $Database = "databasenaam"; mysql_connect("$host","$Username","$Password") or die (mysql_error()); mysql_select_db("$Database") or die ("Database connection failed!"); ?> |
1 2 3 | <?php $text=preg_replace('#<table>(.*?)</table>#i','',$originele_text); ?> |
Dat kan niet in MySql. Je kan dus ook geen query maken die over meerdere databases gaan.quote:Op vrijdag 5 augustus 2005 11:18 schreef HaKeeM het volgende:
Ik weet dat je in je query kan werken met
databasenaam.tabelnaam om het onderscheid in je query's aan te geven
Als je query's op meerdere databases uit wil voeren dan moet je per database een verbinding maken. Bij mysql_connect moet je de parameter new_link = true opgeven. Bij elke query die je uitvoert moet je opgeven welke verbinding gebruikt moet worden.quote:maar hoe open je een connectie met twee databases tegelijk.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | // Config $db1 = array( 'server' => 'localhost', 'username' => 'sa', 'password' => '******', 'database' => 'test1' ); $db2 = array( 'server' => 'localhost', 'username' => 'sa', 'password' => '******', 'database' => 'test2' ); // Open connections $conn1 = mysql_connect($db1['server'], $db1['username'], $db1['password'], true); if (!$conn1) { die('Error: could not connect to server.'); } mysql_selectdb($db1['database']); $conn2 = mysql_connect($db2['server'], $db2['username'], $db2['password'], true); if (!$conn2) { die('Error: could not connect to server.'); } mysql_selectdb($db2['database']); // Execute queries $sql1 = 'SELECT * FROM table1'; $result1 = mysql_query($sql1, $conn1); if (!$result1) { die('Error: could not execute query.'); } $sql2 = 'SELECT * FROM table2'; $result2 = mysql_query($sql2, $conn2); if (!$result2) { die('Error: could not execute query.'); } |
Als <table> en </table> op dezelfde regel staan. Anders even de s modifier toevoegen. Dan matcht de punt elk teken, inclusief een newline.quote:Op vrijdag 5 augustus 2005 16:35 schreef Swetsenegger het volgende:
[ code verwijderd ]
Doet dit wat ik denk dat het doet, namelijk alles vanaf <table> tot </table> weghalen?
quote:Op vrijdag 5 augustus 2005 14:52 schreef Postman_Pat het volgende:
...
1 | SUM('AanwezigWinst') |
1 | SUM(`AanwezigWinst`) |
quote:Op vrijdag 5 augustus 2005 18:41 schreef SuperRembo het volgende:
[..]
Als <table> en </table> op dezelfde regel staan. Anders even de s modifier toevoegen. Dan matcht de punt elk teken, inclusief een newline.
1 2 3 | <?php $text=preg_replace('#<table>(.*?)</table>#is','',$originele_text); ?> |
1 2 3 4 | #<table>(.*?)</table>#is /<table>(.*?)<\/table>/is <\<table\>(.*?)\</table\>>is {<table>(.*?)</table>}is |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | class Database { var $host; var $user; var $pass; var $database; // constructor function Database() { // initialiseer hier bepaalde gegevens $this->host = 'localhost'; $this->user = 'mijnveelgebruikteusername'; $this->pass = 'mijnveelgebruiktepassword'; } // functie om de host te bepalen function Sethost($host) { $this->host = $host; } // functie om de user te bepalen function Setuser($user) { $this->user = $user; } // functie om de pass te bepalen function Setpass($pass) { $this->pass = $pass; } // functie om de database te bepalen function Setdatabase($database) { $this->database = $database; } // verbind met database function Connectdb() if($dbc=@mysql_connect($this->host,$this->user,$this->pass)){ if(!@mysql_select_db($this->database)){ die('<p>Database niet te selecteren omdat: '.mysql_error().'</p>'); } }else{ die('<p>Niet verbonden wegens '.mysql_error().'</p>'); } } |
1 2 3 4 5 | $db= new Database; $db->Setuser ('newuser'); $db->Setpass ('newpass'); $db->Setdatabase ('newdb'); $db->Connectdb (); |
1 2 3 4 5 6 7 | <?php function ConnectDB ($host,$user,$pass,$database){ //database connectie maken } ConnectDB('mijnhost','mijnuser','mijnpass','mijndatabase'); ?> |
ik ken dat probleemquote:Op zaterdag 6 augustus 2005 14:40 schreef Swetsenegger het volgende:
Het blijft me maar bezig houden...: OOP
Ik kom maar geen goede tutorial tegen welke me de fineses van OOP goed uitlegt. Tot op heden zie ik het meer als een uitgebreide functie, maar er zal best meer achter zitten.
Het kwartje wil dus maar niet vallen, en ik blijf op zoek naar goede heldere stap voor stap documentatie met duidelijke en nuttige voorbeelden. Dit mag bv ook een boek zijn (graag zelfs) welke OOP in PHP 4 en 5 helder beschrijft.
Iederen met tips voor nederlandstalig online tutorials of duidelijke boeken, ik hou me aanbevolen.
En nederlands omdat wanneer ik de techniek opzich niet begrijp, me ook nog niet druk wil maken of ik de vertaling wel juist interpreteer
Ja, zoiets heb ik ook. Een klasse ziet eruit als een verzameling functies. Dan kan ik net zo goed... een verzameling functies aanleggenquote:Op zondag 7 augustus 2005 17:06 schreef mschol het volgende:
[..]
ik ken dat probleem
maar OOP is , vind ik, eigenlijk een heel omslachtige manier om dingen te laten uitvoeren
volgens mij wilde ze gewoon iets hebben dat altijd een standaard opbouw had en hebben ze daarom OOP gekozen
Je kunt het ook iets anders doenquote:Op zondag 7 augustus 2005 16:47 schreef Swetsenegger het volgende:
Dan maar gewoon beginnen met OOP, al doende leert men
[ code verwijderd ]
Volgens mij is dit een werkende klasse, correct?
En die kan ik zou aanroepen?
[ code verwijderd ]
Indien correct (:P), wat is dan nu het grote voordeel van een klasse boven een functie.
Ik kan natuurlijk ook gewoon dit doen:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class Database { var $host; var $user; var $database; // constructor function Database($host, $user, $pass, $database) { // initialiseer hier bepaalde gegevens $this->host = $host; $this->user = $user; $this->database = $database; if( @mysql_connect($this->host, $this->user, $pass) ) { if(! @mysql_select_db($this->database)) { die('<p>Database niet te selecteren omdat: '.mysql_error().'</p>'); } } else { die('<p>Niet verbonden wegens '.mysql_error().'</p>'); } } } |
1 | $db = new Database('mijnhost', 'mijnuser', 'mijnpass', 'mijndb'); |
Die is wel netjes inderdaad. Maar kan ik hier nu ook zorgen dat de host al gedeclareerd is naar localhost, en indien nodig ik deze kan overschrijven?quote:Op zondag 7 augustus 2005 17:51 schreef Light het volgende:
[..]
Je kunt het ook iets anders doen
[ code verwijderd ]
Merk op dat ik $pass nergens opsla. Als je dan eens een print_r($db) gebruikt blijft het wachtwoord iig verborgen. En zo kun je in 1 keer verbinding maken:
[ code verwijderd ]
Je kunt je Database-klasse ook meer laten doen dan alleen het maken van een verbinding. Denk aan het tellen van queries, en bijhouden hoe lang de queries duren. Dan heeft zo'n klasse echt meerwaarde boven de standaard mysql_ functies. En het zijn dingen die een query-functie er wel bij kan doen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Database { var $host; var $user; var $database; // constructor function Database($host, $user, $pass, $database) { // initialiseer hier bepaalde gegevens $this->host='localhost'; $this->host = $host; $this->user = $user; $this->database = $database; if( @mysql_connect($this->host, $this->user, $pass) ) { if(! @mysql_select_db($this->database)) { die('<p>Database niet te selecteren omdat: '.mysql_error().'</p>'); } } else { die('<p>Niet verbonden wegens '.mysql_error().'</p>'); } } } |
1 | $db= new Database('mijnuser','mijnpass','mijndb'); |
...members... tuurlijk.quote:Al die properties helemaal uitschrijven met setters en getters daar heb je in php4 niet zo veel aan. Je hebt geen onderscheid in private en public members.
Uiteraard kan datquote:Op zondag 7 augustus 2005 19:11 schreef Swetsenegger het volgende:
[..]
Die is wel netjes inderdaad. Maar kan ik hier nu ook zorgen dat de host al gedeclareerd is naar localhost, en indien nodig ik deze kan overschrijven?
1 | function Database($user, $pass, $database, $host='localhost') |
Dat vind ik iig een voordeelquote:Het voordeel is dus behalve dat het misschien wat netter en overzichtelijker is, dat ik mijn variabelen bij de 'functie' hou. Geen risico op overschrijven zeg maar?
[..]
Functies en variabelen. Talen die meer OO zijn kennen public en private members. Van private members is buiten de class het bestaan niet eens te zien. Dat kan in PHP niet, daar zijn alle functies en variabelen van buitenaf te zien en aan te spreken.quote:...members... tuurlijk.
dus het voorbeeld wat ik gaf werkt niet?quote:Op zondag 7 augustus 2005 20:09 schreef Light het volgende:
[..]
Uiteraard kan dat
[ code verwijderd ]
Let wel op de gewijzigde volgorde van de argumentenAls je localhost wilt gebruiken dan geef je gewoon maar 3 argumenten.
In java wordt de term members gebruikt. Hoe dat is in andere OO-talen weet ik niet.quote:Op zondag 7 augustus 2005 20:10 schreef Roönaän het volgende:
members is de verkeerde naam voor attributen gok ik zo.
Je gaat een variabele 2 keer toewijzen, resultaat is dat de eerste eigenlijk wel weg kan. Je kunt wel iets doen dat als je een lege string opgeeft voor $host, dat dan localhost gebruikt wordt. Als je een variabele wilt weglaten dan moet het de laatste zijn.quote:Op zondag 7 augustus 2005 20:14 schreef Swetsenegger het volgende:
[..]
dus het voorbeeld wat ik gaf werkt niet?
Oh kut het is ook nooit goed.quote:Op zondag 7 augustus 2005 20:10 schreef Roönaän het volgende:
members is de verkeerde naam voor attributen gok ik zo.
Ok, dan is wat jij zei een stuk mooierquote:Op zondag 7 augustus 2005 20:20 schreef Light het volgende:
[..]
Je gaat een variabele 2 keer toewijzen, resultaat is dat de eerste eigenlijk wel weg kan. Je kunt wel iets doen dat als je een lege string opgeeft voor $host, dat dan localhost gebruikt wordt. Als je een variabele wilt weglaten dan moet het de laatste zijn.
Ok, maar hoe neem ik de link-identifier op in mijn object?quote:Op zondag 7 augustus 2005 20:04 schreef Roönaän het volgende:
De genoemde database class is bijvoorbeeld ietwat simplistisch. In de object attributen zou je bijvoorbeeld de link identifier moeten opslaan en deze consequent gebruiken bij alle methoden. Dan kan je namelijk op eenvoudige manier een connectie onderhouden met twee mysql servers, dmv twee verschillende db-objecten.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | function Connect($sHost = '', $sDatabase = '', $sUser = '', $sPassword = '') { $this->sHost = $sHost; $this->sDatabase = $sDatabase; $this->sUser = $sUser; $this->sPassword = $sPassword; // Establish connection and select database. if (! $this->iConnectionID) { $this->iConnectionID = @mysql_connect($this->sHost, $this->sUser, $this->sPassword); if (!$this->iConnectionID) { $this->iErrorNr = @mysql_errno($this->iConnectionID); $this->sError = @mysql_error($this->iConnectionID); $this->Error("No connection with host: " . $this->sHost); return 0; } if (!@mysql_select_db($this->sDatabase,$this->iConnectionID)) { $this->iErrorNr = @mysql_errno($this->iConnectionID); $this->sError = @mysql_error($this->iConnectionID); $this->Error("No connection with database: " . $this->sDatabase); $this->Disconnect(); return 0; } } return $this->iConnectionID; } |
Dat ga ik zeker doen (had al een en ander over PEAR gehoord, dacht eerst dat het een 'extra' pakket binnen php was, zoals GD2), maar ik wil het bergijpen zeg maar.quote:Op zondag 7 augustus 2005 20:49 schreef Roönaän het volgende:
Swets, kijk anders eens naar de PEAR libraries, dat zijn ook allemaal classes over het algemeen.
http://pear.php.net
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | class Database { var $host; var $user; var $database; var $link; var $queries[]; // constructor function Database($user, $pass, $database, $host='localhost') { // initialiseer hier bepaalde gegevens $this->host = $host; $this->user = $user; $this->database = $database; if( @mysql_connect($this->host, $this->user, $pass) ) { if(! ($this->link=mysql_select_db($this->database))) { die('<p>Database niet te selecteren omdat: '.mysql_error().'</p>'); } } else { die('<p>Niet verbonden wegens '.mysql_error().'</p>'); } } function query($query) { $this->queries[] = $query; $result = mysql_query($query, $this->link); return $result; } |
stoer, ik was even vergeten dat je de link identifier optioneel kon meegeven met mysql_query (al mijn projecten hebben maar 1 DB. De hoster biedt er ook niet meer per pakketquote:Op zondag 7 augustus 2005 21:21 schreef Light het volgende:
[ code verwijderd ]
Zo is het nog steeds een hele simpele class, maar hij gebruikt wel de link identifier. Die wordt automatisch iedere keer door de functie query gebruikt. Uiteraard kan die functie nog veel meer doen tijdens voor en na het uitvoeren van de query. Vandaar ook dat ik $result gebruik als tussenstap
Je krijgt een array die bijvoorbeeld via $db->queries[] te benaderen is. Die beval alle uitgevoerde queries. En je kunt er nog meer bijzetten, zoals de tijd die nodig was voor het uitvoeren en de mysql foutcode. Dan kun je ook nagaan waar je verder kunt optimaliseren, om eens een zijstraat te noemen.quote:Op zondag 7 augustus 2005 21:44 schreef Swetsenegger het volgende:
[..]
stoer, ik was even vergeten dat je de link identifier optioneel kon meegeven met mysql_query.
Alleen betekent dit wel dat ik met veel queries een enorme array $query krijg.
-edit- o nee, alleen als ik een nieuwe DB connectie maak
Ja, hij zet dus wel elke query in een array.quote:Op zondag 7 augustus 2005 21:52 schreef Light het volgende:
[..]
Je krijgt een array die bijvoorbeeld via $db->queries[] te benaderen is. Die beval alle uitgevoerde queries. En je kunt er nog meer bijzetten, zoals de tijd die nodig was voor het uitvoeren en de mysql foutcode. Dan kun je ook nagaan waar je verder kunt optimaliseren, om eens een zijstraat te noemen.
Het lezen van gifs is er nooit uit geweest. Het maken van gifs zit er sinds vorig jaar weer inquote:Op zondag 7 augustus 2005 21:52 schreef Swetsenegger het volgende:
En nog een side remark. Ondersteunt GD2 nu wel of niet .gif files?
Dat geeft inderdaad 1 deel(het makkelijkste) van het vraagstuk weer.. maar nu nog hoe je de ene keer de ene en de andere keer een andere vervanging moet doen... zoals bijv in:quote:
1 2 3 4 5 6 | $text = "=== groot === ==kleiner== =nog kleiner= normaal"; $text = ereg_replace('===(.*)===','<h1>\\1</h1>',$text); $text = ereg_replace('==(.*)==','<h2>\\1</h2>',$text); $text = ereg_replace('=(.*)=','<h3>\\1</h3>',$text); echo $text; |
Dat komt doordat ereg_replace "greedy" is. Met preg_replace kan je het "greedy" gedrag van het * veranderen in "non-greedy" door er een ? achter te zetten:quote:Op maandag 8 augustus 2005 18:00 schreef Nevermind het volgende:
[ code verwijderd ]
-edit2- okay, dit werkt niet. als er meer dan 1x een match inzit fropt het. wie verbetert het even?
1 2 3 4 5 | $text = "=== groot === ==kleiner== ==kleiner== =nog kleiner= normaal"; $text = preg_replace('/===(.*?)===/', '<h1>\\1</h1>', $text); $text = preg_replace('/==(.*?)==/', '<h2>\\1</h2>', $text); $text = preg_replace('/=(.*?)=/', '<h3>\\1</h3>', $text); echo $text; |
1 2 3 4 5 6 7 8 | <?php $text = "===groot=== ==kleiner== =nog kleiner= normaal"; $text = preg_replace('#[=]{3}(.*)[=]{3}#','<h1>\\1</h1>',$text); $text = preg_replace('#[=]{2}(.*)[=]{2}#','<h2>\\1</h2>',$text); $text = preg_replace('#[=]{1}(.*)[=]{1}#','<h3>\\1</h3>',$text); echo $text; ?> |
quote:Op maandag 8 augustus 2005 19:01 schreef SuperRembo het volgende:
[..]
Dat komt doordat ereg_replace "greedy" is. Met preg_replace kan je het "greedy" gedrag van het * veranderen in "non-greedy" door er een ? achter te zetten:
[ code verwijderd ]
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |