1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function input_dag($dag){ $output = " <select name="dag"> <option value="">dag</option>"; for ( $day = 1; $day <= 31; $day += 1) { if($day == $dag) { $output .= " <option value="$day" selected>$day</option>";} else { $output .= " <option value="$day">$day</option>";} } $output .= " </select>"; return $output; } ?> |
Na hij verkleind is, en je hem niet nodig hebt:quote:Op vrijdag 6 april 2007 12:57 schreef super-muffin het volgende:
Hoe kan ik een bestand voor een bepaalde tijd geupload hebben? Dus iemand upload een foto, word verkleint en krijg die weer voorgeschoteld in de browser, en daarna word de afbeelding van de server verwijderd.
1 2 3 | unlink($filename); ?> |
1 2 3 4 | <voornaam>Hans</voornaam> <achternaam>Anders</achternaam> </persoon> |
Optie 1: http://nl2.php.net/XMLquote:Op vrijdag 6 april 2007 13:20 schreef Geqxon het volgende:
Gelijk nog een vraagje: Ik wil graag een XML achtig bestand parsen, en met eregi gaat dat dus te traag. De opbouw is in de trant van:
[ code verwijderd ]
Op het moment kijk ik lijn voor lijn wat voor data de lijn bevat, maar dat is dus behoorlijk traag. Ik zat zelf te denken aan een preg_match_all op <persoon>(*.)</persoon>, en binnen de array van matches te preg_matchen op <voornaam(*.)</voornaam>. Ik ben alleen totaal geen held als het op regexs en preg_match neer komt, dus heeft iemand misschien een klein duwtje in de goede richting? Alvast bedankt
1 2 3 4 5 | $pslfile = file_get_contents("/files/persoonlijst.psl"); preg_match_all('#<persoon>(.*)</persoon>#Ui',$pslfile, $output); print_r($output); ?> |
1 2 3 4 5 | ---------+--------+-------+-------+ 1 | test | 0 | 5 | 2 | child | 1 | 2 | 3 | child2 | 3 | 4 | |
1 2 3 4 5 6 | COUNT( parent.name ) AS depth FROM nested_menu AS node, nested_menu AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.menu_id ORDER BY node.lft |
1 2 3 4 | Column 'node.name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. Column 'node.lft' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. Column 'node.rgt' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. |
gebruik de s modifier om ervoor te zorgen dat . ook newlines matched. Dat doet ie standaard nietquote:Op vrijdag 6 april 2007 13:44 schreef Geqxon het volgende:
Ik ben al met de XML parser aan de gang gegaan, maar in verband met een database koppeling, en omdat mijn file vrij simpel is, wil ik het het liefst zelf parsen
Ik ga even met optie twee aan de slag, bedankt!
Edit:
[ code verwijderd ]
Dit is waar ik zelf aan zat te denken, alleen vindt hij daar niks op. En ja, het laden van $pslfile gaat prima. Wat doe ik hier eigenlijk fout?
De /s-modifier is voor de punt, die matcht vervolgens ook newlines. Maar ik mag hopen dat er geen ouders zijn geweest die hun kind met een newline in hun voornaam hebben laten registreren op het gemeentehuisquote:Op vrijdag 6 april 2007 14:08 schreef ralfie het volgende:
[..]
gebruik de s modifier om ervoor te zorgen dat . ook newlines matched. Dat doet ie standaard niet![]()
Er is een simpele regel in SQL-land die door MySQL absoluut niet nageleefd wordt maar waar je je waar mogelijk wel aan zou moeten houdenquote:Op vrijdag 6 april 2007 14:01 schreef Swetsenegger het volgende:
mysql -> mssql migratie probleempje.
Ik heb een table:
[ code verwijderd ]
Waarmee je een hierarchisch model kan bouwen.
In mysql betrek je alle nodes in de juiste hierarchische volgorde met de volgende query:
[ code verwijderd ]
In mssql krijg ik daarmee echter de volgende foutmelding(en)
[ code verwijderd ]
En ik ben even volledig blanco hoe ik dat kan oplossen.
Iemand een bijdrage?
1 2 3 | FROM tabel voorbeeld GROUP BY b |
1 2 3 | FROM tabel voorbeeld GROUP BY b, c |
"Mijn kind heet Hans backslash n Anders"quote:Op vrijdag 6 april 2007 14:09 schreef JeRa het volgende:
[..]
De /s-modifier is voor de punt, die matcht vervolgens ook newlines. Maar ik mag hopen dat er geen ouders zijn geweest die hun kind met een newline in hun voornaam hebben laten registreren op het gemeentehuis
Dat zijn delimiters en die mag je zelf kiezenquote:Op vrijdag 6 april 2007 14:17 schreef Geqxon het volgende:
[..]
Nu rijst bij mij weer de vraag: Waarom werkt preg_match_all met hekjes, en preg_match met slashes?
Dit geeft inderdaad geen foutmeldingen meer:quote:Op vrijdag 6 april 2007 14:11 schreef JeRa het volgende:
[..]
Er is een simpele regel in SQL-land die door MySQL absoluut niet nageleefd wordt maar waar je je waar mogelijk wel aan zou moeten houdenen hij luidt:
Bij een GROUP BY moet je alle kolomnamen die je niet in een aggregaatfunctie gebruikt maar wel wilt ophalen noemen.
Dus het volgende gaat fout:
[ code verwijderd ]
En het volgende gaat goed:
[ code verwijderd ]
1 2 3 4 5 6 | COUNT( parent.name ) AS depth FROM nested_menu AS node, nested_menu AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.menu_id,parent.name, node.name,node.lft,node.rgt ORDER BY node.lft |
Je moet niet zomaar alle kolommen in de GROUP BY gooien, als je bepaalde waarden verwacht voor een kolom kun je ze soms beter in een aggregaatfunctie stoppenquote:Op vrijdag 6 april 2007 15:00 schreef Swetsenegger het volgende:
[..]
Dit geeft inderdaad geen foutmeldingen meer:
[ code verwijderd ]
Maar geeft wel mijn child 2 keer terug
En mijn depth gaat niet goed....
Dat vermoeden had ik al :Pquote:Op vrijdag 6 april 2007 15:11 schreef JeRa het volgende:
[..]
Je moet niet zomaar alle kolommen in de GROUP BY gooien
Nou, met deze data:quote:, als je bepaalde waarden verwacht voor een kolom kun je ze soms beter in een aggregaatfunctie stoppen :)
1 2 3 4 | ---------+--------+-------+-------+ 1 | test | 1 | 4 | 2 | child | 2 | 3 | |
1 2 3 | test 1 test 1 4 1 child 2 child 2 3 2 |
1 2 3 4 | test 1 test 1 4 1 child 2 child 2 3 1 child 2 child 2 3 1 |
1 2 3 4 5 6 7 8 9 | (SELECT TOP 1 m.name FROM nested_menu m WHERE n.lft BETWEEN m.left AND m.right ORDER BY m.left DESC) AS parent_name FROM nested_menu AS p INNER JOIN nested_menu AS n ON n.lft BETWEEN p.lft AND p.rgt GROUP BY n.menu_id, n.name, n.lft, n.rgt ORDER BY n.lft |
Ja dat werkt perfect, komt zelfs van mysql websitequote:Op vrijdag 6 april 2007 16:20 schreef SuperRembo het volgende:
Je kunt niet op die manier de naam van de parent er bij krijgen zonder de group te verzieken. Ik vraag me af of dat in MySQL op deze manier wel echt goed werkt.
ga ik proberenquote:In MSSQL kan je de parent er wel met een subselect bij zoeken:
[ code verwijderd ]
Nou, het werkt bij jou. Maar een kolom die niet in een group by en niet in een aggegate staat is niet goed gedefinieerd. De waarde die je terug krijgt kan van allerlei dingen afhangen zoals de indexen op de tabel of zelfs de volgorde waarin de regels in de tabel gezet zijn.quote:Op vrijdag 6 april 2007 16:37 schreef Swetsenegger het volgende:
Ja dat werkt perfect, komt zelfs van mysql website
Hmz, nou ja ik heb dit zoals gezegd van de mysql website bij een uitleg over hierarchische data.quote:Op vrijdag 6 april 2007 16:58 schreef SuperRembo het volgende:
[..]
Nou, het werkt bij jou. Maar een kolom die niet in een group by en niet in een aggegate staat is niet goed gedefinieerd. De waarde die je terug krijgt kan van allerlei dingen afhangen zoals de indexen op de tabel of zelfs de volgorde waarin de regels in de tabel gezet zijn.
Zet je Messenger client aanquote:Op zaterdag 7 april 2007 15:57 schreef JohannesPaulus het volgende:
Wie kan mij helpen? Mijn bod van 25 euro is nog geldig hoor![]()
1 2 3 4 5 6 7 8 9 10 | `id` int(11) NOT NULL auto_increment, `sub_id` int(11) NOT NULL default '0', `cat_id` int(11) NOT NULL default '0', `sort_id` tinyint(4) NOT NULL default '0', `type_id` enum('html','image','rss','php') NOT NULL default 'html', `html` text NOT NULL, KEY `id` (`id`), KEY `sub_id` (`sub_id`,`cat_id`,`sort_id`) ) ENGINE=MyISAM ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 | `id` int(11) NOT NULL auto_increment, `sub_id` int(11) NOT NULL default '0', `cat_id` int(11) NOT NULL default '0', `sort_id` tinyint(4) NOT NULL default '0', `title` varchar(64) NOT NULL default '', `link` varchar(255) NOT NULL default '', `tip` enum('yes','no') NOT NULL default 'no', `image` enum('yes','no') NOT NULL default 'no', `views` int(11) NOT NULL default '0', KEY `id` (`id`), KEY `sub_id` (`sub_id`,`cat_id`,`sort_id`) ) ENGINE=MyISAM ; |
1 |
1 |
1 2 3 4 5 6 | echo"hoi"; //doe wat // Nu pagina opschonen echo"dag"; ?> |
1 2 3 4 5 6 7 8 9 10 11 | ob_start(); echo "hoi"; ob_clean(); echo "dag"; ob_end_flush(); ?> |
Helpt nietquote:Op dinsdag 10 april 2007 18:39 schreef HuHu het volgende:
Je hoort bij HTML altijd (!) quotes te gebruiken rond de attributen, dus zo:
[ code verwijderd ]
Anders gaat het mis bij spaties. En als je de waarde van een PHP variabele in je output wil zetten, dan kun je er beter ook nog { en } omheen zetten.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | { $naam=mysql_result($result,$i,"naam"); $buurt=mysql_result($result,$i,"buurt"); $bericht=mysql_result($result,$i,"bericht"); $datum=mysql_result($result,$i,"datum"); echo " <center> <form action=edit.php method=POST name=edit> <table border=1 bordercolor=black> <tr> <td width=80 VALIGN=top> <center> <input type=text name=naam value={$naam}> |
1 |
Wel de hele post lezen hè ;).quote:Op dinsdag 10 april 2007 18:53 schreef timbastiaansen het volgende:
[..]
Helpt niet ;(
Ik heb het nu zo
[ code verwijderd ]
En dit geeft hetzelfde resultaat als zonder { }
1 2 | GOED: <input type="text" ... |
Als de de " in een string wilt hebben kun je makkelijker gewoon met de ' de echo beginnen. Dus zo:quote:Op dinsdag 10 april 2007 19:04 schreef Geqxon het volgende:
[ code verwijderd ]
Je kunt dit het beste zien als drie delen, <input value=" & $naam & "> , die doormiddel van punten aan elkaar worden gebonden.
1 2 3 | echo '<input type="text" name="naam" value="' . $value . '">'; ?> |
tijdje terug al gelezen (ergens in dit topique) dat enkele quotes niet tot nauwelijks sneller zijn, dus doe gewoon wat je makkelijk vind.quote:Op dinsdag 10 april 2007 19:36 schreef HuHu het volgende:
Een single-quote binnen een string komt met HTML output nauwelijks voor als het goed is. Verder is het sneller en persoonlijk vind ik al die backslashes maar rommelig staan.
Nou weet ik niet wat je totaalplan is met je design maar ik weet wel wat de meeste softwarebouwers doen als ze voor een keuze staan zoals die waar jij nu mee bezig bent: best of both worldsquote:Op dinsdag 10 april 2007 17:47 schreef Chandler het volgende:
@Jera: De tabel HTML heeft als functie om het HTML gedeelte van de links gescheiden te houden, dit waar ik denk dat dit scheelt in de preformance omdat hier gebruik gemaakt wordt van 'TEXT' maar hier ben ik dus niet zeker vandaarom vraag ik het even
Hoewel ik zelf alleen maar single quotes in PHP gebruik (voor zover dat mogelijk is) is dat laatste een slecht argument, keer op keer wijzen benchmarks erop dat het verschil om milliseconden gaat (op duizenden en duizenden echo's). Beter kijk je naar queries, de aanroep daarvan en alle overige functies van PHP (zie bijvoorbeeld het verschil tussen de preg* en de ereg*-functiesquote:Op dinsdag 10 april 2007 19:25 schreef HuHu het volgende:
[..]
Als de de " in een string wilt hebben kun je makkelijker gewoon met de ' de echo beginnen. Dus zo:
[ code verwijderd ]
Sowieso is het gebruik van de ' beter dan de ", omdat de tekst binnen een ' niet nog eens geparsed gaat worden en dus sneller wordt verwerkt.
Hoe invalidate je je cache, en hoe cache je op de eerste plaats? Ik bedoel hoe weet ik dat de specifieke request van dat moment door een browser wordt gedaan die de website in zijn huidige vorm al eens gezien heeft?quote:Op dinsdag 10 april 2007 19:55 schreef JeRa het volgende:
[..]
Nou weet ik niet wat je totaalplan is met je design maar ik weet wel wat de meeste softwarebouwers doen als ze voor een keuze staan zoals die waar jij nu mee bezig bent: best of both worlds
Als ik jou was zou ik je database zo inrichten dat het zo genormaliseerd mogelijk is (wat het gemakkelijk voor je maakt om de contents van een pagina aan te passen via een CMS en je niet in tekstkolommen hoeft te gaan zitten regexen). Vervolgens ga je contents cachenje rendert bij een opvraag van zo'n blok (of pagina) je databaseinhoud naar HTML en slaat die HTML op (in een bestand, in een aparte tabel, etc) zodat je bij toekomstige opvragen niets hoeft te gaan opbouwen in PHP maar gewoon de HTML letterlijk uit de database kunt trekken. Zodra je dan iets aanpast in de database via je CMS ga je je cache 'invalidaten' zoals dat zo mooi heet, waardoor bij de eerst volgende opvraag de HTML opnieuw gerendert wordt.
Hier op FOK! wordt dat vziw ook gedaan, met de trackers op de frontpage bijvoorbeeld. Het scheelt ontzettend qua load als je niet elke keer hoeft te joinen en HTML moet wegschrijven, terwijl je vrijwel niets inlevert op gebruiksgemak voor de beheerder
Cachen is vrij simpel. Je houdt een aparte tabel bij met bijvoorbeeld een tekstuele identifier waarmee je de (unieke) cache identificeert. Het invalidaten kun je doen door zodra er in je CMS iets verandert de cache uit de tabel te gooien. Vervolgens kun je op de pagina waar de cache aangesproken wordt controleren of de cache bestaat, en zo niet: renderen die hap.quote:Op dinsdag 10 april 2007 20:13 schreef Swetsenegger het volgende:
[..]
Hoe invalidate je je cache, en hoe cache je op de eerste plaats? Ik bedoel hoe weet ik dat de specifieke request van dat moment door een browser wordt gedaan die de website in zijn huidige vorm al eens gezien heeft?
Helder, dank jequote:Op dinsdag 10 april 2007 20:17 schreef JeRa het volgende:
[..]
Cachen is vrij simpel. Je houdt een aparte tabel bij met bijvoorbeeld een tekstuele identifier waarmee je de (unieke) cache identificeert. Het invalidaten kun je doen door zodra er in je CMS iets verandert de cache uit de tabel te gooien. Vervolgens kun je op de pagina waar de cache aangesproken wordt controleren of de cache bestaat, en zo niet: renderen die hap.
Je laatste vraag is een lastigere, maar dat bewerkstellig je door specificatieje moet specificeren óf iets wel gecached mag worden aan de hand van kennis over de inhoud. Een stukje HTML met daarin de huidige tijd moet je natuurlijk niet gaan cachen. Een cache kun je dus limiteren over een beperkt stuk van je website, maar ook in zijn geheel. Je zou bijvoorbeeld als unieke cache identifier de aanroep van de browser kunnen nemen (de URL?). Daarmee moet je natuurlijk oppassen dat je niet teveel meeneemt, anders kan een lolbroek je hele cache tabel volstoppen met nutteloze caches.
Verder is het niet beperkt tot één browser/client maar moet je caches voor iedereen beschikbaar makenzoals ik al als voorbeeld aanhaalde, de trackers op de frontpage hier zijn voor iedereen hetzelfde en hoeven pas geüpdatet te worden zodra een nieuwsposter een nieuw bericht plaatst.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |