Een wijze keuze imo
Mwua dat valt wel mee. Smarty 'compiled' je tpl naar php. In productie zet je de controle of de tpl gewijzigd is uit en dan is je enigste overhead nog de tussenliggende array waar smarty intern alles in opslaat. Ik betwijfel of dit een meetbare overhead oplevert omdat ook in html tpl's je ergens je ruwe data moet laten voor je view.Cartman! schreef op maandag 09 november 2009 @ 10:09:
Het gebruik van smarty begrijp ik ook niet helemaal, in feite doe je precies hetzelfde als 'normaal' alleen dan met een andere syntax die ervoor zorgt dat je nog een extra vertaalslag nodig hebt (=slomer).
Maar waarom zou je uberhaupt een dergelijke engine gebruiken? Je moet er alleen nog weer een extra syntax voor leren terwijl het je eigenlijk niet echt voordelen oplevert naar mijn idee. Ik ben dus benieuwd wat je grote voordeel van smarty is dus.
Verwijderd
Naast de scheiding van markup en logica (wat imo zoizo veel overzichtelijker is), zitten er ook sterke server-side caching functionaliteiten in. Ik heb smarty nog maar een paar keer gebruikt, maar ik vond het erg prettig werken.
Ik werk volgens het MVC-principe dus dat argument houdt geen stand dan, logica in views is erg...logisch. En caching handelt een los cache-object af, dat laat ik niet aan de view zelf over 
offtopic:
je bedoelde vast sowieso trouwens
je bedoelde vast sowieso trouwens
Verwijderd schreef op maandag 09 november 2009 @ 11:57:
Naast de scheiding van markup en logica (wat imo zoizo veel overzichtelijker is)
.oisyn schreef op maandag 09 november 2009 @ 00:54:
Ah, je bent er zoéén die het principe van scheiding van business layer en presentation layer onjuist interpreteert als zijnde dat de presentatielaag geen code mag bevatten?
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.
Het 'rare' aan de 'logica' dat je view geen code mag bevatten is dat je vervolgens de logica er wel in gaat hangen maar dan volgens een andere syntax wat in feite op t zelfde neerkomt.
Inderdaad.
gejat van Wikipedia.
zoals ik het zou doen. Wat is het grote voordeel? PHP ís een template-engine...Nog leuker is het wanneer je die JSTL-achtige syntax van Joomla gaat gebruiken
Smarty:
1
2
3
4
5
6
7
8
9
10
11
12
13
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html> <head> <title>{$title_text|escape}</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> {* This is a little comment that won't be visible in the HTML source *} {$body_html} </body><!-- this is a little comment that will be seen in the HTML source --> </html> |
gejat van Wikipedia.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?php $title_text = escape($title_text); //natte-vinger, nooit met smarty gewerkt ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html> <head> <title><?=$title_text ?></title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <?php $body_html ?> </body><!-- this is a little comment that will be seen in the HTML source --> </html> |
zoals ik het zou doen. Wat is het grote voordeel? PHP ís een template-engine...Nog leuker is het wanneer je die JSTL-achtige syntax van Joomla gaat gebruiken

Mwah, ik zou twee dingen toch nog wel even aanpassen.
1: De escape gewoon op de plek zelf neerzetten. Dat maakt het een stuk duidelijker en je introduceert niet onnodige variabelen. Gewoon <?=escape($title) ?>
2: Geen html in je variabelen gaan zetten. Het vullen van $body_html betekent dat je buiten je view blijkbaar ook nog html code aan het bouwen bent.
1: De escape gewoon op de plek zelf neerzetten. Dat maakt het een stuk duidelijker en je introduceert niet onnodige variabelen. Gewoon <?=escape($title) ?>
2: Geen html in je variabelen gaan zetten. Het vullen van $body_html betekent dat je buiten je view blijkbaar ook nog html code aan het bouwen bent.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Er kan natuurlijk best html in $body_html staan, denk aan content uit een database waarbij gebruik gemaakt is van een editor als FCKJanoz schreef op maandag 09 november 2009 @ 14:09:
Mwah, ik zou twee dingen toch nog wel even aanpassen.
1: De escape gewoon op de plek zelf neerzetten. Dat maakt het een stuk duidelijker en je introduceert niet onnodige variabelen. Gewoon <?=escape($title) ?>
2: Geen html in je variabelen gaan zetten. Het vullen van $body_html betekent dat je buiten je view blijkbaar ook nog html code aan het bouwen bent.
Bedankt voor deze informatie, Ik ben 3e jaars student op HBO Informatica en dit soort dingen is ons nu nogsteeds nooit geleerd.Janoz schreef op woensdag 30 september 2009 @ 13:31:
Zoals een meetwaarde geen integer is, een getal geen datum is, een datum geen tekst is en een tekst geen array van bytes is, is geld geen floating point. Het is niet het type dat bij de grootheid hoort vanwege de eigenschappen.
Een meetwaarde (afstand, temperatuur, hoeveelheid neerslag) is bijvoorbeeld een floating point hoeveelheid (Wanneer er een mililiter water verdampt is dat bij honderd liter water compleet niet relevant, maar bij 2 mililiter heeft het een behoorlijke impact). Kern van de floating point is dat het een heel groot bereik heeft, maar daarbij concessies doet op significantie. Gelukkig is dat binnen de natuurkunde een bekend begrip en kan daar keurig mee gewerkt worden.
Bij een geldbedrag daarintegen is het wel degelijk van belang dat een mutatie van een cent altijd het saldo van een rekening aanpast, ook al loopt het saldo tot over de triljarden. Een geldbedrag is daarom dan ook een perfect voorbeeld van een fixedpoint getal.
Tenzij je daarvoor ook views gebruikt. Ik gebruik een layout, te zien als een view:Janoz schreef op maandag 09 november 2009 @ 14:09:
2: Geen html in je variabelen gaan zetten. Het vullen van $body_html betekent dat je buiten je view blijkbaar ook nog html code aan het bouwen bent.
PHP:
Ergens in je flow koppel je dan je controller aan een view die (een deel van) je content rendert (idee komt uit het ZF btw).1
2
3
4
5
6
7
8
| <html> <body> <div id="container"> <div id="header"><?= $this->partial('header.phtml')?></div> <div id="content"><?= $this->content?></div> </div> </body> </html> |
PHP:
1
2
| <h1><?= $this->article->getTitle()?></h1> <p><?= $this->article->getIntro()?></p> |
Het kan, maar het is wel het uitzonderlijke geval. Normaliter houdt de scheiding van view en logica ook in dat je in je logica geen rekening hoeft te houden met het medium waarop je output. Dat is dan gelijk ook weer precies de reden waarom de escape wel in het template thuishoort. Die zorgt er voor dat je tekst context afhankelijk omgezet kan worden in de view.Tiemez schreef op maandag 09 november 2009 @ 14:14:
[...]
Er kan natuurlijk best html in $body_html staan, denk aan content uit een database waarbij gebruik gemaakt is van een editor als FCK
Klopt. Maar dan zou body_html geen variabele zijn die je uit je business laag krijgt en die indruk werd wel een beetje gewekt (of laat ik het beter zeggen: dat de body variabele een enkel binnen de view context bekend stukje data is, is niet echt uit het voorbeeld te halen)mithras schreef op maandag 09 november 2009 @ 14:18:
Tenzij je daarvoor ook views gebruikt. Ik gebruik een layout, te zien als een view:
PHP:Ergens in je flow koppel je dan je controller aan een view die (een deel van) je content rendert (idee komt uit het ZF btw).
1 2 3 4 5 6 7 8 <html> <body> <div id="container"> <div id="header"><?= $this->partial('header.phtml')?></div> <div id="content"><?= $this->content?></div> </div> </body> </html>
PHP:
1 2 <h1><?= $this->article->getTitle()?></h1> <p><?= $this->article->getIntro()?></p>
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
1: in sommige gevallen mee eens. Vaak doe ik iets complexere presentatie-berekeningen/bewerkingen zoals ik het daar laat zien: bovenin. Onderin komt dan alleen maar de echo en de for-loop.Janoz schreef op maandag 09 november 2009 @ 14:09:
Mwah, ik zou twee dingen toch nog wel even aanpassen.
1: De escape gewoon op de plek zelf neerzetten. Dat maakt het een stuk duidelijker en je introduceert niet onnodige variabelen. Gewoon <?=escape($title) ?>
2: Geen html in je variabelen gaan zetten. Het vullen van $body_html betekent dat je buiten je view blijkbaar ook nog html code aan het bouwen bent.
2: zoals gezegd: voorbeeld gejat van wikipedia
Hogeschool Rotterdam ofzo?br men schreef op maandag 09 november 2009 @ 14:16:
[...]
Bedankt voor deze informatie, Ik ben 3e jaars student op HBO Informatica en dit soort dingen is ons nu nogsteeds nooit geleerd.

Sorry, dat is het nadeel van kleine voorbeeldjes. Maar dat is toch net zo erg bij de smarty-code als bij de php-code? Het ging mij om het (gebrek aan) verschil tussen de 2 talenJanoz schreef op maandag 09 november 2009 @ 14:37:
[...]
Klopt. Maar dan zou body_html geen variabele zijn die je uit je business laag krijgt en die indruk werd wel een beetje gewekt (of laat ik het beter zeggen: dat de body variabele een enkel binnen de view context bekend stukje data is, is niet echt uit het voorbeeld te halen)
En het zou natuurlijk een template header/footer kunnen zijn, waar een ander template de body_html vult

Zelf studeer ik ook op de HRO. Weliswaar zit ik bij Technische Informatica, waar wel iets andere docenten lopen, maar ik heb toch wel echt duidelijk te horen gekregen hoe je correct types moet gebruiken hoor. Ik weet niet meer wanneer, maar het zal maximaal de tweede les geweest zijnMBV schreef op maandag 09 november 2009 @ 15:05:
[...]
Hogeschool Rotterdam ofzo?Op de TH Rijswijk is het correct gebruik van types toch echt wel meerdere keren aan bod geweest.
[...]
Om het ontopic te houden:
Hier de code die ik van een klasgenoot kreeg (lees: pseudocode)
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| public class Klas { private boolean running; public Klas() { running = true; //Doe een hoop initialisaties while(running) { //voer de logica van de code uit. } } public void stopMethode() { running = false; } } |
Waarom werkt dit nou niet zoals het bedoeld is
When you think you’ve succeeded / but something’s missing / means you have been defeated / by greed, your weakness.
Zo doe ik dat ook vaak. Wat is daar dan fout aan? Ik zet er voor de zekerheid nog wel een een mutex omheen, maar in principe hoeft dat niet vziw.icyx schreef op maandag 09 november 2009 @ 19:56:
Hier de code die ik van een klasgenoot kreeg (lees: pseudocode)
Waarom werkt dit nou niet zoals het bedoeld is
[ Voor 14% gewijzigd door Zoijar op 09-11-2009 20:02 ]
Misschien omdat de while in de constructor staat?
edit: lijkt me overigens wel dat dit dan is om iets van threading te regelen
edit: lijkt me overigens wel dat dit dan is om iets van threading te regelen
[ Voor 44% gewijzigd door Daspeed op 09-11-2009 20:06 . Reden: toevoeging ]
Oh, daar keek ik overheen
In veel talen is het idd geen goed idee om met partially constructed objects te gaan werken...
[ Voor 62% gewijzigd door Zoijar op 09-11-2009 20:09 ]
Het is inderdaad omdat het in een constructor staat. Laat ik de boel iets meer uitleggen.
Dit object bevatte best wel wat code, en moest het een en ander aansturen + uitlezen van een stukje randhardware. Deze code moest dan weer bepaalde data hiervan doorgeven aan andere objecten, en moest zelf ook dingen 'ontvangen'. Omdat het object nooit helemaal 'gemaakt' word, is het doorgeven van pointers enzo ook een beetje lastig. Hij kreeg dus allemaal null pointer exceptions enzo. Goed, dit zijn een beetje de hoofdlijnen van de achtergrond
Dit object bevatte best wel wat code, en moest het een en ander aansturen + uitlezen van een stukje randhardware. Deze code moest dan weer bepaalde data hiervan doorgeven aan andere objecten, en moest zelf ook dingen 'ontvangen'. Omdat het object nooit helemaal 'gemaakt' word, is het doorgeven van pointers enzo ook een beetje lastig. Hij kreeg dus allemaal null pointer exceptions enzo. Goed, dit zijn een beetje de hoofdlijnen van de achtergrond
When you think you’ve succeeded / but something’s missing / means you have been defeated / by greed, your weakness.
Ook zou ik je running variabele maar synchronizen of transient maken, anders gaat het JMM het je nogal lastig maken.
'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'
Ach, als het allemaal maar 1 thread betreft boeit dat allemaal niet zo veel. In principe word die boolean alleen veranderd als het programma afsluit -> dan gaat de JVM sowieso dood, dus haalt het weinig uit mocht het fout gaan (wat al haast niet kan in zijn situatie).Nick_S schreef op maandag 09 november 2009 @ 20:49:
Ook zou ik je running variabele maar synchronizen of transient maken, anders gaat het JMM het je nogal lastig maken.
When you think you’ve succeeded / but something’s missing / means you have been defeated / by greed, your weakness.
Toch nog even terugkomen op Smarty. 
Een voorbeeldje van het printen van een resultset in een table met een variabel aantal kolommen.
Waarbij je in de view iets anders wilt laten zien als de resultset leeg is (je kunt erover discussieren of dit in de business logic moet). En de laatste kolom moet een class="last" krijgen om met CSS iets te kunnen doen.
De Smarty code vind ik er netter uitzien. Zeker de if om de class="last" toe te kunnen voegen is in Smarty beter leesbaar dan de PHP template.
Daarnaast kun je met Smarty front-enders templates laten bouwen, zonder dat de front-ender iets in PHP kan doen.
Een voorbeeldje van het printen van een resultset in een table met een variabel aantal kolommen.
Waarbij je in de view iets anders wilt laten zien als de resultset leeg is (je kunt erover discussieren of dit in de business logic moet). En de laatste kolom moet een class="last" krijgen om met CSS iets te kunnen doen.
PHP: template.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| <table> <? if (count($resultset) > 0): ?> <? foreach($resultset as $row): ?> <tr> <? foreach($row as $key => $column): ?> <td<? if($key == $this->lastArrayKey($row)): ?> class="last"<? endif ?>> <?= htmlspecialchars($column) ?> </td> <? endforeach ?> </tr> <? endforeach ?> <? else: ?> <tr> <td>Geen resultaten</td> </tr> <? endif ?> </table> |
Smarty: template.tpl
Jammer van de highlighting, in je editor of IDE heb je natuurlijk wel highlighting.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <table> {foreach from=$resultset item=row} <tr> {foreach from=$row item=column name=td} <td{if $smarty.foreach.td.last} class="last"{/if}> {$column|htmlspecialchars} </td> {/foreach} </tr> {foreachelse} <tr> <td>Geen resultaten</td> </tr> {/foreach} </table> |
De Smarty code vind ik er netter uitzien. Zeker de if om de class="last" toe te kunnen voegen is in Smarty beter leesbaar dan de PHP template.
Daarnaast kun je met Smarty front-enders templates laten bouwen, zonder dat de front-ender iets in PHP kan doen.
Valt imho niet over te discussiëren. Businesslogic levert een lijst op. Het is vervolgens aan de view hoe hij daarin het verschil aangeeft of de controller die een andere view aanwijst.orf schreef op maandag 09 november 2009 @ 21:52:
Waarbij je in de view iets anders wilt laten zien als de resultset leeg is (je kunt erover discussieren of dit in de business logic moet).
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Maar dat was nou juist niet mijn punt.Janoz schreef op maandag 09 november 2009 @ 22:14:
[...]
Valt imho niet over te discussiëren. Businesslogic levert een lijst op. Het is vervolgens aan de view hoe hij daarin het verschil aangeeft of de controller die een andere view aanwijst.
Vergeten in een aparte thread te startenicyx schreef op maandag 09 november 2009 @ 19:56:
[...]
Waarom werkt dit nou niet zoals het bedoeld is
Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.
Het punt is meer dat de 'buitenwereld' nooit de thread kan stoppen, want hij heeft geen object om mee te praten (of wel als je mazzel hebt en de VM de referentie naar het object al in de variabele heeft opgeslagen voordat hij de ctor aanroept
)
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.
Ja, natuurlijk, maar het is ook te doen door de code niet in de ctor te runnen. Het ging uiteraard om de code zoals ie er stond, en niet nadat er allemaal aanpassingen aan gemaakt zijn
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.
Mja, blijft een nogal subjectieve kwestie zo. De enige reden dat je het nu gebruikt omdat je dat er leuker uit vind zien? Dat is niet echt een goede reden om het te gebruiken, vind ik.orf schreef op maandag 09 november 2009 @ 21:52:
De Smarty code vind ik er netter uitzien. Zeker de if om de class="last" toe te kunnen voegen is in Smarty beter leesbaar dan de PHP template.
Daarnaast kun je met Smarty front-enders templates laten bouwen, zonder dat de front-ender iets in PHP kan doen.
Ik heb in het verleden ook Smarty gebruikt, maar dat had meer te maken met het feit dat ik op dat moment een bepaalde structuur miste als het ging om 'views' (er was niet echt sprake van views omdat ik niet volgens het MVC-principe werkte). Tegenwoordig is die structuur er wel en is Smarty in zekere zin overbodig (de caching van Smarty gebruikte ik sowieso niet), voor mij. Als je een IDE hebt met goede code highlighting kan het vast iets duidelijker zijn in bepaalde situaties, maar dat is in mijn ogen een minimaal verschil. Het PHP-alternatief is in ieder geval niet onduidelijk.
Dat is niet de reden en dat zie je in mijn stukje ook niet staan. Ik zeg dat het beter leesbaar is. Dat vind ik namelijk wel een goed argument.De enige reden dat je het nu gebruikt omdat je dat er leuker uit vind zien? Dat is niet echt een goede reden om het te gebruiken, vind ik.
Ik gebruikte Smarty vroeger ook als template engine zonder MVC. Al weer geruime tijd maken wij als bedrijf gebruik van Zend Framework mét Smarty. Smarty wordt gebruikt voor de view. Ook wij gebruiken geen caching binnen Smarty.
Je kunt het als onderdeel van je coding standards / conventies zien om wel of niet Smarty te gebruiken. Ik word alleen soms een beetje moe van het Smarty bashen.
Je kunt dit ook iets nuanceren. Je kunt, naast de splitsing tussen business en presentatie, de presentatielaag weer verder opsplitsen, waarbij je een scheiding aanbrengt tussen het gedrag en het gezicht van de presentatielaag. Dit zou je bijvoorbeeld kunnen doen met Apache Wicket; hiermee kun je het gezicht van je presentatielaag onderbrengen in (X)HTML en het gedrag in Java..oisyn schreef op maandag 09 november 2009 @ 00:54:
Ah, je bent er zoéén die het principe van scheiding van business layer en presentation layer onjuist interpreteert als zijnde dat de presentatielaag geen code mag bevatten?
Op die manier kun je een scheiding aanbrengen tussen markup en presentatie-logica (binnen je presentatielaag). Dit is met name in grote projecten een voordeel, waar bepaalde rollen gescheiden zijn.
Bovenstaande constructie heeft uiteraard, zoals je al aangeeft, helemaal niets te maken met de scheiding tussen business en presentatie. Maar het één sluit het ander niet uit.
Maak je het hieerdoor niet extra extra moeilijk?NLxAROSA schreef op dinsdag 10 november 2009 @ 08:41:
[...]
Je kunt dit ook iets nuanceren. Je kunt, naast de splitsing tussen business en presentatie, de presentatielaag weer verder opsplitsen, waarbij je een scheiding aanbrengt tussen het gedrag en het gezicht van de presentatielaag. Dit zou je bijvoorbeeld kunnen doen met Apache Wicket; hiermee kun je het gezicht van je presentatielaag onderbrengen in (X)HTML en het gedrag in Java.
Op die manier kun je een scheiding aanbrengen tussen markup en presentatie-logica (binnen je presentatielaag). Dit is met name in grote projecten een voordeel, waar bepaalde rollen gescheiden zijn.
Bovenstaande constructie heeft uiteraard, zoals je al aangeeft, helemaal niets te maken met de scheiding tussen business en presentatie. Maar het één sluit het ander niet uit.
Ligt eraan wat je aan het realiseren bent, maar met name in grote projecten met complexe user interfaces levert dit juist een voordeel op, bijvoorbeeld doordat interactie ontwerpers zich bezig kunnen houden met hoe e.e.a. eruitziet terwijl programmeurs zich bezig kunnen houden met het gedrag. Door de zuivere scheiding kunnen ze dat onafhankelijk van elkaar doen en is integratie van beide disciplines erg eenvoudig. Met name bij grotere projecten zijn de disciplines programmeren en interactie ontwerp gescheiden (en vaak ook om goede redenen).Webgnome schreef op dinsdag 10 november 2009 @ 08:59:
[...]
Maak je het hieerdoor niet extra extra moeilijk?
Voor kleinere, simpele projecten is die noodzaak er uiteraard minder (en kan het soms beter zijn dit juist helemaal niet te doen). Maar het voorbeeld was meer bedoeld om aan te geven dat het één het ander niet per definitie uitsluit. Je kunt best de code van je markup scheiden binnen je presentatielaag zonder dit te verwarren met de scheiding tussen presentatie en business lagen. Of dit voor jouw project nuttig en/of handig is, moet je uiteraard zelf bepalen.
Dat is niet het punt. Als je een tabelletje wil genereren dan zul je een loop structuur moeten gebruiken. Of je daar nou een speciale syntax voor gebruikt die je template systeem kent of gewoon wat PHP code, het blijft logica in de presentatielaag, waarvan het bovendien geheel logisch is dat het daar staat.NLxAROSA schreef op dinsdag 10 november 2009 @ 08:41:
Je kunt dit ook iets nuanceren. Je kunt, naast de splitsing tussen business en presentatie, de presentatielaag weer verder opsplitsen, waarbij je een scheiding aanbrengt tussen het gedrag en het gezicht van de presentatielaag.
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.
Ik geloof dat we weer eens met z'n allen langs elkaar heen aan het praten zijn
Ik kan me best voorstellen dat smarty met loops etc betere mogelijkheden biedt dan PHP alleen, en als het toch al vertaald wordt naar PHP, maakt het geen bal uit. Ik vind het voorlopig niet de moeite waard om nóg een taal te leren.
Het wordt dan natuurlijk allemaal naar HTML vertaald, en je zou kunnen vinden dat het geen bal uit maakt. Maar door alles (qua UI logica) in Smarty te doen heb je meteen een perfecte scheiding. Tussen View en de rest.MBV schreef op dinsdag 10 november 2009 @ 11:30:
Ik geloof dat we weer eens met z'n allen langs elkaar heen aan het praten zijnIk kan me best voorstellen dat smarty met loops etc betere mogelijkheden biedt dan PHP alleen, en als het toch al vertaald wordt naar PHP, maakt het geen bal uit. Ik vind het voorlopig niet de moeite waard om nóg een taal te leren.
Ampera-e (60kWh) -> (66kWh)
En als je een beetje slim bent zorg je dat je allerlei functies maakt die je in je view kan gebruiken. Voorbeeldje:MBV schreef op dinsdag 10 november 2009 @ 11:30:
Ik geloof dat we weer eens met z'n allen langs elkaar heen aan het praten zijnIk kan me best voorstellen dat smarty met loops etc betere mogelijkheden biedt dan PHP alleen, en als het toch al vertaald wordt naar PHP, maakt het geen bal uit. Ik vind het voorlopig niet de moeite waard om nóg een taal te leren.
PHP:
Zo moeilijk is het niet en alle functionaliteiten van Smarty kan je prima zelf implementeren (met een zeer kleine moeite). Het enige verschil is het chainen van smarty vs het groeperen van php ("$var|func1|func2" vs "func2(func1($var))" ).1
2
3
4
5
6
7
8
9
10
| <table> <? foreach ($this->list as $item):?> <? $class = $this->cycle(array('odd', 'even'))->next()?> <? $class .= ($this->isLast($item, $this->list)) ? ' last' : null; <tr class="<?= $class?>"> <td><?= $item->name?></td> <td><?= $item->date?></td> </tr> <? endforeach;?> </table> |
Imho dus een beetje overrated om een tool te gebruiken die je prima kan missen als je een juist framework gebruikt. Ik kies liever voor een goed framework zonder extra tools dan een minder goed framework en (de noodzaak om) externe tools (zoals smarty) te gebruiken
/edit: de andere kant is dan ook wel waar: als je geen framework of toolkit oid gebruikt, kan je natuurlijk wel wat losse dingetjes inzetten om je werk te kunnen doen. Maar echt handig lijkt me dat niet
[ Voor 7% gewijzigd door mithras op 10-11-2009 11:56 ]
Voor dingen als func2(func1($var)) kun je eventueel ook gewoon een view helper maken natuurlijk
Een extra laag die iedereen moet leren om precies hetzelfde te bereiken wat je "native" even snel kunt schrijven begrijp ik nog steeds niet met de argumenten die genoemd zijn.
En dát klopt dan weer niet: je kan niet alles (handig) in smarty doen, je zal vaak een PHP-functie nodig hebben ergens voor. Die hoort óók in je View, maar niet in Smarty. Je smarty-template is dus onderdeel van de View, niet de hele View.!null schreef op dinsdag 10 november 2009 @ 11:39:
[...]
Het wordt dan natuurlijk allemaal naar HTML vertaald, en je zou kunnen vinden dat het geen bal uit maakt. Maar door alles (qua UI logica) in Smarty te doen heb je meteen een perfecte scheiding. Tussen View en de rest.
Maar waarom zou ik het wiel opnieuw willen uitvinden?mithras schreef op dinsdag 10 november 2009 @ 11:46:
[...]
En als je een beetje slim bent zorg je dat je allerlei functies maakt die je in je view kan gebruiken. Voorbeeldje:
[knip]
Zo moeilijk is het niet en alle functionaliteiten van Smarty kan je prima zelf implementeren (met een zeer kleine moeite). Het enige verschil is het chainen van smarty vs het groeperen van php ("$var|func1|func2" vs "func2(func1($var))" ).
Dan kies jij lekker voor .NET, dan doe je alles zoals ome Bill het wil. Ik kies liever voor een systeem als Java, waar je zelf kan kiezen wat je doet.Imho dus een beetje overrated om een tool te gebruiken die je prima kan missen als je een juist framework gebruikt. Ik kies liever voor een goed framework zonder extra tools dan een minder goed framework en (de noodzaak om) externe tools (zoals smarty) te gebruiken
Het voordeel voor Smarty in PHP is dat je een taal afspreekt voor je templates. Als een designer weet hoe Smarty werkt, kan hij dat bij elk bedrijf gebruiken dat Smarty gebruikt.
Hangt af van de schaal. Je hebt altijd een learning curve: je moet eerst leren met de tool te werken. Als ik mijn eigen website in elkaar zet, in 2 weken tijd, zal ik geen smarty willen leren: dat duurt een halve week en levert een dag op o.i.d. (Smarty is misschien een slecht voorbeeld wat dat betreft, meer van toepassing op O/R-mappers etc)./edit: de andere kant is dan ook wel waar: als je geen framework of toolkit oid gebruikt, kan je natuurlijk wel wat losse dingetjes inzetten om je werk te kunnen doen. Maar echt handig lijkt me dat niet
Wat is het grootste nut van design patterns? Dat zijn dingen die iedereen zodra hij ze nodig heeft, vanzelf op bijna dezelfde manier implementeert. Heeft toch geen nut om die dingen vast te leggen?Cartman! schreef op dinsdag 10 november 2009 @ 12:03:
Voor dingen als func2(func1($var)) kun je eventueel ook gewoon een view helper maken natuurlijkEen extra laag die iedereen moet leren om precies hetzelfde te bereiken wat je "native" even snel kunt schrijven begrijp ik nog steeds niet met de argumenten die genoemd zijn.
spoiler:
Je creëert een vocabulaire waarbij iedereen weet waar je het over hebt, zelfde geldt voor smarty.





Slechte programmeervoorbeelden graag
[ Voor 5% gewijzigd door MBV op 10-11-2009 12:15 ]
Arghpfffwtf.
Summary: selecteer iets dat als resultaat leaguename___1337 teruggeeft, en extract daar de league name en het ID weer uit dmv substring operaties.
Ik noem mezelf verre van bekend met SQL, maar dit?
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| SELECT -- meer zooi SUBSTRING(leagueidandname, 0, CHARINDEX('___', leagueidandname)) AS leaguename, SUBSTRING(leagueidandname, CHARINDEX('___', leagueidandname) + 3, len(leagueidandname)) AS leagueid FROM dattum -- stuk of wat joins LEFT JOIN ( SELECT RTRIM(league.name) + '___' + CONVERT(varchar, seasonleague.id) AS leagueidandname, FROM dittum AS leagueplayerhistory -- 9 joins ) leaguename ON leaguename.leagueplayerhistoryid = playerhistory.id -- de rest |
Summary: selecteer iets dat als resultaat leaguename___1337 teruggeeft, en extract daar de league name en het ID weer uit dmv substring operaties.
Ik noem mezelf verre van bekend met SQL, maar dit?
Vandaag werd een applicatie afgestoft die onbekend was. Lag in het management gevoelig om hem zomaar uit te zetten.
Moest opeens geupdate worden, paniek paniek.
Ik noem op :
- Classic ASP, in een omgeving die al jaren geleden gemigreerd is naar .Net2.0 later met 3.5 erbij.
- Procedureeel geprogrammeerd.
- Accountnaam = 'admin'
- Password = 'password'
- Geen limit op SQL queries
- Select met wildcards gebruiken.
- Gebruik van een ACCESS Database, waarvan we op elke machine in het cluster een lokale db hebben staan. Thank god dat het alleen lezen is uit de database.
- Complete lappen tekst inclusief HTML tags in de database.
- Een verbinding verbreken en 3 regels later weer aanmaken.
- Geen escaping
Moet ik doorgaan?
* _Apache_ gaat als beheerder huilend in een hoekje zitten.
Moest opeens geupdate worden, paniek paniek.
Ik noem op :
- Classic ASP, in een omgeving die al jaren geleden gemigreerd is naar .Net2.0 later met 3.5 erbij.
- Procedureeel geprogrammeerd.
- Accountnaam = 'admin'
- Password = 'password'
- Geen limit op SQL queries
- Select met wildcards gebruiken.
- Gebruik van een ACCESS Database, waarvan we op elke machine in het cluster een lokale db hebben staan. Thank god dat het alleen lezen is uit de database.
- Complete lappen tekst inclusief HTML tags in de database.
- Een verbinding verbreken en 3 regels later weer aanmaken.
- Geen escaping
Moet ik doorgaan?

* _Apache_ gaat als beheerder huilend in een hoekje zitten.
Zero SR/S 17.3kWh / 2.7 kWP PV / Xtend WP 5kW + HRSolar zonnoeboiler
Dit hoeft natuurlijk niet per definitie een slecht iets te zijn. Je kan prima hele mooie procedurele code kloppen waar een prima applicatie uitkomt. Zie de linux kernel bijvoorbeeld._Apache_ schreef op donderdag 12 november 2009 @ 16:52:
- Procedureeel geprogrammeerd.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Verwijderd
En wat is hier slecht aan volgens jou?_Apache_ schreef op donderdag 12 november 2009 @ 16:52:
- Classic ASP, in een omgeving die al jaren geleden gemigreerd is naar .Net2.0 later met 3.5 erbij.
- Procedureeel geprogrammeerd.
- Geen limit op SQL queries
- Select met wildcards gebruiken.
- Gebruik van een ACCESS Database, waarvan we op elke machine in het cluster een lokale db hebben staan. Thank god dat het alleen lezen is uit de database.
- Complete lappen tekst inclusief HTML tags in de database.
- Een verbinding verbreken en 3 regels later weer aanmaken.
Klopt. Het is niet per definitie fout, maar kan zeker beter.Sebazzz schreef op donderdag 12 november 2009 @ 17:32:
[...]
Dit hoeft natuurlijk niet per definitie een slecht iets te zijn. Je kan prima hele mooie procedurele code kloppen waar een prima applicatie uitkomt. Zie de linux kernel bijvoorbeeld.
Dat begrijp ik, maar maakt het er niet overzichtelijker van. Daarnaast kan je heel veel mooie dingen met bescherming van objecten, overervering en abstractie doen. Waardoor je niet iet elke keer het wiel hoeft te vinden.
OO > Procedureel
_
Serieus? Wel eens oude website beheerd? Enig idee waar je tijd in gaat zitten. Liever gebruik ik technologieën die meer standaard brengen, die bijvoorbeeld configuratiegrootheden centraal neerzet volgens afgesproken waarden ( web.config's ).Verwijderd schreef op donderdag 12 november 2009 @ 18:44:
[...]
En wat is hier slecht aan volgens jou?
Lokale databases zijn echt een NO-GO. Naast het feit dat je geen database op je webserver wil, moet je naar een centrale database. Gegevens op één plek willen bijwerken.
Om de eerste paar puntjes aan te stippen. Classic ASP is behoorlijk resources intensief, als je op een omgeving 20 websites hebben staan, zie je direct dat de .Net applicaties aanzienlijk vriendelijke met de processortijd en het geheugen omgaan.
De limits op queries. De gegevenstroom in applicaties groeien elke dag, elke keer meer gegevens ophalen dan wat je verwerkt in je pagina of bij een verzameling gegeven gebruikt maar onnodig veel resources. Het zal niet de eerste keer zijn dat applicaties tot stilstand komen omdat de database het niet meer trekt. Pak alleen exact wat je nodig hebt is het streven imho. Daarnaast, waarom zou je een verbinding sluiten als je hem een paar regels later weer moet gebruiken?
Zero SR/S 17.3kWh / 2.7 kWP PV / Xtend WP 5kW + HRSolar zonnoeboiler
Verwijderd
De motivatie die je geeft zegt enkel iets over wanneer een bepaalde aanpak niet wenselijk is. Het maakt echter niet je aangehaalde punten een algemeen slecht programmeer voorbeeld.
Complete lappen tekst inclusief HTML tags in de database.
Zou ik niet noodzakelijk slecht noemen, het hangt gewoon af van de situatie, en wat je er juist in stopt.
Dat admin en password gebruikt is is slecht, maar voor de rest...
Ik denk dat je het ook wat in perspectief moet plaatsen, zoals je zelf zegt is het blijkbaar al geen recente applicatie meer.
Als ze immers onbekend is...
Wat ik wel speciaal vind is dat ze een applicatie laten maken, maar ze dan wel totaal uit het oog verliezen.
Zou ik niet noodzakelijk slecht noemen, het hangt gewoon af van de situatie, en wat je er juist in stopt.
Dat admin en password gebruikt is is slecht, maar voor de rest...
Ik denk dat je het ook wat in perspectief moet plaatsen, zoals je zelf zegt is het blijkbaar al geen recente applicatie meer.
Als ze immers onbekend is...
Wat ik wel speciaal vind is dat ze een applicatie laten maken, maar ze dan wel totaal uit het oog verliezen.
Wat is de aanleiding voor die update? Een aanpassing of gewoon een software update die aangeleverd wordt?
Iemand heeft te weinig tijd in de linux kernel doorgebracht.Sebazzz schreef op donderdag 12 november 2009 @ 17:32:
[...]
Dit hoeft natuurlijk niet per definitie een slecht iets te zijn. Je kan prima hele mooie procedurele code kloppen waar een prima applicatie uitkomt. Zie de linux kernel bijvoorbeeld.
Als er nu 1 voorbeeld is van OO in C, dan is het wel de linux kernel (of althans grote porties ervan).
ASSUME makes an ASS out of U and ME
Ja grapjas, maar het blijft procedureel. Het objectgeoriënteerde is slechts ge-emuleerd met structs.H!GHGuY schreef op donderdag 12 november 2009 @ 20:01:
[...]
Iemand heeft te weinig tijd in de linux kernel doorgebracht.
Als er nu 1 voorbeeld is van OO in C, dan is het wel de linux kernel (of althans grote porties ervan).
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Smijten met structs noemen sommigen ook OOP, wat ik op zich wel snap. Maar de grens wordt dan een beetje vaag. Overigens is in dat soort web scripts soms best zinloos om klasses te gaan maken. Sowieso is het een procedureel iets, de webpagina opbouwen. En wat er uit een database komt kun je ook zien als hetzelfde als structs smijten. Er wordt natuurlijk ook in die wereld steeds meer met OOP gedaan.
Ampera-e (60kWh) -> (66kWh)
Dus heet het OO. Het feit dat het geëmuleerd wordt verandert niets aan het paradigma, want dat is wat het is. Een manier om je code te ontwerpen. Of je dat nu emuleert of in een echte OO taal schrijft, het blijft hetzelfde. En in plaats van bar->foo() zeg je foo(bar), waarbij die laatste dan weer een wrapper kan zijn om bar->vtable->foo(bar). Lekker boeiend.Sebazzz schreef op donderdag 12 november 2009 @ 21:16:
[...]
Ja grapjas, maar het blijft procedureel. Het objectgeoriënteerde is slechts ge-emuleerd met structs.
Er is wel een verschil tussen smijten met structs en het gebruik van structs om de elementen van OO zoals polymorphisme en abstractie te implementeren.!null schreef op donderdag 12 november 2009 @ 21:49:
Smijten met structs noemen sommigen ook OOP
Overigens:
Dat hangt nogal van de use case af._Apache_ schreef op donderdag 12 november 2009 @ 19:03:
OO > Procedureel
[ Voor 42% gewijzigd door .oisyn op 12-11-2009 23:00 ]
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.
Dus OO Design zonder OO Programming
Andersom komt weliswaar veel vaker voor, maar de linux-kernel en diverse embedded systemen bewijzen dat OO Design en de programmeertaal C prima samengaan.
Dat is jou invulling van OOP. Ik bedoel, in Visual Basic 6 kan je ook met objecten aan de gang, maar kun je toch niet al die mogelijkheden van C++ om maar wat te noemen..oisyn schreef op donderdag 12 november 2009 @ 22:51:
Er is wel een verschil tussen smijten met structs en het gebruik van structs om de elementen van OO zoals polymorphisme en abstractie te implementeren.
Wanneer men structs als objecten ziet en hier ook zo mee omgaat, dan bedoel ik dynamisch aanmaken en weer weggooien, zou je kunnen zeggen dat je het op de OOP manier doet.
Maar ik snap je punt wel, bij echt OOP komt toch wel heel snel overerving om de hoek kijken en interfaces etc. (kon in VB6 ook allemaal niet
Ampera-e (60kWh) -> (66kWh)
Ik moest een issue onderzoeken waarbij een bitveld niet de goede waarde krijgt, kom ik in de code het volgende juweeltje tegen:
Wie zonder een testscript te schrijven kan zeggen wanneer deze regel true of false teruggeeft krijgt een koekje!
C#:
1
| bool bvalue = (data == "1" ? true : false || data == "Ja" ? true : false || data == "J" ? true : false || data == "N" ? false : true); |
Wie zonder een testscript te schrijven kan zeggen wanneer deze regel true of false teruggeeft krijgt een koekje!
Kater? Eerst water, de rest komt later
geeft true op alles behalve op 'N"Haan schreef op vrijdag 13 november 2009 @ 16:08:
Ik moest een issue onderzoeken waarbij een bitveld niet de goede waarde krijgt, kom ik in de code het volgende juweeltje tegen:
C#:
1 bool bvalue = (data == "1" ? true : false || data == "Ja" ? true : false || data == "J" ? true : false || data == "N" ? false : true);
Wie zonder een testscript te schrijven kan zeggen wanneer deze regel true of false teruggeeft krijgt een koekje!
Ryzen 9 5900X @ 5.1Ghz | MPG B550 GAMING CARBON | 96GB DDR4-3200 | RTX 4070TI | 2TB + 1TB m.2 SSD | 3x 1TB HDD | 1x 2TB SATA SSD | 32" G3223Q (4K/144Hz)
Als data == "N", dan false, anders altijd true.Haan schreef op vrijdag 13 november 2009 @ 16:08:
Ik moest een issue onderzoeken waarbij een bitveld niet de goede waarde krijgt, kom ik in de code het volgende juweeltje tegen:
C#:
1 bool bvalue = (data == "1" ? true : false || data == "Ja" ? true : false || data == "J" ? true : false || data == "N" ? false : true);
Wie zonder een testscript te schrijven kan zeggen wanneer deze regel true of false teruggeeft krijgt een koekje!
'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'
Ja
En dan ga je inderdaad wel fouten krijgen als data ook wordt aangeleverd met 0/1, Ja/Nee of zelfs j/n

Maar hier is je koekje

[ Voor 19% gewijzigd door Haan op 13-11-2009 16:17 ]
Kater? Eerst water, de rest komt later
sowieso brakke syntax. Waarom niet zoiets:
of nog leuker:
oftewel: if (j/1/true/...) bValue = true; else if (n/0/false/...) bValue = false; else throw SomeException;
C#:
1
| bool bValue = (data == "j" || data == "1" ...)? true : false; |
of nog leuker:
C#:
1
2
| bool bValue = (data == "j" || data == "1" ...)? true : ((data== "n" || data == "0" || ....)? false : FILE_NOT_FOUND); |
oftewel: if (j/1/true/...) bValue = true; else if (n/0/false/...) bValue = false; else throw SomeException;
[ Voor 16% gewijzigd door MBV op 13-11-2009 17:36 ]
Pardon? Waarom niet gewoonMBV schreef op vrijdag 13 november 2009 @ 17:35:
sowieso brakke syntax. Waarom niet zoiets:
C#:
1 bool bValue = (data == "j" || data == "1" ...)? true : false;
C#:
1
| bool bValue = (data == "j" || data == "1" ...); |
Waarom in hemelsnaam die ternaire operator?
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.
het beste blijft nog altijd
C#:
1
| bool bValue = (data != "N"); |
[ Voor 11% gewijzigd door nIghtorius op 13-11-2009 17:53 ]
Ryzen 9 5900X @ 5.1Ghz | MPG B550 GAMING CARBON | 96GB DDR4-3200 | RTX 4070TI | 2TB + 1TB m.2 SSD | 3x 1TB HDD | 1x 2TB SATA SSD | 32" G3223Q (4K/144Hz)
Want deze oplossing was te eenvoudig ofzo? 
C#:
1
2
3
4
5
| Boolean bValue; if(!Boolean.TryParse(data, out bValue)) { throw new Exception("Invalid boolean!"); } |
'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.
Verwijderd
Maar OO is niet een taalfeature... Het is een denkwijze/paradigma en dat overstijgt taal. Dat talen als Java, C# en C++ daar meer features voor aanbieden betekent dat niet je in taal die ze niet bieden niet op dergelijke wijze kunt programmeren. Uiteindelijk is een taal niets meer dan een means to an end.\!null schreef op donderdag 12 november 2009 @ 23:34:
[...]
Dat is jou invulling van OOP. Ik bedoel, in Visual Basic 6 kan je ook met objecten aan de gang, maar kun je toch niet al die mogelijkheden van C++ om maar wat te noemen.
Wanneer men structs als objecten ziet en hier ook zo mee omgaat, dan bedoel ik dynamisch aanmaken en weer weggooien, zou je kunnen zeggen dat je het op de OOP manier doet.
Maar ik snap je punt wel, bij echt OOP komt toch wel heel snel overerving om de hoek kijken en interfaces etc. (kon in VB6 ook allemaal niet)
Als je een beetje creatief bent kun je vast en zeker zelfs met VB6 overerving implementeren, ik zie eigenlijk niet waarom het niet zou kunnen.
Parsed die ook "Ja" en "Nee"? En ook die ene bijzondere klant die persé "File_Not_Found" als true wil hebben?Boeboe schreef op vrijdag 13 november 2009 @ 18:26:
Want deze oplossing was te eenvoudig ofzo?
C#:
1 2 3 4 5 Boolean bValue; if(!Boolean.TryParse(data, out bValue)) { throw new Exception("Invalid boolean!"); }
Bepalen klanten dat?MBV schreef op vrijdag 13 november 2009 @ 18:58:
[...]
En ook die ene bijzondere klant die persé "File_Not_Found" als true wil hebben?
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
"Wie betaalt, bepaalt"
Misschien wil de klant zèlf wel de boel gaan onderhouden en betaalt hij dus alleen voor het opzetten.
Zo scherp als een voetbal!
Wel grappig (op een vreselijke manier) dat de precedence van de ?: en || operators hier niet uitmaakt.Haan schreef op vrijdag 13 november 2009 @ 16:08:
C#:
1 bool bvalue = (data == "1" ? true : false || data == "Ja" ? true : false || data == "J" ? true : false || data == "N" ? false : true);
Wie zonder een testscript te schrijven kan zeggen wanneer deze regel true of false teruggeeft krijgt een koekje!
C#:
1
| (data == "1" ? true : false) || (data == "Ja" ? true : false) .. |
Maar als C# dezelfde syntax hanteert als C/C++, dan wordt het geëvalueerd als:
C#:
1
| (data == "1") ? true : ((false || data == "ja") ? true : (false || ..)) |
Wat toevallig min of meer op hetzelfde neerkomt (zolang die ternaire expressies maar met false eindigen).
*snip*
ik had gewoon een topic gemakt in het verkeerde forum...zucht nog slaperig denk ik
ik had gewoon een topic gemakt in het verkeerde forum...zucht nog slaperig denk ik
[ Voor 92% gewijzigd door vorlox op 15-11-2009 08:46 ]
Verwijderd
Soms is het niet goed om 's nachts te werken, vooral met programmeren komen er dan soms verassende dingen uit, zo ook bij dit voorbeeldje dat ik net ergens tegenkwam:
PHP:
1
2
3
4
| if (preg_match('/[a-z1-9\._-]+\@[a-z1-9_-]+\.[a-z\.]{2,7}/', strtolower($sMail))) { // mail = ok...? } |
nIghtorius schreef op vrijdag 13 november 2009 @ 17:52:
het beste blijft nog altijd
C#:
1 bool bValue = (data != "N");
http://hawvie.deviantart.com/
Mwa zo erg is het toch niet..Verwijderd schreef op maandag 16 november 2009 @ 16:31:
Soms is het niet goed om 's nachts te werken, vooral met programmeren komen er dan soms verassende dingen uit, zo ook bij dit voorbeeldje dat ik net ergens tegenkwam:
PHP:
1 2 3 4 if (preg_match('/[a-z1-9\._-]+\@[a-z1-9_-]+\.[a-z\.]{2,7}/', strtolower($sMail))) { // mail = ok...? }
Soultaker schreef op vrijdag 13 november 2009 @ 19:29:
[...]
Wel grappig (op een vreselijke manier) dat de precedence van de ?: en || operators hier niet uitmaakt.

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.
Geen checks op of een e-mailadres/domain met een streepje/punt eindigt.Verwijderd schreef op maandag 16 november 2009 @ 16:31:
Soms is het niet goed om 's nachts te werken, vooral met programmeren komen er dan soms verassende dingen uit, zo ook bij dit voorbeeldje dat ik net ergens tegenkwam:
PHP:
1 2 3 4 if (preg_match('/[a-z1-9\._-]+\@[a-z1-9_-]+\.[a-z\.]{2,7}/', strtolower($sMail))) { // mail = ok...? }
Geen subdomeinen mogelijk.
E-mailadresverificatie is niet makkelijk af te handelen me 1 reguliere expressie.
Mag een mailadres niet op een punt eindigen? Een domein iig wel, sterker nog, ze eindigen per definitie met een punt, alleen mag je die laatste punt ook weglaten.Mafkees schreef op maandag 16 november 2009 @ 16:57:
[...]
Geen checks op of een e-mailadres/domain met een streepje/punt eindigt.
Wat ik verder raar vind is dat je blijkbaar geen 0 mag hebben in je adres.
Eens. Als je al wilt controleren kijk dan of er bijv. geen spaties in staan en dat er precies 1 @ in voorkomt. Voor de rest heb je er alleen maar mensen mee waarvan hun verder valide e-mailadres niet door jouw check heen komt omdat hij te restrictief is.E-mailadresverificatie is niet makkelijk af te handelen me 1 reguliere expressie.
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.
Verwijderd
Inderdaad raar, dat is 't ergste aan die code als je het mij vraagt....oisyn schreef op maandag 16 november 2009 @ 17:11:
[...]
Wat ik verder raar vind is dat je blijkbaar geen 0 mag hebben in je adres.

[ Voor 7% gewijzigd door Verwijderd op 16-11-2009 17:14 ]
Kijk nog beter: omdat het een perl regex (preg) is zal hij bijna altijd matchen, omdat er geen ^ en $ aan begin en eind staan. Dus een subdomein mag wel, als het hoofddomein tussen de 2 en 7 tekens heeft 
Enneh, het is PHP met een Regex erin. PHP spreekt voor zich
en regex ook wel een beetje: "Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems."
Enneh, het is PHP met een Regex erin. PHP spreekt voor zich
[ Voor 37% gewijzigd door MBV op 16-11-2009 18:54 ]
Gewoon dit doen dus:
PHP:
1
2
3
4
| if ( filter_var($sMail, FILTER_VALIDATE_EMAIL) ) { // mail ok } |
Ah ja, dat was ik nog vergeten te posten, ik had 'm wel gezien idd. Al is "bijna altijd" wel wat overdreven.MBV schreef op maandag 16 november 2009 @ 18:52:
Kijk nog beter: omdat het een perl regex (preg) is zal hij bijna altijd matchen, omdat er geen ^ en $ aan begin en eind staan.
En mensen met zo'n adres zijn al helemaal screwed
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.
Moet je maar een normaal adres nemen.oisyn schreef op maandag 16 november 2009 @ 19:48:
[...]
En mensen met zo'n adres zijn al helemaal screwed
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Verwijderd
Jep, maar bij PHP <5.2 moet er een andere oplossing voor verzonnen worden, en laat dat in mijn geval nou net op 't verkeerde moment moeten...Michali schreef op maandag 16 november 2009 @ 19:02:
Gewoon dit doen dus:
PHP:
1 2 3 4 if ( filter_var($sMail, FILTER_VALIDATE_EMAIL) ) { // mail ok }
/me moet van z'n PHP-editor afblijven als hij té moe is...

@GuidoH
Dit heeft een hele simpele oplossing: Sloop de regex van FILTER_VALIDATE_EMAIL uit de source van PHP!
Letterlijke kopie:
Gebruik deze en je kunt gewoon je email adressen validaten
Dit heeft een hele simpele oplossing: Sloop de regex van FILTER_VALIDATE_EMAIL uit de source van PHP!
Letterlijke kopie:
code:
1
| "/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([A-Za-z0-9_][A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*(\\.[A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?(\\.(?=[A-Za-z0-9\\-]))?)+[A-Za-z]+))$/D" |
Gebruik deze en je kunt gewoon je email adressen validaten
Verwijderd
Ahh, tuurlijk... Dat had ik natuurlijk zo uit m'n mouwen geschud als ik goed wakker was.fiftyhillswest schreef op maandag 16 november 2009 @ 21:18:
@GuidoH
Dit heeft een hele simpele oplossing: Sloop de regex van FILTER_VALIDATE_EMAIL uit de source van PHP!
Letterlijke kopie:
code:
1 "/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([A-Za-z0-9_][A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*(\\.[A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?(\\.(?=[A-Za-z0-9\\-]))?)+[A-Za-z]+))$/D"
Gebruik deze en je kunt gewoon je email adressen validaten
Die is wel leuk, maar hoe komt het dat de officiele regex zo veel groter is dan?fiftyhillswest schreef op maandag 16 november 2009 @ 21:18:
@GuidoH
Dit heeft een hele simpele oplossing: Sloop de regex van FILTER_VALIDATE_EMAIL uit de source van PHP!
Letterlijke kopie:
code:
1 "/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([A-Za-z0-9_][A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*(\\.[A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?(\\.(?=[A-Za-z0-9\\-]))?)+[A-Za-z]+))$/D"
Gebruik deze en je kunt gewoon je email adressen validaten
http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html
code:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
| (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t] )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?: \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:( ?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0 31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\ ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+ (?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?: (?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z |(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n) ?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\ r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n) ?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t] )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])* )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t] )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*) *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ |\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?: \r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031 ]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\]( ?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(? :(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(? :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(? :(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)? [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]| \\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<> @,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|" (?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(? :[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[ \]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|( ?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,; :\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([ ^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\" .\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\ ]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\ [\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\ r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\] |\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0 00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\ .|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@, ;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(? :[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])* (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\". \[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[ ^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\] ]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*( ?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ ".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:( ?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[ \["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t ])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t ])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(? :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+| \Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?: [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\ ]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n) ?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[" ()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n) ?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<> @,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@, ;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)? (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\". \[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?: \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[ "()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t]) *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]) +|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\ .(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z |(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:( ?:\r\n)?[ \t])*))*)?;\s*) |
(Niet dat je dit ooit in productiecode zou mogen gebruiken
Hoezo officiele regexp?roy-t schreef op maandag 16 november 2009 @ 23:13:
[...]
Die is wel leuk, maar hoe komt het dat de officiele regex zo veel groter is dan?
http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html
code:
1 *snip*
(Niet dat je dit ooit in productiecode zou mogen gebruiken).
This regular expression will only validate addresses that have had any comments stripped and replaced with whitespace (this is done by the module).
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Uhhhhhm, dus die copy-paste van net is toch af te keurenroy-t schreef op maandag 16 november 2009 @ 23:13:
[...]
(Niet dat je dit ooit in productiecode zou mogen gebruiken).
Maar email-adressen / domain-checks moet je wmb gewoon niet enkel in regexen afhandelen, gewoon kijken bij server of hij het accepteert. ( en ja dit is extreem duur en dus niet te gebruiken voor het in 1 klap validaten van 100.000 emailadressen )
Naast alle officiele regels die al voor genoeg hoofdbrekens zorgen heb je ook nog eens kans op interne machines die meer dan de officiele standaard accepteren.
Qua email/domein regels hebben wij gewoon een gelaagd iets.
1 : Kijken in vast regime van regexen of het daarin valt ( hotmail / gmail / lijst van xxxx providers etc )
2 : Kijken of het in een algemene regex valt. Zoja logmelding om op te kunnen nemen in 1
3 : Kijken of de ontvangende server het accepteert. Zoja logmelding met warning voor nadere bestudering en opname in 1.
Nouja die servers / routers hebben ook een systeem om te controleren wat het nu eigenlijk is dat je tegen ze aan praat. Dus ergens moet er een parser/regex zijn die zowel snel is, als correctGomez12 schreef op maandag 16 november 2009 @ 23:38:
[...]
Uhhhhhm, dus die copy-paste van net is toch af te keuren
Maar email-adressen / domain-checks moet je wmb gewoon niet enkel in regexen afhandelen, gewoon kijken bij server of hij het accepteert. ( en ja dit is extreem duur en dus niet te gebruiken voor het in 1 klap validaten van 100.000 emailadressen )
Naast alle officiele regels die al voor genoeg hoofdbrekens zorgen heb je ook nog eens kans op interne machines die meer dan de officiele standaard accepteren.
Qua email/domein regels hebben wij gewoon een gelaagd iets.
1 : Kijken in vast regime van regexen of het daarin valt ( hotmail / gmail / lijst van xxxx providers etc )
2 : Kijken of het in een algemene regex valt. Zoja logmelding om op te kunnen nemen in 1
3 : Kijken of de ontvangende server het accepteert. Zoja logmelding met warning voor nadere bestudering en opname in 1.
Misschien niet helemaal op z'n plaats, maar dit was zo snel even het beste topic wat ik kon verzinnen voor deze post uit stack overflow. Gaat om het 1e antwoord 
http://stackoverflow.com/...ined-tags/1732454#1732454
http://stackoverflow.com/...ined-tags/1732454#1732454
Hallo met Tim
Gewoon eisen dat je host een versie hoger heeft dan 5.2 natuurlijkVerwijderd schreef op maandag 16 november 2009 @ 20:54:
[...]
Jep, maar bij PHP <5.2 moet er een andere oplossing voor verzonnen worden, en laat dat in mijn geval nou net op 't verkeerde moment moeten...
/me moet van z'n PHP-editor afblijven als hij té moe is...
De Debian stable houd ik meestal aan als standaard. Nu dus 5.2.6Cartman! schreef op dinsdag 17 november 2009 @ 10:23:
[...]
Gewoon eisen dat je host een versie hoger heeft dan 5.2 natuurlijkWij vragen minimaal 5.2.6 en dan is dat zelfs nog een versie van ruim een jaar oud (zeg ik uit mn hoofd).
Het user-part durf ik niet met zekerheid te zeggen, ik weet niet of user.@blabla.nl mag - de T.net parser vindt van wel.oisyn schreef op maandag 16 november 2009 @ 17:11:
[...]
Mag een mailadres niet op een punt eindigen? Een domein iig wel, sterker nog, ze eindigen per definitie met een punt, alleen mag je die laatste punt ook weglaten.
Wat ik verder raar vind is dat je blijkbaar geen 0 mag hebben in je adres.
Wat ik met domeinen bedoel is dat die regex dingen als mijnadres@student.utwente.nl niet passed.
[ Voor 8% gewijzigd door Mafkees op 17-11-2009 11:03 ]
Ja maar je zei ook dat er geen check was die controleert of een domein op een punt eindigt, terwijl dat volgens de gepastete regex werd geaccepteerd. En ik zeg dat een domein gewoon mag eindigen in een punt. Sterker nog, elk domein eindigt in een punt. We zitten nu op "gathering.tweakers.net."
[ Voor 17% gewijzigd door .oisyn op 17-11-2009 11:25 ]
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.
Pkunk schreef op dinsdag 17 november 2009 @ 10:13:
Misschien niet helemaal op z'n plaats, maar dit was zo snel even het beste topic wat ik kon verzinnen voor deze post uit stack overflow. Gaat om het 1e antwoord
http://stackoverflow.com/...ined-tags/1732454#1732454
Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp.

klopt de laatste "." is de root der rooten.oisyn schreef op dinsdag 17 november 2009 @ 11:24:
Ja maar je zei ook dat er geen check was die controleert of een domein op een punt eindigt, terwijl dat volgens de gepastete regex werd geaccepteerd. En ik zeg dat een domein gewoon mag eindigen in een punt. Sterker nog, elk domein eindigt in een punt. We zitten nu op "gathering.tweakers.net."
Ryzen 9 5900X @ 5.1Ghz | MPG B550 GAMING CARBON | 96GB DDR4-3200 | RTX 4070TI | 2TB + 1TB m.2 SSD | 3x 1TB HDD | 1x 2TB SATA SSD | 32" G3223Q (4K/144Hz)
Das idd. opzich prima, daarom is dat ook ons minimummithras schreef op dinsdag 17 november 2009 @ 10:43:
[...]
De Debian stable houd ik meestal aan als standaard. Nu dus 5.2.6
Als je het probeerd zul je inderdaad bij de tweakers servers uitkomen, alleen herkent tweakers het niet helemaal.nIghtorius schreef op dinsdag 17 november 2009 @ 17:05:
[...]
klopt de laatste "." is de root der rooten
[url="http://www.tweakers.net./"]http://www.tweakers.net./[/url]
Dat komt omdat de browser de punt ook meestuurt in de Host HTTP header en Apache geen virtual host kent met een dergelijke naam. [url]http://nu.nl./[/] werkt bijvoorbeeld wel. [url]http://oisyn.nl./[/] ook, maar die doet een rewrite
[ Voor 3% gewijzigd door .oisyn op 18-11-2009 13:04 ]
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.
In het geval van T.net kent apache die vhost wel (default geloof ik), alleen de software kent die vhost niet en die geeft deze deze melding.oisyn schreef op woensdag 18 november 2009 @ 13:03:
Dat komt omdat de browser de punt ook meestuurt in de Host HTTP header en Apache geen virtual host kent met een dergelijke naam.
Soit
. Ik neem aan dat je met "de software" tnet's eigen codebase bedoelt?
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.
Dit topic is gesloten.
Let op:
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.