quote:Op vrijdag 9 maart 2007 19:32 schreef Stijn1983 het volgende:
[..]
Het moet weer ingewikkeld hoor, voor onze mister Splendor. Je moet gewoon een tweede subquery maken, je kan namlijk niet meerdere resultaten in 1 subquery terug krijgen. Lees dit namelijk maar eens:
[..]
1 2 3 4 5 6 7 8 9 10 11 12 13 | class DBclass { function dbConnect($host, $user, $pass) {} function dbSelect($selectedDB) {} function checkConnection() {} // Controleer de opgezette verbinding met de DB function query($query) {} function checkQueryResource($resource) {} // Controleer de result van de query function fetch($resource) {} // mysql_fetch_assoc() function result($this->queryResource) {} // mysql_result() function dbClose() {} function checkError() {} // Controleer en output de gegeven errors } ?> |
1 2 3 4 5 6 7 8 | SELECT u.name, u.id FROM user AS u WHERE u.id = ".mysql_real_escape_string($id)." "; |
Ja, ik besefte het net pas... Een beetje dom...quote:Op zaterdag 10 maart 2007 16:58 schreef Tiemie het volgende:
je kunt beter iedere variabele apart door mysql_real_escape_string halen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | function escapeQuery($query) { // Haal de argumenten op $this->arguments = func_get_args(); // Het eerste resultaat is de query $this->query = array_shift($this->arguments); // Loop door de resterende elementen en geef ze een corresponderend nummer foreach ($this->arguments as $index => $name) { $this->arguments[$index+1] = $name; } // Loop nogmaals door de resultaten en vervang de nummers met de escaped waarden foreach ($this->arguments as $number => $value) { $this->query = str_replace(":$number", "'" . mysql_real_escape_string($value) . "'", $this->query); } // Return de schoongemaakte query return $this->query; } ?> |
je zou in ParseFile() die variabele aan $GLOBALS toe kunnen voegen, dan in het tweede bestand eerst kijken of die bestaat, voordat die hem zelf probeert aan te maken.quote:Op zaterdag 10 maart 2007 09:47 schreef mschol het volgende:
klein vraagje:
ik heb een kleine template parser:
[ code verwijderd ]
die roep ik alsvolgt aan:
[ code verwijderd ]
nu woerdt er in navGlobalBar.php de variable $nums aangemaakt, echter heb ik die variable ook nodig in navSubBar.php
is het mogelijk om die variable beschikbaar te maken voor dat 2de bestand?
anders moet ik een rits querie's opnieuw uitvoeren in het 2de bestand, das performance techniesch niet echt handig
1 2 3 4 5 6 7 8 9 10 11 | function simple_query( $query, $returnfirstrow=false) { if (strpos($query, "SELECT")!==false)) $is_select=true; if( $res=mysql_query($query) ) { if ($returnfirstrow && $is_select) return ( mysql_fetch_assoc($res) ); else if($is_select) return ( $x=mysql_num_rows($res) == 0 ? false : $x ); else return ( $x=mysql_affected_rows($res) == 0 ? false : $x ); } return false; } ?> |
Het feit dat je $this gebruikt betekent niet dat het automatisch ook OOP is en jouw code is daar weer een mooi voorbeeld van. Je gebruikt properties voor acties binnen een method die buiten de scope van de method niet meer gebruikt worden.quote:Op zaterdag 10 maart 2007 17:00 schreef SkaterSam het volgende:
[..]
Ja, ik besefte het net pas... Een beetje dom...![]()
Nu even kijken of ik iets kan schrijven die dat soort dingen in de query automatisch escaped...
edit [18.29]: een beetje van mijzelf en een beetje van Maggi...
[ code verwijderd ]
Huh, hoe bedoel je "een query property binnen je class" ? Wat ik nu doe is het volgende, eerst escape ik die query met de functie, dan return ik hem in een variabele, die ik weer gebruik in de echte query. Maar als je het kan verhelderen, graagquote:Op zaterdag 10 maart 2007 20:30 schreef smesjz het volgende:
Handiger was denk ik dat je een $query property maakt binnen die class zodat je niet die $query hoeft over te gooien (via return bijv) binnen je class.
Ja dat klopt denk ik ook wel. Ik denk dat het meeste in die class ook "gewoon" functies zijn. Ik ben er ook nog mee aan het experimenteren. Maar als je ook hier meer informatie over hebt (hoe zou dit er in OO hebben uitgezien ?) dan lees ik het graag.quote:Nu is het gewoon functioneel programmeren en is het toevallig een class omdat er class voor staat en niet omdat het iets met OO te maken heeft.
Ik bedoelde meer zoiets: (ff quick&dirty voor PHP5)quote:Op zaterdag 10 maart 2007 21:34 schreef SkaterSam het volgende:
Huh, hoe bedoel je "een query property binnen je class" ? Wat ik nu doe is het volgende, eerst escape ik die query met de functie, dan return ik hem in een variabele, die ik weer gebruik in de echte query. Maar als je het kan verhelderen, graag :)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Database { private $query = null; private function prepareQuery() { blabla(); $query = escpape_meuk_hier(); $this->query = $query; } public function execQuery($query) { // Eerst escapen. $this->query = $query; $this->prepareQuery(); mysql_query($this->query); } } ?> |
ik heb in het eerste bestand, navGlobalBar.php, 2 globals toegewezen die ik nodig had, en die kon ik vervolgens aanroepen in het 2de bestand,quote:Op zaterdag 10 maart 2007 20:10 schreef ralfie het volgende:
[..]
je zou in ParseFile() die variabele aan $GLOBALS toe kunnen voegen, dan in het tweede bestand eerst kijken of die bestaat, voordat die hem zelf probeert aan te maken.
Ja, dat zou natuurlijk ideaal zijn! Ik had het echter op deze manier gedaan, omdat ik ook argumenten moet opgeven die vervangen moeten worden in de query (dus een :1 wordt bijvoorbeeld $obj_id), maar ik vond het handiger dat dit in twee stappen ging. Ik neem aan dat ik het bijvoorbeeld ook gewoon in de execQuery had kunnen zetten ($db->execQuery($query, $enkele_argumenten_ter_vervanging)), ik geloof dat jij iets dergelijks bedoelt. Want mijn vraag was hoe ik die vervangende argumenten in de prepareQuery function kreeg.quote:Op zondag 11 maart 2007 10:00 schreef smesjz het volgende:
Ik bedoelde meer zoiets: (ff quick&dirty voor PHP5)
[ code verwijderd ]
Het kan natuurlijk ook nog op tig andere manieren, dit voorbeeldje laat alleen zien dat je door het gebruik van die query property (private $query) je niet meer 'return' hoeft te gebruiken.
Ja dat heb ik gezien, en hoewel ik daar ook naar kijk, probeer ik liever zelf een in elkaar te zetten natuurlijk, leerervaring enzoquote:Verder is een database class al 100 keer in OO gemaakt voor PHP en met een beetje Google werk kan je daar genoeg voorbeelden van vinden.
Hmmm, ja dat kan, ik werk echter met een script die de Errorlog uitleest van Apache2. Dan krijg ik op mijn browserscherm altijd de laatste errors die Apache2 ontdekt. Maar ik weet niet zeker of de Errorlog alle errors die error_reporting(E_ALL) oppikt, ook pakt.quote:BIj het ontwikkelen van je code kan ik je aanraden om error_reporting(E_ALL); aan te zetten zodat PHP je zelf waarschuwt bij misbruik van $this.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | { if ($handle = opendir($dir)) { // Dit is de juiste manier om door een directory te wandelen. while (false !== ($file = readdir($handle))) { if(is_dir($file)) { readfilelist($file); } $file_arr[]= $file; } closedir($handle); } } |
Je kan ook eens kijken naar de aanpak in PDO (>= php5.1): http://nl2.php.net/manual/en/ref.pdo.phpquote:Op zondag 11 maart 2007 13:28 schreef SkaterSam het volgende:
[..]
Ja, dat zou natuurlijk ideaal zijn! Ik had het echter op deze manier gedaan, omdat ik ook argumenten moet opgeven die vervangen moeten worden in de query (dus een :1 wordt bijvoorbeeld $obj_id), maar ik vond het handiger dat dit in twee stappen ging. Ik neem aan dat ik het bijvoorbeeld ook gewoon in de execQuery had kunnen zetten ($db->execQuery($query, $enkele_argumenten_ter_vervanging)), ik geloof dat jij iets dergelijks bedoelt. Want mijn vraag was hoe ik die vervangende argumenten in de prepareQuery function kreeg.
1 2 3 4 5 6 | $sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ? AND colour = ?'); $sth->execute(array(150, 'red')); ?> |
Tijdens het ontwikkelen kan je het beste gewoon errors op je scherm weergeven ipv alleen een error log te gebruiken.quote:Hmmm, ja dat kan, ik werk echter met een script die de Errorlog uitleest van Apache2. Dan krijg ik op mijn browserscherm altijd de laatste errors die Apache2 ontdekt. Maar ik weet niet zeker of de Errorlog alle errors die error_reporting(E_ALL) oppikt, ook pakt.
deze functie werkt niet omdat hij in een oneindige lus raakt. Deze manier van directories uitlezen retourneert namelijk in elke directory ook een handle naar zijn parent directory (. en ..) waardoor php van parent naar child directory en vice versa blijft gaan tot hij ergens vast loopt. Daarnaast is het voor grote directories mogelijk dat php crashed omdat hij in een te diepe recursiviteit raakt (of hoe je dat ook zegtquote:Op zondag 11 maart 2007 13:45 schreef beerten het volgende:
Ik wil graag de volledige inhoud van alle bestanden op mijn webserver inlezen in een array.
Dit wil ik gebruiken om een sitemap te maken. De pagina's/directory's worden vervolgens weergegeven op een pagina om ge(de)selecteerd te worden en wat overige opties.
Maar hoe lees ik de volledige inhoud van de root uit en stop deze in een array?
Ik dacht aan het volgende, maar dat werkt mooi niet! Sterker nog, als ik de functie aanroep wordt een bestand ter download aangeboden.
Kan iemand me op weg helpen?
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 | $dirstack=array('C:\\program files\\Apache group\\Apache2\htdocs'); while(sizeof($dirstack)!=0) { $dir=array_shift($dirstack); if ($handle=opendir($dir)) { while(false!==($file=readdir($handle))) { if ($file=='.' || $file=='..') continue; if (is_dir($dir.'\\'.$file)) $dirstack[]=$dir.'\\'.$file; else $files[]=$dir.'\\'.$file; } } } ?> |
Die errorlog zit een file, misschien zou je iets met filemtime() kunnen doen, en dan vergelijken met de huidige datum ofzo ? Ik weet niet of je het echt realtime kan maken, want dan zou je in een constante stream moeten staan toch ? Ik heb zelf een script voor de Apache Errorlog die om de 60 seconden de errorlog uitleest en vervolgens de laatste 20 rijen pakt.quote:Op zondag 11 maart 2007 14:24 schreef mschol het volgende:
bestaat er een programma dat realtime kan refreshen zodra er een melding in bijvoorbeeld je errorlog bij komt (in linux kan je dit doen) echter onder windows zou ik het ook wel handig vinden als ik bijvoorbeeld de laatste 5 meldingen kan zien (in realtime)
volgens mij zoekt ie gewoon een editor die de file gewoon bijwerkt als deze gewijzigd wordt. ConTEXT is een editor die dit doet onder windows (moet je wel eerst minimizen, dan restoren, en dan geeft ie een melding dat de file gewijzigd is). Het is dus niet helemaal gelijk aan tail -f onder linux, maar het werkt welquote:Op zondag 11 maart 2007 14:33 schreef SkaterSam het volgende:
[..]
Die errorlog zit een file, misschien zou je iets met filemtime() kunnen doen, en dan vergelijken met de huidige datum ofzo ? Ik weet niet of je het echt realtime kan maken, want dan zou je in een constante stream moeten staan toch ? Ik heb zelf een script voor de Apache Errorlog die om de 60 seconden de errorlog uitleest en vervolgens de laatste 20 rijen pakt.
ik ben dus eigenlijk opzoek naar een windows equivalent van tail -fquote:Op zondag 11 maart 2007 16:40 schreef Floxxx het volgende:
[..]
volgens mij zoekt ie gewoon een editor die de file gewoon bijwerkt als deze gewijzigd wordt. ConTEXT is een editor die dit doet onder windows (moet je wel eerst minimizen, dan restoren, en dan geeft ie een melding dat de file gewijzigd is). Het is dus niet helemaal gelijk aan tail -f onder linux, maar het werkt wel
1 2 3 | Warning: parsefile(): Failed opening '<a href='http://home.mschol.eu/pagina.php' target='_blank' ><img src='../images/valid-401.gif' alt='' /></a> | <a href='#'>About Us</a> | <a href='#'>Site Map</a> | <a href='#'>Privacy Policy</a> | <a href='http://tweakers.net'>Contact Us</a> | ©2003 Company Name' for inclusion (include_path='.;c:php4pear') in d:wwwanime_argewebtemplatetemplateparser.php on line 29 |
Maar vlak ook de mogelijkheid van Multiviews niet uit.quote:Op zondag 11 maart 2007 12:19 schreef super-muffin het volgende:
er is een truukje voor, er word een regex gebruikt
[ code verwijderd ]
Deze gebruik ik op mijn website.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |