Niet zoals ze het hebben aangepakt. Dit had eigenlijk in een configuratiebestand moeten staan, niet in core code, en zeker niet in common.py.
Verwijderd
Sowieso best een nasty app, waarom een hele netwerk service opstarten om je app vervolgens in een browser weer te geven. Er zijn toch wel betere manieren om een app te draaien?
Ik ruik hier web proggers die niet beter weten dan een web applicatie te bouwen en dan maar een webserver meeleveren met hun app om het te laten draaien. Als je dat al wil, bouw dan gewoon een webapp en lever een goede tutorial hoe je eenvoudig en snel een van de standaard webservers zelf aan de praat krijgt.
Ik ruik hier web proggers die niet beter weten dan een web applicatie te bouwen en dan maar een webserver meeleveren met hun app om het te laten draaien. Als je dat al wil, bouw dan gewoon een webapp en lever een goede tutorial hoe je eenvoudig en snel een van de standaard webservers zelf aan de praat krijgt.
De app draait waarschijnlijk als service omdat 't dan in de achtergrond ook de nieuwe afleveringen kan downloaden; het nadeel daaraan is dat je als service enorm veel moeite moet doen om een UI te draaien. Kortom dan is de keus tussen een embedded webserver die je ook van buiten het netwerk accessen, of een locale app die met IPC of iets dergelijks gaat lopen kutten snel gemaakt.Verwijderd schreef op dinsdag 15 februari 2011 @ 00:17:
Sowieso best een nasty app, waarom een hele netwerk service opstarten om je app vervolgens in een browser weer te geven. Er zijn toch wel betere manieren om een app te draaien?
Verwijderd
Waarom zou je dit in de achtergrond moeten doen? Je kunt toch eenvoudig minimizen naar de tray zoals ook de verschillende compatible download apps dat doen? Dan weet je tenminste wat er draait op je PC en kun je het snel uitzetten als je het niet nodig hebt.
Als alle apps services zouden draaien (en helaas doen zeer veel apps dat) dan zou je PC niet meer vooruit te branden zijn. Al die zinloze crap als de Adobe launcher, Java updater, iPod helper en noem het maar op
Je kunt overigens ook de Windows scheduler eenvoudig aanroepen in je app, en er is altijd de optie om een losse service en een losse app te ontwikkelen, de app doet dan het UI deel waardoor het ineens allemaal heel eenvoudig is. Sterker nog, dan kun je het heel simpel mogelijk maken voor andere mensen om hun eigen UI te bouwen voor jouw app.
IPC is ook niet zo evil verder hoor, sterker nog, menig OS is erop gebouwd
Als alle apps services zouden draaien (en helaas doen zeer veel apps dat) dan zou je PC niet meer vooruit te branden zijn. Al die zinloze crap als de Adobe launcher, Java updater, iPod helper en noem het maar op
Je kunt overigens ook de Windows scheduler eenvoudig aanroepen in je app, en er is altijd de optie om een losse service en een losse app te ontwikkelen, de app doet dan het UI deel waardoor het ineens allemaal heel eenvoudig is. Sterker nog, dan kun je het heel simpel mogelijk maken voor andere mensen om hun eigen UI te bouwen voor jouw app.
IPC is ook niet zo evil verder hoor, sterker nog, menig OS is erop gebouwd
[ Voor 30% gewijzigd door Verwijderd op 15-02-2011 00:31 ]
Waarom niet? Je hebt er verder geen omkijk meer naar. Instellen en met rust laten en het werkt ook nog eens als je zelf niet ingesigned bent ;-). De tijd dat jij, ik en iedere andere tweaker wisten wat er allemaal op onze PC draait is al lang voorbij en iets uitschakelen, ach als het echt nodig is weet je het te vinden maar de usecase is klein.Verwijderd schreef op dinsdag 15 februari 2011 @ 00:28:
Waarom zou je dit in de achtergrond moeten doen? Je kunt toch eenvoudig minimizen naar de tray zoals ook de verschillende compatible download apps dat doen? Dan weet je tenminste wat er draait op je PC en kun je het snel uitzetten als je het niet nodig hebt.
IPC is het probleem niet; het probleem is dat je nu naast je simpele wget wrapper/download client ook nog een protocol en een extra applicatie moet onderhouden.Verwijderd schreef op dinsdag 15 februari 2011 @ 00:28:
en er is altijd de optie om een losse service en een losse app te ontwikkelen, de app doet dan het UI deel waardoor het ineens allemaal heel eenvoudig is. Sterker nog, dan kun je het heel simpel mogelijk maken voor andere mensen om hun eigen UI te bouwen voor jouw app.
IPC is ook niet zo evil verder hoor, sterker nog, menig OS is erop gebouwd
Een handmatige lijst met uitzonderingen lijkt me een behoorlijke code smell in euh. het herkenningsalgoritme? zoiets.Verwijderd schreef op dinsdag 15 februari 2011 @ 00:12:
Niet zoals ze het hebben aangepakt. Dit had eigenlijk in een configuratiebestand moeten staan, niet in core code, en zeker niet in common.py.
Het probleem dat ik daarmee heb is dat je alleen naar code kijkt en wat loop te pielen, in een beperkt gebied blijft en niet (of slechts beperkt) geconfronteerd wordt met de ideeën en concepten achter een stukje code. Daarnaast bieden goede boeken een uitdaging of een kennismaking met dingen die je niet zelf op zou gaan zoeken.BarôZZa schreef op maandag 14 februari 2011 @ 01:31:
Ik merk van mezelf dat ik iets veel beter onthoud wanneer ik het zelf heb uitgevogeld (tegen een probleem aanlopen en dan de oplossing zoeken) dan van wanneer ik iets lees. Ik leer ook een stuk beter/sneller wanneer ik een stuk code bestudeer, dan wanneer ik een ellenlange omschrijving lees over wat een stuk code doet en hoe het werkt. Voor sommige ingewikkelde logische problemen is een goed beschreven uitleg natuurlijk wel handig, maar voor van die beginnersdingen, zoals de PHP pagina die eerder gepost werd, heb ik boeken nooit handig gevonden.
SabNZBD heb ik ook als service draaien, en dat is best makkelijk, want dan kan ik gewoon mijn mediacenter aanslingeren, en dan komen alle films/series weer binnen, zonder dat ik eerst in moet loggen.Verwijderd schreef op dinsdag 15 februari 2011 @ 00:28:
Waarom zou je dit in de achtergrond moeten doen? Je kunt toch eenvoudig minimizen naar de tray zoals ook de verschillende compatible download apps dat doen? Dan weet je tenminste wat er draait op je PC en kun je het snel uitzetten als je het niet nodig hebt.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
The real WTF is natuurlijk dat jij aanneemt dat mensen uberhaupt maar 1 computer heeftVerwijderd schreef op dinsdag 15 februari 2011 @ 00:28:
Waarom zou je dit in de achtergrond moeten doen? Je kunt toch eenvoudig minimizen naar de tray zoals ook de verschillende compatible download apps dat doen? Dan weet je tenminste wat er draait op je PC en kun je het snel uitzetten als je het niet nodig hebt.
Hoe kom je er trouwens bij dat je 'makkelijk' aan mensen uit kunt leggen dat ze even apache moeten installeren (of een andere webcontainer) om de applicatie in te kunnen draaien en vervolgens nog de voor hun platform gebruikelijke scheduling software in moeten regelen om repeterende taken te kunnen uitvoeren? Ik vermoed dat je dan een iets te rooskleurige voorstelling hebt van gebruikers
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Dat wil ik ook, en ik ga het binnenkort eens regelen. Vannacht is voor de zoveelste keer mijn Windows-HTPC gereboot dankzij Windows Updates (ik zet het automatisch installeren wekelijks uit, maar het lijkt telkens, op verschillende pc's regelmatig vanzelf gereset te worden in Windows 7) en nu draaien Sickbeard, CouchPotato en SabNZBD weer niet omdat ik niet ben ingelogd. uTorrent kan dat daarentegen dan weer wel.
Toch jammer dat je voor die andere drie handmatig een service moet aanmaken, het is zowat letterlijk één regel code voor de makers van het programma.
Toch jammer dat je voor die andere drie handmatig een service moet aanmaken, het is zowat letterlijk één regel code voor de makers van het programma.
[ Voor 3% gewijzigd door CodeCaster op 15-02-2011 10:03 ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Ik heb ooit geïnvesteerd in een NAS + 4x 2 TB (advertentieruimte) Samsung in Raid 5 voor effectief zo'n 5,5TB ruimte en voor mij is die investering het dubbel en dwars waard geweest.
Ik was zeker blij dat ik voor Raid 5 had gekozen toen één van de schijven het begaf; teruggestuurd naar Samsung en netjes een nieuwe gekregen.
Maar goed, op die NAS (Qnap TS-410) draai ik via QPKG Transmission met een Web Daemon waardoor ik dus mijn torrents via de NAS rechtstreeks op de NAS kan downloaden; hoef ik niet te klooien met knippen plakken en hoef ik ook geen extra apparaten aan te hebben staan. Daarbij kan ik de NAS ook nog als webserver gebruiken of als FTP-server, ideaal dus.
Voor mediadoeleinden heb ik toen een AC Ryan PlayOn! HD Mini gekocht, omdat een uitgebreide HTPC niet meer nodig zou zijn.
Ik ben zelf heel blij met deze oplossing en kan het iedereen aanbevelen; al zullen de smaken natuurlijk blijven verschillen.
Ik was zeker blij dat ik voor Raid 5 had gekozen toen één van de schijven het begaf; teruggestuurd naar Samsung en netjes een nieuwe gekregen.
Maar goed, op die NAS (Qnap TS-410) draai ik via QPKG Transmission met een Web Daemon waardoor ik dus mijn torrents via de NAS rechtstreeks op de NAS kan downloaden; hoef ik niet te klooien met knippen plakken en hoef ik ook geen extra apparaten aan te hebben staan. Daarbij kan ik de NAS ook nog als webserver gebruiken of als FTP-server, ideaal dus.
Voor mediadoeleinden heb ik toen een AC Ryan PlayOn! HD Mini gekocht, omdat een uitgebreide HTPC niet meer nodig zou zijn.
Ik ben zelf heel blij met deze oplossing en kan het iedereen aanbevelen; al zullen de smaken natuurlijk blijven verschillen.
Verwijderd
Ik denk niet dat er zomaar een algoritme voor te bedenken is, maar dat het eerder een probleem met de aangeboden data is. Een uitzonderingenlijst is een goed idee, maar data hoort niet thuis in code. Daarom vind ik het ook nooit netjes staan dat (o.a. in de Linux-kernel) de herkende PCI ID's in de code van de drivers staat.YopY schreef op dinsdag 15 februari 2011 @ 09:42:
[...]
Een handmatige lijst met uitzonderingen lijkt me een behoorlijke code smell in euh. het herkenningsalgoritme? zoiets.
JavaScript:
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
| function isValidDate(dateStr) { // Checks for the following valid date formats: // DD/MM/YY DD/MM/YYYY DD-MM-YY DD-MM-YYYY // Also separates date into month, day, and year variables // var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/; // To require a 4 digit year entry, use this line instead: dateStr = dateStr.substring(0, 10); // expression for date with - or / as devider // var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; var datePat = /^(\d{1,2})(-)(\d{1,2})\2(\d{4})$/; var matchArray = dateStr.match(datePat); // is the format ok? if (matchArray == null) { alert("Binnenkomst moet in het formaat \"dd-mm-jjjj\" worden ingevuld.") return false; } month = matchArray[3]; // parse date into variables day = matchArray[1]; year = matchArray[4]; if (month < 1 || month > 12) { // check month range alert("Maanden moeten tussen 1 en 12 zijn."); return false; } if (day < 1 || day > 31) { alert("Dagen moeten tussen 1 and 31 zijn."); return false; } if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) { alert("De maand " + month + " heeft niet 31 dagen!") return false } if (month == 2) { // check for february 29th var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); if (day > 29 || (day == 29 && !isleap)) { alert("Februari " + year + " heeft niet " + day + " dagen!"); return false; } } return true; // date is valid } |
[ Voor 186% gewijzigd door JohnStaakke op 15-02-2011 12:58 ]
Vooral mooi hoe rapportage naar de gebruiker ook onderdeel is van de functie 
.edit: ja idd. Eerst dacht ik ook "hey, heeft PHP tegenwoordig ook ingebouwde regex support?", maar toen zag ik het gemis aan $ in variabelen en het definieren ervan met 'var', en toen begon het me te dagen

.edit: ja idd. Eerst dacht ik ook "hey, heeft PHP tegenwoordig ook ingebouwde regex support?", maar toen zag ik het gemis aan $ in variabelen en het definieren ervan met 'var', en toen begon het me te dagen
[ Voor 56% gewijzigd door .oisyn op 15-02-2011 12:37 ]
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.
Nee Javascript, maar dit highlight net iets mooier
Kan ook prima highlighting aanzetten voor javascript syntax hoor. Gewoon [code=javascript] gebruikenJohnStaakke schreef op dinsdag 15 februari 2011 @ 12:46:
[...]
Nee Javascript, maar dit highlight net iets mooier
JavaScript:
Maar grootste wtf is wel de alarts in zo'n validatiefunctie 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
| function isValidDate(dateStr) { // Checks for the following valid date formats: // DD/MM/YY DD/MM/YYYY DD-MM-YY DD-MM-YYYY // Also separates date into month, day, and year variables // var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/; // To require a 4 digit year entry, use this line instead: dateStr = dateStr.substring(0, 10); // expression for date with - or / as devider // var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; var datePat = /^(\d{1,2})(-)(\d{1,2})\2(\d{4})$/; var matchArray = dateStr.match(datePat); // is the format ok? if (matchArray == null) { alert("Binnenkomst moet in het formaat \"dd-mm-jjjj\" worden ingevuld.") return false; } month = matchArray[3]; // parse date into variables day = matchArray[1]; year = matchArray[4]; if (month < 1 || month > 12) { // check month range alert("Maanden moeten tussen 1 en 12 zijn."); return false; } if (day < 1 || day > 31) { alert("Dagen moeten tussen 1 and 31 zijn."); return false; } if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) { alert("De maand " + month + " heeft niet 31 dagen!") return false } if (month == 2) { // check for february 29th var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); if (day > 29 || (day == 29 && !isleap)) { alert("Februari " + year + " heeft niet " + day + " dagen!"); return false; } } return true; // date is valid } |

Ik zou eerder zeggen; het ontbreken van correcte declaraties voor de day, month en year variabelen.mithras schreef op dinsdag 15 februari 2011 @ 12:54:
Maar grootste wtf is wel de alarts in zo'n validatiefunctie
Met behulp van impliciete declaratie eindigen die na een dure scope traversal op je globale window object.
Het mooiste is nog dat deze functionaliteit al in javascript zit... Je hebt niet voor niets een Date object...
CorrectLye schreef op dinsdag 15 februari 2011 @ 14:18:
Het mooiste is nog dat deze functionaliteit al in javascript zit... Je hebt niet voor niets een Date object...
To spec:R4gnax schreef op dinsdag 15 februari 2011 @ 13:17:
[...]
Ik zou eerder zeggen; het ontbreken van correcte declaraties voor de day, month en year variabelen.
Dat je daar dan globals voor gebruikt is weer een andere WTF, maar het doet nu iig wat de functie zegt dat het doet.// Also separates date into month, day, and year variables
[ Voor 16% gewijzigd door .oisyn op 15-02-2011 14:44 ]
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.
C#:
1
2
3
4
5
6
7
8
9
10
| try { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } |
Fijn debuggen

[ Voor 15% gewijzigd door Ventieldopje op 16-02-2011 13:03 ]
www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8
Dat is irritant ja 
Je kunt overigens in Visual Studio aangeven dat je alle exceptions wilt behandelen, niet alleen de user-unhandled.
Kijk in het menu bij Debug > Exceptions.
Je kunt overigens in Visual Studio aangeven dat je alle exceptions wilt behandelen, niet alleen de user-unhandled.
Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana
Vind het toch niet echt netjes om als het programma op zn bakkes gaat een schermvullende messagebox te geven met een gigantische callstack
www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8
Ah zo, nee dat is inderdaad niet netjes
Ik dacht dat het je puur om het debuggen ging
Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana
Zo kom ik helaas nog wel meer van die dingen tegen
www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8
Is juist wel handig, zo kan de gebruiker een gedetaileerde foutmelding doorsturen naar de servicedesk
Battle.net - Jandev#2601 / XBOX: VriesDeJ
Beter: Eenvoudige melding naar de gebruiker sturen, stacktrace e.d. wel doorsturen of beschikbaar maken maar niet gelijk tonen.Jan_V schreef op woensdag 16 februari 2011 @ 12:41:
Is juist wel handig, zo kan de gebruiker een gedetaileerde foutmelding doorsturen naar de servicedesk
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| function convertDate($date, $endDate = false) { if (!$endDate) { $dateArray = explode('-', $date); list($day, $month, $year) = $dateArray; return "$month-$day-$year"; } else { $timeStamp = strtotime($date); $timeStamp += (24 * 60 * 60); return date('m-d-Y', $timeStamp); } |
Oude code van mij. Waar het voor gebruikt werd? Om de datum in een query te kunnen gebruiken. En BETWEEN gaf niet het juiste resultaat, dus moest er voor een einddatum een dag extra mee worden geteld. Toen ik het net zeg, schaamde ik me wild. Een gewone vergelijking op timestamp >= '2010-01-01' AND timestamp <= '2010-12-31' had ook voldaan.

Verwijderd
Dat kan beterPhas0r schreef op woensdag 16 februari 2011 @ 11:20:
C#:
1 2 3 4 5 6 7 8 9 10 try { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } catch (Exception ex) { MessageBox.Show(ex.ToString()); }
Fijn debuggen
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FrmMD5()); } static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { MessageBox.Show(e.Exception.ToString()); } |
[ Voor 11% gewijzigd door Verwijderd op 16-02-2011 14:29 ]
Datetime object is leuk maar beperkt. Probleem is dat als je user input oppakt en in het date object gooit, er onverwachte dingen gebeuren bij bijv. 30-02-2011: JS datetime object telt door (dus je ingevulde datum komt op begin maart uit). Beste is dus eerst middels regex zeker te weten dat de inputs kloppen, bijvoorbeeld:Lye schreef op dinsdag 15 februari 2011 @ 14:18:
Het mooiste is nog dat deze functionaliteit al in javascript zit... Je hebt niet voor niets een Date object...
JavaScript:
1
| /^((0?[1-9]|[12][0-9]|3[01])[-](0?[1-9]|1[012])[-](?:19|20)\d{2})$/i |
En daarna nog dubbelchecken of je ook correcte waarden hebt ingevoerd. En dan nog server-side valideren
K54/R1250RS | K48/K1600GT | E61/550i
Ik heb gister dit juweeltje geprogrammeerd om iets te parsen:
Comment zegt het al, direct parsen werkt niet met deze programmeertaal...
Comment zegt het al, direct parsen werkt niet met deze programmeertaal...
OpenEdge ABL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| /* Vieze oplossing, maar kan niet anders, direct parsen werkt niet */ case monthString: when "Jan" then monthInt = 1. when "Feb" then monthInt = 2. when "Mar" then monthInt = 3. when "Apr" then monthInt = 4. when "May" then monthInt = 5. when "Jun" then monthInt = 6. when "Jul" then monthInt = 7. when "Aug" then monthInt = 8. when "Sep" then monthInt = 9. when "Oct" then monthInt = 10. when "Nov" then monthInt = 11. when "Dec" then monthInt = 12. end case. |
Wat is "direct parsen"
. Ik zou zelf wel gewoon een lookup doen met een of andere datastructuur, of kan dat ook niet?
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 zou dit als volgt doen:Davio schreef op woensdag 16 februari 2011 @ 14:43:
Ik heb gister dit juweeltje geprogrammeerd om iets te parsen:
Comment zegt het al, direct parsen werkt niet met deze programmeertaal...
[...]
OpenEdge ABL:
1
| monthInt = lookup(monthString, "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"). |
Oftewel check met je validatie of je input gelijk is aan je output (qua datum)noes schreef op woensdag 16 februari 2011 @ 14:40:
[...]
Datetime object is leuk maar beperkt. Probleem is dat als je user input oppakt en in het date object gooit, er onverwachte dingen gebeuren bij bijv. 30-02-2011: JS datetime object telt door (dus je ingevulde datum komt op begin maart uit). Beste is dus eerst middels regex zeker te weten dat de inputs kloppen, bijvoorbeeld:
JavaScript:
1/^((0?[1-9]|[12][0-9]|3[01])[-](0?[1-9]|1[012])[-](?:19|20)\d{2})$/i
En daarna nog dubbelchecken of je ook correcte waarden hebt ingevoerd. En dan nog server-side valideren
Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.
Beter.gvdh schreef op woensdag 16 februari 2011 @ 15:03:
[...]
Ik zou dit als volgt doen:
OpenEdge ABL:
1 monthInt = lookup(monthString, "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec").
Maar ik baalde er zo van dat het niet direct geparsed kon worden dat ik niet verder nadacht en gelijk voor de lelijke oplossing ging.
Met direct parsen bedoel ik via een library-functie als DateTime.TryParse() of iets dergelijks.
Verwijderd
En dit krijgen wij op school als we het over C++ hebben...
Waarom je een imaginair getal wil overloaden naar een complex getal is mij een raadsel, naast het feit dat complexe getallen in de C++ standard library zitten...
Maar het wordt nog mooier!
C++:
1
2
3
4
5
6
7
| class ImaginairGetalKlasse { // Klasse data }; class ComplexGetalKlasse : public ImaginarGetalKlasse { // Klasse data } |
Waarom je een imaginair getal wil overloaden naar een complex getal is mij een raadsel, naast het feit dat complexe getallen in de C++ standard library zitten...

Maar het wordt nog mooier!
C++:
1
| #define Null NULL |
[ Voor 14% gewijzigd door Verwijderd op 17-02-2011 02:08 ]
code:
1
| #define Null true |
Ik ken c++ niet zo goed, maar mag bovenstaande? Dan lijkt me dit echt een subliem iets om mee te beginnen... (not)
No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.
Verwijderd
Het bovenstaande mag volgens mij wel ja. Sterker nog, volgens mij is het mogelijk om dit te doen:
Om je collega's op 1 april gek te maken
C++:
1
| #define NULL true |
Om je collega's op 1 april gek te maken
Has-a relationships dmv public inheritanceVerwijderd schreef op donderdag 17 februari 2011 @ 02:04:
En dit krijgen wij op school als we het over C++ hebben...
C++:
1 2 3 4 5 6 7 class ImaginairGetalKlasse { // Klasse data }; class ComplexGetalKlasse : public ImaginarGetalKlasse { // Klasse data }

[ Voor 13% gewijzigd door .oisyn op 17-02-2011 09:15 ]
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.
Klassieke gemene truc,Verwijderd schreef op donderdag 17 februari 2011 @ 02:24:
Het bovenstaande mag volgens mij wel ja. Sterker nog, volgens mij is het mogelijk om dit te doen:
C++:
1#define NULL true
Om je collega's op 1 april gek te maken
Niet in C, wel in C++. Maar dat 0 werkt wil niet zeggen dat 1 ook werkt.
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
Ja, ik heb er ook gewoon een composite van gemaakt.oisyn schreef op donderdag 17 februari 2011 @ 09:14:
[...]
Has-a relationships dmv public inheritance. Probeer een wiskundige maar eens wijs te maken dat de complexe getallen een subset zijn van de imaginaire getallen.
Zo ken ik er nog een:Verwijderd schreef op donderdag 17 februari 2011 @ 02:24:
Het bovenstaande mag volgens mij wel ja. Sterker nog, volgens mij is het mogelijk om dit te doen:
C++:
1#define NULL true
Om je collega's op 1 april gek te maken
Python:
1
2
| True = False False = not False |
Moet je eens zien wat dat voor troep oplevert..
Verwijderd
In C++ kan inderdaad volgens mij ook hetzelfde:
Maar ik weet niet zeker of je keywords mag redefinen...
C++:
1
| #define true false |
Maar ik weet niet zeker of je keywords mag redefinen...
[ Voor 6% gewijzigd door Verwijderd op 17-02-2011 14:06 ]
Dat mag, dit wordt door de preprocessor afgehandeld, het is een puur tekstuele vervanging, de compiler ziet dus overal "false" waar jij "true" hebt neergezet.Verwijderd schreef op donderdag 17 februari 2011 @ 14:05:
In C++ kan inderdaad volgens mij ook hetzelfde:
C++:
1#define true false
Maar ik weet niet zeker of je keywords mag redefinen...
Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.
Meestal toon ik gebruikers een simpele foutmelding/foutscherm en stuur ik 'onderwater' met behulp van de global.asax een e-mailbericht naar mijzelf met daarin de stacktrace, errormessages en andere details die ik interessant vind (paginanaam.aspx indien webapp, datum/tijd, gebruiker details, enzovoort). Zo hoeft de gebruiker geen actie te ondernemen op een fout en kan ik hem toch eventueel benaderen met vragen (nog nooit nodig geweest).YopY schreef op woensdag 16 februari 2011 @ 12:45:
[...]
Beter: Eenvoudige melding naar de gebruiker sturen, stacktrace e.d. wel doorsturen of beschikbaar maken maar niet gelijk tonen.
Is ook leuk als je de code in die functie vergeet te try catchenReneDD schreef op donderdag 17 februari 2011 @ 16:55:
[...]
Meestal toon ik gebruikers een simpele foutmelding/foutscherm en stuur ik 'onderwater' met behulp van de global.asax een e-mailbericht naar mijzelf met daarin de stacktrace, errormessages en andere details die ik interessant vind (paginanaam.aspx indien webapp, datum/tijd, gebruiker details, enzovoort). Zo hoeft de gebruiker geen actie te ondernemen op een fout en kan ik hem toch eventueel benaderen met vragen (nog nooit nodig geweest).
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Volgens mij maakt iedereen die fout wel een keer. Krijg je ook alsnog een lelijk errorscherm met de melding dat je applicatie in een oneindige lus terecht is gekomen.Gertjan. schreef op donderdag 17 februari 2011 @ 17:37:
[...]
Is ook leuk als je de code in die functie vergeet te try catchenBen dat ooit vergeten, er ging iets mis bij het wegschrijven van een logfile, maar het zenden van de mail lukte wel. Resultaat ontiegelijk veel e-mails en een vastgelopen application pool
Faalpuntje uit m'n CMS aangezien ik niet zo ff 123 een betere methode kon bedenken voor het deleten van users (met confirm bericht)
Edit: Ik faal nog harder als ik dacht... Vergeten om de <tr> af te sluiten in mijn while -.-"
PHP:
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
| function users() { echo "<SCRIPT LANGUAGE=\"Javascript\"> <!--- function decision(message, url){ if(confirm(message)) location.href = url; } // ---> </SCRIPT> "; $query = 'SELECT * FROM users ORDER BY users_lvl DESC, users_login ASC'; $query2 = mysql_query($query) OR die (mysql_error()); echo "<table> <tr> <td>Name</td> <td>E-Mail</td> <td></td> <td></td> </tr> "; while ($row = mysql_fetch_array($query2)) { echo "<tr> <td>$row[users_login]</td> <td>$row[users_email]</td> <td><a href='index.php?act=admin&act2=edit&user=$row[idusers]'>Edit</a> | </td> <td><a href=\"javascript:decision('This will delete user: $row[users_login]. Are you absolutely sure you want to do this?', 'index.php?act=admin&act2=delete&user=$row[idusers]')\">Delete</a></td> "; } echo "</table>"; } |
Edit: Ik faal nog harder als ik dacht... Vergeten om de <tr> af te sluiten in mijn while -.-"
[ Voor 3% gewijzigd door Jeffroiscool op 18-02-2011 12:41 ]
League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
D'r zitten zelfs zoveel faalpuntjes in dat ik niet weet waar ik moet beginnen...
Als het zo erg is wil je de rest van mijn CMS niet zienDavio schreef op vrijdag 18 februari 2011 @ 12:42:
D'r zitten zelfs zoveel faalpuntjes in dat ik niet weet waar ik moet beginnen...
League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
Verwijderd
Business logic en presentation logic door elkaar?Davio schreef op vrijdag 18 februari 2011 @ 12:42:
D'r zitten zelfs zoveel faalpuntjes in dat ik niet weet waar ik moet beginnen...
Die snap ik niet? Leg uitVerwijderd schreef op vrijdag 18 februari 2011 @ 12:50:
[...]
Business logic en presentation logic door elkaar?
League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
Business logic en presentatie, inderdaad. En daarnaast:
• functienaam die niets zegt over wat er gebeurt.
• $query2 is eigenlijk een result set
• $row[users_login]: geen '' om strings die een element in een array aanduiden
• Inline Javascript
• functienaam die niets zegt over wat er gebeurt.
• $query2 is eigenlijk een result set
• $row[users_login]: geen '' om strings die een element in een array aanduiden
• Inline Javascript
De business logic is in dit geval de query. Wat er normaal gedaan wordt is dat je de result set meegeeft aan een template (output) en die template 'weet' wat 'ie met die results moet doen. Je hebt die twee stappen hier op een hoop gegooid zodat het moeilijker te onderhouden wordt.
[ Voor 46% gewijzigd door Jaap-Jan op 18-02-2011 12:58 ]
| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett
Hij bedoelt dat je het beste PHP (buisiness; werk) gescheiden kan houden van je HTML (presentatie).
Ikzelf gebruik dat ook voor voor mijn CMS, maar voor een admin-backend vind ik het onnodig. Die style je toch niet
☎ Telecommunicatie van vroeger
🚅Alles over spoor en treintjes
Dat je selects en HTML output in het zelfde deel zitten. Het is netter om de logica om data uit een DB te trekken te verhuizen naar een aparte laag/class en uiteraard is het ook mooier om met objectjes te werken in plaats van rechtstreeks spul uit je row te vissen.
Daarnaast vind ik echo met een hoop HTML ook niet echt prachtig, maar goed dat zie je vaker in PHP.
ik zie zelf liever:
PHP:
1
2
3
4
5
6
7
| <?php for($i = 0; i < $records.length; i++) { ?> HIER KOMT DE HTML <b><? echo $records[$i]; ?></b> <?php } ?> |
Let niet op de syntax die zal vast niet kloppen. Is een tijdje geleden dat ik PHP heb gedaan.
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Je hebt een functie gemaakt die users ophaalt, maar schijnbaar ook direct de html opmaak verzorgt. Doorgaans wil je adt soort dingen scheiden. Verder gebruik je voor de arary keys niet netjes strings (want er staan geen quotes omheen).
Persoonlijk ben ik niet heel erg gecharmeerd van de perl-actige or die() constructies, dit geeft niet een heel briljante user experience als er iets verkeerd gaat.
Je gebruikt geen connection resource voor je mysql operaties. En ik zou je $query2 variabele mogelijk $result noemen oid, maar dat is echt een persoonlijke keuze denk ik.
Overigens, een <tr> tag hoe je niet af te sluiten (evenals de <th> en <td> tags), alhoewel het wel nettere code oplevert.
Persoonlijk ben ik niet heel erg gecharmeerd van de perl-actige or die() constructies, dit geeft niet een heel briljante user experience als er iets verkeerd gaat.
Je gebruikt geen connection resource voor je mysql operaties. En ik zou je $query2 variabele mogelijk $result noemen oid, maar dat is echt een persoonlijke keuze denk ik.
Overigens, een <tr> tag hoe je niet af te sluiten (evenals de <th> en <td> tags), alhoewel het wel nettere code oplevert.
@.Gertjan: en nog mooier imho:
PHP:
1
2
3
4
5
6
| <?php $numRecords = count($records); for($i = 0; $i < $numRecords; $i++): ?> <!-- HIER KOMT DE HTML --> <b><? echo $records[$i]; ?></b> <?php endfor; ?> |
[ Voor 4% gewijzigd door Jaap-Jan op 18-02-2011 13:03 ]
| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett
En om even verder te borduren op je code:
Zoals al eerder gezegd was is mysql_query()_ een resultset, dus de naam $query2 slaat gewoon nergens op.
Bovendien is het gewoon fout om je script dood te laten gaan als je query niet goed werkt. Je layout wordt dan hard afgekapt en e.v.t andere zaken en queries worden niet afgehandeld.
het beste is om dit met if-else af te handelen:
Okay, je kan dan leuke genestte if-else-jes krijgen, maar met een class die je database zaken afhandeld kan je je code mooi opdelen in meerdere verschillende lagen om het beter onderhoudbaar te maken.
PHP:
1
2
| $query = mysql_query("SELECT... FROM .... WHERE...."); $query2 = mysql_query($query) OR die (mysql_error()); |
Zoals al eerder gezegd was is mysql_query()_ een resultset, dus de naam $query2 slaat gewoon nergens op.
Bovendien is het gewoon fout om je script dood te laten gaan als je query niet goed werkt. Je layout wordt dan hard afgekapt en e.v.t andere zaken en queries worden niet afgehandeld.
het beste is om dit met if-else af te handelen:
PHP:
1
2
3
4
5
6
7
8
| <?php $result = mysql_query($query) if ($result) { // doe wat je wilt doen, als alles goed gaat met je query } else { echo "Het ging niet goed: ". mysql_error(); } ?> |
Okay, je kan dan leuke genestte if-else-jes krijgen, maar met een class die je database zaken afhandeld kan je je code mooi opdelen in meerdere verschillende lagen om het beter onderhoudbaar te maken.
[ Voor 7% gewijzigd door AW_Bos op 18-02-2011 13:03 ]
☎ Telecommunicatie van vroeger
🚅Alles over spoor en treintjes
Of misschien zo nog mooier:
PHP:
1
2
3
4
5
6
| $numRecords = count($records); for($i = 0; $i < $numRecords; $i++){ echo <<< EOI HIER KOMT DE HTML <b>{$records[$i]}</b> EOI; } |
Ow die endfor kan ook natuurlijk. Dat is best een mooie constructie, beter dan inderdaad een zwevende accolade.Jaap-Jan schreef op vrijdag 18 februari 2011 @ 13:01:
@.Gertjan: en nog mooier imho:
PHP:
1 2 3 4 5 6 <?php $numRecords = count($records); for($i = 0; $i < $numRecords; $i++): ?> <!-- HIER KOMT DE HTML --> <b><? echo $records[$i]; ?></b> <?php endfor; ?>
Overigens is het echt nodig om de $numRecords van te voren te bepalen? Sommige talen hebben de lengte toch al in het geheugen waardoor de .length niet echt zwaar meer is? Het is wel netter hoor, ben ik het mee eens, maar vraag me af of het echt nodig is.
Oeh die is interessant, zou je die wat verder toe kunnen lichten? Ik zie <<< EOI en de methodiek in de {$records[$i]} voor het eerst.borft schreef op vrijdag 18 februari 2011 @ 13:04:
Of misschien zo nog mooier:
PHP:
1 2 3 4 5 6 $numRecords = count($records); for($i = 0; $i < $numRecords; $i++){ echo <<< EOI HIER KOMT DE HTML <b>{$records[$i]}</b> EOI; }
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Je hebt toch ook een foreach in PHP?
Edit: D'r zijn ook zat MVC-frameworks die je kunt proberen, moet je maar eens naar Googlen.
PHP:
1
2
3
4
| <?php foreach($records as $record): ?> <!-- HIER KOMT DE HTML --> <b><?php echo $record; ?></b> <?php endforeach; ?> |
Edit: D'r zijn ook zat MVC-frameworks die je kunt proberen, moet je maar eens naar Googlen.
[ Voor 20% gewijzigd door Davio op 18-02-2011 13:16 ]
Dat heet heredoc syntaxOeh die is interessant, zou je die wat verder toe kunnen lichten? Ik zie <<< EOI en de methodiek in de {$records[$i]} voor het eerst.
[ Voor 75% gewijzigd door eamelink op 18-02-2011 13:15 ]
Jaap-Jan schreef op vrijdag 18 februari 2011 @ 12:56:
Business logic en presentatie, inderdaad. En daarnaast:
• functienaam die niets zegt over wat er gebeurt.
• $query2 is eigenlijk een result set Noted en ik zal in dit soort zaken $result gebruiken
• $row[users_login]: geen '' om strings die een element in een array aanduiden Ik ben zoiezo altijd voorzichtig met quotes in een echo maar ik zal er voortaan aan denken.
• Inline Javascript Andere goede manier om een conformatie te krijgen? Ik wil alles op 1 pagina houden (ik maak gebruik van act's
[...]
De business logic is in dit geval de query. Wat er normaal gedaan wordt is dat je de result set meegeeft aan een template (output) en die template 'weet' wat 'ie met die results moet doen. Je hebt die twee stappen hier op een hoop gegooid zodat het moeilijker te onderhouden wordt.
Dit ben ik later ook van plan, maar in mijn backends doe ik dit meestal niet. Ik zit er over na te denken om TPL weer eens te gaan proberen.AW_Bos schreef op vrijdag 18 februari 2011 @ 12:56:
[...]
Hij bedoelt dat je het beste PHP (buisiness; werk) gescheiden kan houden van je HTML (presentatie).
Ikzelf gebruik dat ook voor voor mijn CMS, maar voor een admin-backend vind ik het onnodig. Die style je toch niet
Hele tijd opening de opening tag voor <?php of <? en ?> vind ik zelf ook niet echt prachtig. Daarbij hoef ik in een rechtstreekse echo niet opnieuw nog eens echo voor elke variable te zetten..Gertjan. schreef op vrijdag 18 februari 2011 @ 12:57:
[...]
Dat je selects en HTML output in het zelfde deel zitten. Het is netter om de logica om data uit een DB te trekken te verhuizen naar een aparte laag/class en uiteraard is het ook mooier om met objectjes te werken in plaats van rechtstreeks spul uit je row te vissen.
Daarnaast vind ik echo met een hoop HTML ook niet echt prachtig, maar goed dat zie je vaker in PHP.
ik zie zelf liever:
PHP:
1 2 3 4 5 6 7 <?php for($i = 0; i < $records.length; i++) { ?> HIER KOMT DE HTML <b><? echo $records[$i]; ?></b> <?php } ?>
Let niet op de syntax die zal vast niet kloppen. Is een tijdje geleden dat ik PHP heb gedaan.
Dat die() is me ooit aangeleerd door iemand. Vroeger had ik nog een class gtfo waar ik de footer eerst plaats en daarna die ();borft schreef op vrijdag 18 februari 2011 @ 13:00:
Je hebt een functie gemaakt die users ophaalt, maar schijnbaar ook direct de html opmaak verzorgt. Doorgaans wil je adt soort dingen scheiden. Verder gebruik je voor de arary keys niet netjes strings (want er staan geen quotes omheen).
Persoonlijk ben ik niet heel erg gecharmeerd van de perl-actige or die() constructies, dit geeft niet een heel briljante user experience als er iets verkeerd gaat.
Je gebruikt geen connection resource voor je mysql operaties. En ik zou je $query2 variabele mogelijk $result noemen oid, maar dat is echt een persoonlijke keuze denk ik.
Overigens, een <tr> tag hoe je niet af te sluiten (evenals de <th> en <td> tags), alhoewel het wel nettere code oplevert.
PHP:
1
2
3
| // Connect to MySQL database. $database = new database(); $database->connect(); |
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| class database { private $host; private $user; private $password; private $database; public function connect() { $verbinding = mysql_connect ($this->host, $this->user, $this->password) or die("Connection problem: " . mysql_error()); mysql_select_db($this->database); } public function __construct() { if(!file_exists("conf/database.conf.php")){ //no config file message }else{ include('conf/database.conf.php'); } } } |
Dit gebruik ik ervoor, of is er een betere manier om de connectie met database te houden?
Mooie stuk code, ik ga het zeker op die manier implementeren aangezien het er idd een stuk beter uit ziet.AW_Bos schreef op vrijdag 18 februari 2011 @ 13:01:
En om even verder te borduren op je code:
PHP:
1 2 $query = mysql_query("SELECT... FROM .... WHERE...."); $query2 = mysql_query($query) OR die (mysql_error());
Zoals al eerder gezegd was is mysql_query()_ een resultset, dus de naam $query2 slaat gewoon nergens op.
Bovendien is het gewoon fout om je script dood te laten gaan als je query niet goed werkt. Je layout wordt dan hard afgekapt en e.v.t andere zaken en queries worden niet afgehandeld.
het beste is om dit met if-else af te handelen:
PHP:
1 2 3 4 5 6 7 8 <?php $result = mysql_query($query) if ($result) { // doe wat je wilt doen, als alles goed gaat met je query } else { echo "Het ging niet goed: ". mysql_error(); } ?>
Okay, je kan dan leuke genestte if-else-jes krijgen, maar met een class die je database zaken afhandeld kan je je code mooi opdelen in meerdere verschillende lagen om het beter onderhoudbaar te maken.
Ik probeer sowieso al dingen per class af te handelen. Zoals
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
| class show { function module($id) { if ($id == "") { // Show module 1, (this being "Home" in our case.) $row = mysql_fetch_array(mysql_query("SELECT * FROM modules WHERE id=1")); } else { $row = mysql_fetch_array(mysql_query("SELECT * FROM modules WHERE id=$id")); } echo $row['content']; } } |
Staat nog wel meer in die class maar even voor het principe te tag class afgesloten.
En dan in mijn act.php (die ik include in de template voor de content)
PHP:
1
2
3
| if(!isset($_GET['act'])){ $show->module($_GET['module']); } |
Bedankt voor het kritiek allemaal, ik probeer sowieso te verbeteren waar mogelijk.
League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
Davio schreef op vrijdag 18 februari 2011 @ 13:14:
, het ging over andermans code, die presentatie en business logic bij elkaar had zitten, hier ... 
Van die foreach weet ik, het ging echter ook maar om het voorbeeld om HTML zonder echo te outputten. Niet op mijn PHP-skillllzz bashen heJe hebt toch ook een foreach in PHP?
PHP:
1 2 3 4 <?php foreach($records as $record): ?> <!-- HIER KOMT DE HTML --> <b><?php echo $record; ?></b> <?php endforeach; ?>
Edit: D'r zijn ook zat MVC-frameworks die je kunt proberen, moet je maar eens naar Googlen.
Ah thanks, ziet er behoorlijk handig uit. Mocht ik ooit weer in PHP iets moeten doen ga ik die zeker eens uitzoeken.
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
code:
1
| if(confirm(message)) location.href = url; |
Ik ben enigzins verbaasd dat er nog niemand is gevallen over het feit dat er op deze manier een get ipv post gebruikt wordt om gebruikersgegevens te verwijderen...
Het is een admin backendR4gnax schreef op vrijdag 18 februari 2011 @ 13:44:
code:
1 if(confirm(message)) location.href = url;
Ik ben enigzins verbaasd dat er nog niemand is gevallen over het feit dat er op deze manier een get ipv post gebruikt wordt om gebruikersgegevens te verwijderen...
Anders zou ik een form moeten maken met een knop voor elke gebruiker die ik heb?
League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
Je database class doet ook niets met de verbinding 
Uiteraard kan je ook ingebouwde dingen zoals PDO gebruiken. Als je het echt simpel wilt houden kan je denk ik het makkelijkt mysqli gebruiken (zit standaard in php)
en dan overal het db object gebruiken voor je queries.
Wat betreft het form, je kunt toch gewoon 1 form maken, en daar met js in een variabele het juiste id inzetten op het moment dat je gaat posten?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
| class database { private $link; public function connect $this->link = mysql_connect(); mysql_select_db('database', $this->link); } public function query($query){ return mysql_query($query, $this->link); } } |
Uiteraard kan je ook ingebouwde dingen zoals PDO gebruiken. Als je het echt simpel wilt houden kan je denk ik het makkelijkt mysqli gebruiken (zit standaard in php)
PHP:
1
| $db = new mysqli(); |
en dan overal het db object gebruiken voor je queries.
Wat betreft het form, je kunt toch gewoon 1 form maken, en daar met js in een variabele het juiste id inzetten op het moment dat je gaat posten?
[ Voor 29% gewijzigd door borft op 18-02-2011 15:21 ]
Het is toch juist JS wat ik moet vermijden o.a?borft schreef op vrijdag 18 februari 2011 @ 15:17:
Je database class doet ook niets met de verbinding
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 class database { private $link; public function connect $this->link = mysql_connect(); mysql_select_db('database', $this->link); } public function query($query){ return mysql_query($query, $this->link); } }
Uiteraard kan je ook ingebouwde dingen zoals PDO gebruiken. Als je het echt simpel wilt houden kan je denk ik het makkelijkt mysqli gebruiken (zit standaard in php)
PHP:
1 $db = new mysqli();
en dan overal het db object gebruiken voor je queries.
Wat betreft het form, je kunt toch gewoon 1 form maken, en daar met js in een variabele het juiste id inzetten op het moment dat je gaat posten?
League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
Volgens collega's schijnt PDO ook sneller te zijn dan old school mysql_connect() etc. Geen idee of dat waar is
Geen idee of gewone query's sneller zijn, maar goed gebruik van prepared statements is vanzelfsprekend performanter. En dat heb je bij die oude mysql_ library nietalienfruit schreef op vrijdag 18 februari 2011 @ 15:49:
Volgens collega's schijnt PDO ook sneller te zijn dan old school mysql_connect() etc. Geen idee of dat waar is
Sowieso snap ik niet waarom mysql_ nog zoveel gebruikt wordt. Niet dat 't altijd uitmaakt, maar mysqli_ gebruiken is nu echt niet moeilijker.
Is dit eigenlijk een slechte manier?
PHP:
1
2
3
| function setPermission($username, $password) { global $db; } |
Ik krijg regelmatig te horen dat het gebruik van global echt vermeden moet worden en het altijd wel zonder kan. Maar het alternatief is bij elke functie het db-object als parameter meegeven, ik kan me echt niet voorstellen dat dat beter is?
'Elke' functie zit in een 'goed' systeem in een klasse, die het db-object meekrijgt bij constructie (bijv door een factory). En anders kan je het met een singleton oplossen: DB::getInstance().
Verwijderd
Dit kwam ik gister tegen in de code van een klasgenoot:
Standaard.h
LCD.c
Ja, dat is inderdaad l33t wat daar staat. Ik heb de beste jongen even fijn uitgelegd hoe je het dus wel kan doen (in mijn optiek)...
Standaard.h
C:
1
2
| #define Tekst char #define Leeg void |
LCD.c
C:
1
2
3
4
| Leeg Functie1 (Tekst * tekst) { Z3t0pLCD (tekst); } |
Ja, dat is inderdaad l33t wat daar staat. Ik heb de beste jongen even fijn uitgelegd hoe je het dus wel kan doen (in mijn optiek)...
Vind die defines eigenlijk zorgwekkender dan de methodenaam
Battle.net - Jandev#2601 / XBOX: VriesDeJ
Verwijderd
Meh, ik vind het wel kunnen voor een schoolopdracht, dan snapt de leraar het niet en werkt het wel, dat zorgte bij mij altijd voor een hoog punt
Verwijderd
Het probleem is dus dat het niet voor een opdracht is maar voor ons project. Ergo, de docent krijgt er niets van te zien (aangezien ze nooit naar de code kijken...).
Ik neem aan dat je voor Nederlands slechtere cijfers haalde?Verwijderd schreef op zaterdag 19 februari 2011 @ 20:50:
Meh, ik vind het wel kunnen voor een schoolopdracht, dan snapt de leraar het niet en werkt het wel, dat zorgte bij mij altijd voor een hoog punt
Maar 1337-speak is zoooo 2002, wist niet dat het nog gebruikt wordt.
In mijn ogen is dit een denkfout die veel PHP'ers maken. Dat je logica en presentatie gescheiden moet houden heeft vooral te maken met de structuur van je code (data ophalen -> verwerken -> presentatie) en niet dat je tijdens het presentatiegedeelte nooit een html-tag mag laten uitpoepen door php. Het punt van het gescheiden houden is dat je niet tijdens of tussen het verwerken of ophalen van de data al bezig bent met het presenteren daarvan..Gertjan. schreef op vrijdag 18 februari 2011 @ 13:21:
Davio schreef op vrijdag 18 februari 2011 @ 13:14:
[...]
Van die foreach weet ik, het ging echter ook maar om het voorbeeld om HTML zonder echo te outputten. Niet op mijn PHP-skillllzz bashen he, het ging over andermans code, die presentatie en business logic bij elkaar had zitten, hier ...
Tijdens het presentatiegedeelte maakt het echter niks uit, aangezien je enige doel daar is om de juiste gegevens te outputten. Of je nu echo '<b>hoi</b>' doet of ?><b>hoi</b><?php, dat is totaal irrelevant. Die doen namelijk precies hetzelfde. Persoonlijk zie ik zelfs liever de echo. Heb je namelijk een mooie include 'layout.php' oid met bijvoorbeeld drie plekken waar dynamische content komt te staan, dan zie je tussen de statische html precies drie keer de php tags geopend en gesloten worden. Een stuk duidelijker dan wanneer dat een stuk of twintig keer gebeurt, omdat je elke html-tag wilt vermijden in een echo.
Het zorgt er ook voor dat je nog netjes kan inspringen zonder dat dat dit effect heeft op de output van je code.
Uiteraard kan het allemaal nog mooier met een template engine oid
Wanneer je iets voor jezelf aan het maken bent, een simpel script om tweets te posten via een eigen formulier, dan kan het prima/
Maar wanneer je ook maar een klein beetje richting een applicatie gaat wat je op dat moment aan het bouwen bent - of er ook maar 1 eurocent voor krijgt - dan is het m.i. not done. Het is gewoon niet netjes, daarbij is het niet professioneel en onhandig. Wat als je diezelfde HTML ergens anders nog een keer nodig hebt? Kopieer je hem dan en plak je 'm nog een keer?
Maar wanneer je ook maar een klein beetje richting een applicatie gaat wat je op dat moment aan het bouwen bent - of er ook maar 1 eurocent voor krijgt - dan is het m.i. not done. Het is gewoon niet netjes, daarbij is het niet professioneel en onhandig. Wat als je diezelfde HTML ergens anders nog een keer nodig hebt? Kopieer je hem dan en plak je 'm nog een keer?
Of je went jezelf gewoon aan om (bijna) altijd nette code te gebruiken en te documenteren. Ook al is het alleen voor persoonlijk gebruik. De enige reden waarom ik 'vieze' code zou gebruiken of maken is om te prototypen tijdens of voor het ontwikkelproces.ronn0 schreef op zondag 20 februari 2011 @ 23:28:
Wanneer je iets voor jezelf aan het maken bent, een simpel script om tweets te posten via een eigen formulier, dan kan het prima/
[...]
Het zal wel aan mij liggen, maar output van me code kan hooguit iets schelen als ik het moet debuggen of als het zo klein mogelijk moet worden ( dan minifyer er overheen gooien ).BarôZZa schreef op zondag 20 februari 2011 @ 04:42:
[...]
Het zorgt er ook voor dat je nog netjes kan inspringen zonder dat dat dit effect heeft op de output van je code.
Voor productie zal de layout van gegenereerde code me echt mijn reet roesten. En als het me al iets zou uitmaken dan zou ik het nog in een beautifier oid verwerken, nooit en dan ook echt nooit en te nimmer ga ik er bij het maken van een view rekening mee houden, dat is echt gekkenwerk.
Dan heb je in de viewlaag een loopje, daar keurig extra whitespaces voor gebruikt en dan bevat je output opeens te veel whitespaces...
Gewoon ook afleren om het voor het ontwikkelproces te doen en weldra kom je erachter dat je het ook niet meer gebruikt tijdens prototypen omdat netjes werken niet langer duurt dan slordig werken als je er eenmaal aan gewend bent.alex3305 schreef op maandag 21 februari 2011 @ 00:27:
[...]
Of je went jezelf gewoon aan om (bijna) altijd nette code te gebruiken en te documenteren. Ook al is het alleen voor persoonlijk gebruik. De enige reden waarom ik 'vieze' code zou gebruiken of maken is om te prototypen tijdens of voor het ontwikkelproces.
[ Voor 26% gewijzigd door Gomez12 op 21-02-2011 01:32 ]
@ Ronn0: Als er iets 'not done' is op Tweakers, dan zijn het ongefundeerd sullige dingen suggereren en blindelings wat roepen zonder het te staven met inhoudelijke argumenten. Ik begrijp ook niet echt waar je op doelde met de copy-pasta opmerking.
Maar aangezien je zo'n pro bent, geef ik nog een voorbeeldje en mag je mij uitleggen waarom de tweede optie netter, professioneler en handiger is. Het eerste voorbeeldje opent 1 PHP-tag waarin telkens netjes een img-tag wordt gegenereerd met de variabelen op de juiste plek. Bij het tweede voorbeeld heb ik de HTML buiten de PHP gehouden, waardoor er wel vijf keer een php-tag geopend en gesloten wordt, waarvan drie binnen de img-tag en met een echo erbij. Uiteraard mag je ook jouw aanpak tonen, want ik schrijf alleen tweetscripts voor mezelf
Overigens ben ik dan ook benieuwd wat jij zou doen als je de genereerde HTML code meerdere keren wilt gebruiken. Copy-pasta valt af. Een functie ook, aangezien deze nooit HTML terug mag geven. Dus ik neem aan dat je een apart PHP bestand aanmaakt voor die paar regels en deze meerdere keren gaat includen in je code
?
Maar aangezien je zo'n pro bent, geef ik nog een voorbeeldje en mag je mij uitleggen waarom de tweede optie netter, professioneler en handiger is. Het eerste voorbeeldje opent 1 PHP-tag waarin telkens netjes een img-tag wordt gegenereerd met de variabelen op de juiste plek. Bij het tweede voorbeeld heb ik de HTML buiten de PHP gehouden, waardoor er wel vijf keer een php-tag geopend en gesloten wordt, waarvan drie binnen de img-tag en met een echo erbij. Uiteraard mag je ook jouw aanpak tonen, want ik schrijf alleen tweetscripts voor mezelf
PHP:
1
2
3
4
5
6
| <?php foreach($images AS $imagekey => $image) { echo '<img src="'.$image['src'].'" alt="'.$image['alt'].'" class="'.$image['class'].'">'; } ?> |
PHP:
1
2
3
4
5
6
| <?php foreach($images AS $imagekey => $image) { ?><img src="<?php echo $image['src']; ?>" alt="<?php echo $image['alt']; ?>" class="<?php echo $image['class']; ?>"><?php } ?> |
Overigens ben ik dan ook benieuwd wat jij zou doen als je de genereerde HTML code meerdere keren wilt gebruiken. Copy-pasta valt af. Een functie ook, aangezien deze nooit HTML terug mag geven. Dus ik neem aan dat je een apart PHP bestand aanmaakt voor die paar regels en deze meerdere keren gaat includen in je code
Ik zeg ook niet dat het nooit mag, maar het is netter om gewoon je HTML gescheiden te houden, zeker wanneer je mooie classes gebruikt. Wanneer je alles in je index.php plempt maakt het inderdaad niet veel uit, maar als je een mooie class Persoon hebt wil je bij het ophalen van bijvoorbeeld de naam nooit HTML mee krijgen, maar geloof me sommige mensen die het niet zo nauw nemen met scheiding presentatie/logica doen dat dus wel. Die hebben dan ergens op een scherm de naam dikgedrukt nodig en gooien de <b> in de GetName() functie. Als je deze dan ergens wilt gebruiken waar je hem niet dik wilt hebben ben je dus de pineut.BarôZZa schreef op zondag 20 februari 2011 @ 04:42:
[...]
In mijn ogen is dit een denkfout die veel PHP'ers maken. Dat je logica en presentatie gescheiden moet houden heeft vooral te maken met de structuur van je code (data ophalen -> verwerken -> presentatie) en niet dat je tijdens het presentatiegedeelte nooit een html-tag mag laten uitpoepen door php. Het punt van het gescheiden houden is dat je niet tijdens of tussen het verwerken of ophalen van de data al bezig bent met het presenteren daarvan.
Zie ook geregeld dat mensen bijvoorbeeld met een forum of gastenboek data inclusief HTML tags opslaan in de DB, dat is handig voor web-only, maar je kunt daarna zo goed als niets meer met de data zonder het grondig te schonen. Je komt er niet onderuit om iets van opmaakt op te willen slaan, maar of HTML daar zo goed in is?
Ik denk dat het vooral belangrijk is om een balans te vinden en te zorgen dat je zo min mogelijk weergave logica in je logica laag hebt zitten. Je ontkomt er niet aan om het soms toch te doen, maar het is vaak beter van niet. Het is niet zo zwart/wit, voor beide oplossingen is iets te zeggen, je moet zoeken naar de best oplossing voor je probleem, echter wordt het scheiden van logica en presentatie vaak wel gewaardeerd en kan het je op termijn minder problemen opleveren dan wanneer het nauw in elkaar is verweven.
Binnen .NET is het bijvoorbeeld soms netter om in een structuur met HTMLGeneric's op te bouwen binnen je class dan een HTML string te genereren.
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Dit zou eigenlijk betekenen dat mijn manier van alle code op slechts een paar pagina's houden slecht is en alsnog voor elke pagina toch een compleet andere php pagina te maken?.Gertjan. schreef op maandag 21 februari 2011 @ 07:32:
[...]
Ik zeg ook niet dat het nooit mag, maar het is netter om gewoon je HTML gescheiden te houden, zeker wanneer je mooie classes gebruikt. Wanneer je alles in je index.php plempt maakt het inderdaad niet veel uit, maar als je een mooie class Persoon hebt wil je bij het ophalen van bijvoorbeeld de naam nooit HTML mee krijgen, maar geloof me sommige mensen die het niet zo nauw nemen met scheiding presentatie/logica doen dat dus wel. Die hebben dan ergens op een scherm de naam dikgedrukt nodig en gooien de <b> in de GetName() functie. Als je deze dan ergens wilt gebruiken waar je hem niet dik wilt hebben ben je dus de pineut.
Zie ook geregeld dat mensen bijvoorbeeld met een forum of gastenboek data inclusief HTML tags opslaan in de DB, dat is handig voor web-only, maar je kunt daarna zo goed als niets meer met de data zonder het grondig te schonen. Je komt er niet onderuit om iets van opmaakt op te willen slaan, maar of HTML daar zo goed in is?
Ik denk dat het vooral belangrijk is om een balans te vinden en te zorgen dat je zo min mogelijk weergave logica in je logica laag hebt zitten. Je ontkomt er niet aan om het soms toch te doen, maar het is vaak beter van niet. Het is niet zo zwart/wit, voor beide oplossingen is iets te zeggen, je moet zoeken naar de best oplossing voor je probleem, echter wordt het scheiden van logica en presentatie vaak wel gewaardeerd en kan het je op termijn minder problemen opleveren dan wanneer het nauw in elkaar is verweven.
Binnen .NET is het bijvoorbeeld soms netter om in een structuur met HTMLGeneric's op te bouwen binnen je class dan een HTML string te genereren.
League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
Nee, daar hebben ze strip_tags() voor uitgevonden.Gertjan. schreef op maandag 21 februari 2011 @ 07:32:
[...]
Die hebben dan ergens op een scherm de naam dikgedrukt nodig en gooien de <b> in de GetName() functie. Als je deze dan ergens wilt gebruiken waar je hem niet dik wilt hebben ben je dus de pineut.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
mijn slechte programmeer voorbeeld van gisteren:
In C direct andere .c bestanden includen, maar dat werkt niet om dat VS ze dan ook probeert te compileren (dubbele verwijzingen) dus ze dan maar hernomen naar .h zodat je toch syntax highlighting hebt en ze gewoon kan includen.
*shivers*
Misschien toch maar even echte header files gaan maken, maarja voor dit soort school projectjes is dat altijd wat vervelend.
In C direct andere .c bestanden includen, maar dat werkt niet om dat VS ze dan ook probeert te compileren (dubbele verwijzingen) dus ze dan maar hernomen naar .h zodat je toch syntax highlighting hebt en ze gewoon kan includen.
*shivers*
Misschien toch maar even echte header files gaan maken, maarja voor dit soort school projectjes is dat altijd wat vervelend.
Dat is dan inderdaad wel een beetje de keerzijde van de medaille. Je kan natuurlijk ook je pagina's zo maken dat deze meerdere "functies" kunnen hebben. Zo heb je vaak voor view en edit slechts 1 pagina nodig. Op die manier verklein je het aantal pagina's. Maar zoals gezegd je moet daar een balans in vinden. Als je er niet onderuit komt om een stukje HTML uit te poepen in je class zonder je in vreemde bochten te wringen moet je gewoon de HTML daar uitpoepen. Allerlei vreemde bochten maken de code namelijk niet altijd beter en zorgen vaak voor een beroerdere leesbaarheid en leesbaarheid en duidelijkheid zijn denk ik nog belangrijker.Jeffroiscool schreef op maandag 21 februari 2011 @ 09:18:
[...]
Dit zou eigenlijk betekenen dat mijn manier van alle code op slechts een paar pagina's houden slecht is en alsnog voor elke pagina toch een compleet andere php pagina te maken?
Overigens loopt er in de coffee corner een vergelijkbare "discussie".
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Exclude from buildroy-t schreef op maandag 21 februari 2011 @ 10:21:
mijn slechte programmeer voorbeeld van gisteren:
In C direct andere .c bestanden includen, maar dat werkt niet om dat VS ze dan ook probeert te compileren (dubbele verwijzingen)
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 ben misschien geen Ronn0BarôZZa schreef op maandag 21 februari 2011 @ 01:42:
Maar aangezien je zo'n pro bent, geef ik nog een voorbeeldje en mag je mij uitleggen waarom de tweede optie netter, professioneler en handiger is. Het eerste voorbeeldje opent 1 PHP-tag waarin telkens netjes een img-tag wordt gegenereerd met de variabelen op de juiste plek. Bij het tweede voorbeeld heb ik de HTML buiten de PHP gehouden, waardoor er wel vijf keer een php-tag geopend en gesloten wordt, waarvan drie binnen de img-tag en met een echo erbij. Uiteraard mag je ook jouw aanpak tonen, want ik schrijf alleen tweetscripts voor mezelf
Een voorbeeld van hoe ik het doe (ook al wordt het door sommige code guidelines afgeraden):
PHP:
1
2
3
| <? foreach ($images as $image): ?> <img src="<?=$image['src']?>" alt="<?=$image['alt']?>" class="<?=$image['class']?>"> <? endforeach; ?> |
een templates.php, met bijvoorbeeld zoiets:BarôZZa schreef op maandag 21 februari 2011 @ 01:42:
Overigens ben ik dan ook benieuwd wat jij zou doen als je de genereerde HTML code meerdere keren wilt gebruiken. Copy-pasta valt af. Een functie ook, aangezien deze nooit HTML terug mag geven. Dus ik neem aan dat je een apart PHP bestand aanmaakt voor die paar regels en deze meerdere keren gaat includen in je code?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
| <? //include zooi indien nodig function printHeader($title, $var1, $var2, $var3) { ?> <html> <head> <title><?=$title ?></title> ... </head> <? } //end printHeader ?> |
Lange lappen html tussen ?> en <? (leukere syntax highlighting), veel variabelen ofzo in echo's. Dat is hoe ik het doe als ik geen CMS gebruik.
Ik als non-pr0 kies voor notatie #3 of #4:BarôZZa schreef op maandag 21 februari 2011 @ 01:42:
Maar aangezien je zo'n pro bent, geef ik nog een voorbeeldje en mag je mij uitleggen waarom de tweede optie netter, professioneler en handiger is. Het eerste voorbeeldje opent 1 PHP-tag waarin telkens netjes een img-tag wordt gegenereerd met de variabelen op de juiste plek. Bij het tweede voorbeeld heb ik de HTML buiten de PHP gehouden, waardoor er wel vijf keer een php-tag geopend en gesloten wordt, waarvan drie binnen de img-tag en met een echo erbij. Uiteraard mag je ook jouw aanpak tonen, want ik schrijf alleen tweetscripts voor mezelf![]()
PHP:
1 2 3 4 5 6 <?php foreach($images AS $imagekey => $image) { echo '<img src="'.$image['src'].'" alt="'.$image['alt'].'" class="'.$image['class'].'">'; } ?>
PHP:
1 2 3 4 5 6 <?php foreach($images AS $imagekey => $image) { ?><img src="<?php echo $image['src']; ?>" alt="<?php echo $image['alt']; ?>" class="<?php echo $image['class']; ?>"><?php } ?>
PHP:
1
2
3
4
5
6
| <?php foreach($images AS $imagekey => $image) { echo "<img src='{$image['src']'} alt='{$image['alt']}' class='{$image['class']}'>"; } ?> |
Variabelen mogen gewoon binnen double-quoted strings. Je zit alleen wel met lelijke quotes en dergelijke, afweging moeten maken tussen óf single-quoted output in je html, óf escaped double quotes in je code.
Optie #4 is gebruik maken van printf, een functie die stamt uit het C-tijdperk en die specifiek gemaakt is om op een redelijk nette manier variabelen in een string te pleuren zonder vage concat structuren of taalspecifieke features zoals variabelen in strings:
PHP:
1
2
3
4
5
6
| <?php foreach($images AS $imagekey => $image) { printf('<img src="%s" alt="%s" class="%s" />', $image['src'], $image['alt'], $image['class']); } ?> |
Nadeel hiervan is natuurlijk dat de replacement vars in de string weinig context hebben, dus dit soort constructies wil je niet te lang / complex hebben.
Aan de ene kant: Goed punt, logisch, etc. Aan de andere kant: Wat is een beter manier om een gebruiker zijn gekozen input op te slaan? Forums e.d. hebben BBCode dat bij het renderen van de pagina omgezet wordt naar HTML, maar effectief is dat een eigengemaakte subset van HTML. Het is iets veiliger en minder makkelijk uit te buiten (misschien) dan pure HTML, maar uiteindelijk, abstract bekeken, zijn het allebei opmaaktalen, en is er vzviw geen andere manier om 'inline' formatting toe te passen.quote: GertjanZie ook geregeld dat mensen bijvoorbeeld met een forum of gastenboek data inclusief HTML tags opslaan in de DB, dat is handig voor web-only, maar je kunt daarna zo goed als niets meer met de data zonder het grondig te schonen. Je komt er niet onderuit om iets van opmaakt op te willen slaan, maar of HTML daar zo goed in is?
Aan de ene kant: Leuk, hiermee hou je de parameters 'in scope', dwz je kunt niet zonder dat je 'global $nogwat' te doen bij de globale variabelen (oid). Aan de andere kant: het is stiekem nog steeds HTML in PHP code.MBV schreef op maandag 21 februari 2011 @ 10:50:
[...]
een templates.php, met bijvoorbeeld zoiets:
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 <? //include zooi indien nodig function printHeader($title, $var1, $var2, $var3) { ?> <html> <head> <title><?=$title ?></title> ... </head> <? } //end printHeader ?>
Lange lappen html tussen ?> en <? (leukere syntax highlighting), veel variabelen ofzo in echo's. Dat is hoe ik het doe als ik geen CMS gebruik.
Ik ben JSP gewend, overigens niet zo'n hele mooie template taal, maar mbt scope en dergelijke zit dat wel goed in elkaar - je JSP bestand hoeft in theorie alleen maar HTML en JSP tags (XML) te bevatten, met wat 'speciale' info bovenaan (metadata). Wij werken hier meestal vanuit een page.jsp die de header informatie bevat, die op zijn beurt de inhoud van de huidige pagina rendert (zonder te weten wat die inhoud daadwerkelijk is - hij zegt gewoon 'ok jong, ga hier 'es je content renderen'. Wat je dan effectief krijgt:
Java Server Page:
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
| <%@ page language="java" session="false" buffer="none" %> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %> <%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <html> <head> <title>${title}</title> <script src="${staticProjectFilesUrl}/global/script/javascript-${CURRENT_VERSION}.min.js" type="text/javascript"></script> </head> <body class="${bodyClass}"> <div id="container"> <div id="header"> <iets:pagePart label="logo" /> <iets:pagePart label="banner" /> <c:if test="${showNavigation}"> <iets:pagePart label="navigation" /> </c:if> </div> <div id="content"> <!-- etc --> </div> </body> </html> |
Per pagina (in het CMS) kun je bij specifieke eisen een andere page.jsp versie selecteren, maar dat komt maar in specifieke gevallen voor.
iig, punt is, PHP als template taal schiet op bepaalde punten gewoon tekort. Daar kun je op twee manieren mee omgaan: Bekend zijn met de gebreken en daar rekening mee houden, of een template ding (Smarty et al) gebruiken of zelf uitvinden (bijv. dmv functies die een stukje renderen).
asdf, rant, gaat nergens meer over, nvm.
[ Voor 195% gewijzigd door YopY op 21-02-2011 13:38 ]
Mwoah, zie ik anders: dat is gewoon mijn templates.php, waar alle generieke html-zooi in staat. De andere HTML-code staat in de 'frontend'-pagina's, bijv. plaatje.php. Die PHP-pagina vraagt eerst alle gegevens op aan het model, en daaronder staat printheader() en de html-zooi. Voor de schaal van het project (mijn homepageYopY schreef op maandag 21 februari 2011 @ 11:05:
Aan de ene kant: Leuk, hiermee hou je de parameters 'in scope', dwz je kunt niet zonder dat je 'global $nogwat' te doen bij de globale variabelen (oid). Aan de andere kant: het is stiekem nog steeds HTML in PHP code.
C#:
1
| Session.InstellingNaam = (LeesIni("instellingNaam").ToLower() == "ja" || LeesIni("instellingNaam").ToLower() == "true"); |
Mja... ik weet ff niet meer wat ik moet zeggen.
486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22
$res2 = mysql_query("UPDATE 'users' SET 'password' = '".$hpassword."' WHERE 'username' = '".$username."' AND 'email' = '".$email."'");
$result = mysql_query($res2);
Wat doe ik hier fout? Hij voert het goed uit maar er verandert niks in mijn database, Waarschijnlijk is het een hele domme kleine fout. Daarom plaats ik hem hier zodat er niet een apart topic hoeft te komen
$result = mysql_query($res2);
Wat doe ik hier fout? Hij voert het goed uit maar er verandert niks in mijn database, Waarschijnlijk is het een hele domme kleine fout. Daarom plaats ik hem hier zodat er niet een apart topic hoeft te komen
Waarschijnlijk de quotes om de veldnamen. Die mag je alleen quoten met backquotes ( ` ), maar dat is eigenlijk alleen maar nodig als je veldnamen hebt die al een reserved keyword zijn oid.Famous Copra schreef op maandag 21 februari 2011 @ 17:51:
$res2 = mysql_query("UPDATE 'users' SET 'password' = '".$hpassword."' WHERE 'username' = '".$username."' AND 'email' = '".$email."'");
$result = mysql_query($res2);
Wat doe ik hier fout? Hij voert het goed uit maar er verandert niks in mijn database, Waarschijnlijk is het een hele domme kleine fout. Daarom plaats ik hem hier zodat er niet een apart topic hoeft te komen
What do you mean I have no life? I am a gamer, I got millions!
Indien de variabelen direct uit je invoervelden komen, heb je een leuke sql injection mogelijkheid geintroduceerd :Famous Copra schreef op maandag 21 februari 2011 @ 17:51:
$res2 = mysql_query("UPDATE 'users' SET 'password' = '".$hpassword."' WHERE 'username' = '".$username."' AND 'email' = '".$email."'");
$result = mysql_query($res2);
Wat doe ik hier fout? Hij voert het goed uit maar er verandert niks in mijn database, Waarschijnlijk is het een hele domme kleine fout. Daarom plaats ik hem hier zodat er niet een apart topic hoeft te komen
Voeg 'or die(mysql_error())' er aan toe en je weet het ;-)
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.