1 2 3 4 5 6 7 8 9 10 11 12 13 | function writeHtaccess($file, $content, $permission) { if(file_exists($file) || is_writable($file)) { $htaccess = fopen($file, $permission) or die ("kan bestand niet openen"); fwrite($file, $concent); fclose($htaccess); } else { echo 'het bestand <strong>' . $file . '</strong> kan niet gevonden of bewerkt worden!'; } } writeHtaccess(".htaccess", "boeh", "w+"); ?> |
Bedankt! En dan nu mijn tweede vraag:quote:Op woensdag 7 maart 2007 10:40 schreef super-muffin het volgende:
Dat kan met htaccess:
[ code verwijderd ]
Zo iets.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $expires = $date - time(); if ($expires > 0){ $exhours = str_pad(floor($expires / 3600), 2, "0", STR_PAD_LEFT); $expires = $expires % 3600; $exminutes = str_pad(floor($expires / 60), 2, "0", STR_PAD_LEFT); $expires = $expires % 60; $exseconds = str_pad($expires, 2, "0", STR_PAD_LEFT); $expires = $exhours.":".$exminutes.":".$exseconds; } else { $expires = "<b>Expired</b>"; } ?> |
Newlines verschillen per OSquote:Op dinsdag 6 maart 2007 17:32 schreef ViPeRII het volgende:
@swetsenecker...
Dus ik moet filteren op rn ?
En wat bedoel je onder windows? De post data is onder een windows client anders dan onder een linux client of bedoel je server sided?
makkelijkste is als je explode op "\r\n", dan worden al die newlines meteen gefiltert uit je input,heb je nergens meer last van, bijvquote:Op dinsdag 6 maart 2007 17:32 schreef ViPeRII het volgende:
@swetsenecker...
Dus ik moet filteren op rn ?
En wat bedoel je onder windows? De post data is onder een windows client anders dan onder een linux client of bedoel je server sided?
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 | function make_menu_data_2($data) { $menus = explode("\r\n", $data); $out="var MENU_ITEMS = [\n"; foreach($menus as $x) { $out.="['"; $y=substr($x,1); switch($x[0]) { case '*': $out.="$y', null, null "; break; case '+': $z=str_replace(' ','',$y); $out.="$y', 'page=$z' "; break; case '-': $z=str_replace(' ','',$y); $out.="$y', 'page=$z' ],\n"; break; default: $z=str_replace(' ','',$x); $out.="$x', 'page=$z' "; } $out.="],\n"; } return "$out\n];"; } ?> |
Probleem zelf opgelost. Stond een haakje verkeerd.quote:Op dinsdag 6 maart 2007 17:20 schreef h.henkie het volgende:
Hoi
Ik heb het volgende. Op deze pagina heb ik een upload scriptje staan met de volgende code:
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | u.name AS author, COUNT( p.id ) AS cntPosts, ( SELECT lastUpdate FROM r2_posts WHERE topicID = t.id ORDER BY lastUpdate LIMIT 0 , 1 ) AS lastUpdate FROM r2_topics t LEFT JOIN r2_posts p ON p.topicID = t.id LEFT JOIN si_users u ON u.id = t.userID WHERE t.deleted =0 AND t.forumID =2 GROUP BY t.id ORDER BY lastUpdate |
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:quote:Op vrijdag 9 maart 2007 17:17 schreef splendor het volgende:
Ik zal de hele query even geven.. het probleem is namelijk dat ik al een JOIN erin heb zitten mét een GROUP BY.. dus nóg een join zou dan zijn eigen GROUP BY moeten hebben
[ code verwijderd ]
Hij moet dus behalve lastUpdate nog een koppeling maken naar tabel users aan de hand van posts.userID = users.id en daar dus de naam van de persoon die de laatste post deed ophalen.
quote:A scalar subquery is a simple operand, and you can use it almost anywhere a single column value or literal is legal, and you can expect it to have those characteristics that all operands have: a data type, a length, an indication whether it can be NULL, and so on.
Bron: mysql.com (http://dev.mysql.com/doc/refman/5.0/en/scalar-subqueries.html)
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 | class templateParser { var $output; function templateParser($templateFile='default_template.htm') { (file_exists($templateFile))?$this->output=file_get_contents($templateFile):die('Error:Template file '.$templateFile.' not found'); } function parseTemplate($tags=array()) { if(count($tags)>0) { foreach($tags as $tag=>$data) { $data=(file_exists($data))?$this->parseFile($data):$data; $this->output=str_replace('{'.$tag.'}',$data,$this->output); } } else { die('Error: No tags were provided for replacement'); } } function parseFile($file) { ob_start(); include($file); $content=ob_get_contents(); ob_end_clean(); return $content; } function display() { return $this->output; } } ?> |
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 | // include the class require_once('templateparser.php'); require_once('../includes/functions.inc'); $con = mysql_connect($cfg['DB_host'],$cfg['DB_user'],$cfg['DB_pass']) or die(mysql_error()); mysql_select_db($cfg['DB_DB'],$con) or die(mysql_error()); // instantiate a new template Parser object $tp=&new templateParser('index.html'); // define parameters for the class $tags=array( 'title'=>'You are seeing the template parser class in action!', 'sitename'=>$_SERVER['HTTP_HOST'], 'utility'=>'utility.php', 'maincontent'=>'content.php', 'footer'=>'footer.php', 'navGlobalbar'=>'navGlobalBar.php', 'navSubBar'=>'navSubBar.php', 'SiteInfo'=>'<a href="#">About Us</a> | <a href="#">Site Map</a> | <a href="#">Privacy Policy</a> | <a href="#">Contact Us</a> | ©2003 Company Name '); // parse template file $tp->parseTemplate($tags); // display generated page echo $tp->display(); ?> |
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.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |