[alg] Slechtste programmeervoorbeelden deel 4 Vorige deel Overzicht Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1 ... 51 ... 103 Laatste
Acties:
  • 993.658 views

Acties:
  • 0 Henk 'm!

Verwijderd

Niet zoals ze het hebben aangepakt. Dit had eigenlijk in een configuratiebestand moeten staan, niet in core code, en zeker niet in common.py.

Acties:
  • 0 Henk 'm!

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.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
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?
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.

Acties:
  • 0 Henk 'm!

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 ;)

[ Voor 30% gewijzigd door Verwijderd op 15-02-2011 00:31 ]


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
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.
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:
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 ;)
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.

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
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.
Een handmatige lijst met uitzonderingen lijkt me een behoorlijke code smell in euh. het herkenningsalgoritme? zoiets.

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
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.
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.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
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.
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.

“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.”


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:12

Janoz

Moderator Devschuur®

!litemod

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.
The real WTF is natuurlijk dat jij aanneemt dat mensen uberhaupt maar 1 computer heeft ;). Bij mij draaien dergelijke applicaties (Sabnzbd, transmission) op een headless server en dan is het ideaal wanneer ik vanaf elke computer thuis de boel kan bedienen. Ik ben zelf de ontwikkelaar van een alternatief van Sickbeard (of eigenlijk is het andersom. De Episodebutler is ouder dan sickbeard) en ook die werkt middels een eigen ingebouwde webserver. Zo'n eigen ingebouwde webserver stelt geen kont voor aangezien je maar heel weinig functionaliteit nodig hebt. Ik durf zelf te stellen dat die webserver een stuk lichter is dan fullfledged GUI (maar dat is niet helemaal een eerlijke vergelijking aangezien ik de browser zelf dan niet meetel).

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'


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

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.

[ 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...


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
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.

Acties:
  • 0 Henk 'm!

Verwijderd

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.
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.

Acties:
  • 0 Henk 'm!

  • JohnStaakke
  • Registratie: Oktober 2007
  • Laatst online: 01-10 10:56
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 ]


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
php :?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Vooral mooi hoe rapportage naar de gebruiker ook onderdeel is van de functie 8)7

.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 :P

[ 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.


Acties:
  • 0 Henk 'm!

  • JohnStaakke
  • Registratie: Oktober 2007
  • Laatst online: 01-10 10:56
Nee Javascript, maar dit highlight net iets mooier :)

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
JohnStaakke schreef op dinsdag 15 februari 2011 @ 12:46:
[...]


Nee Javascript, maar dit highlight net iets mooier :)
Kan ook prima highlighting aanzetten voor javascript syntax hoor. Gewoon [code=javascript] gebruiken ;)

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 
} 
Maar grootste wtf is wel de alarts in zo'n validatiefunctie :X

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
mithras schreef op dinsdag 15 februari 2011 @ 12:54:
Maar grootste wtf is wel de alarts in zo'n validatiefunctie :X
Ik zou eerder zeggen; het ontbreken van correcte declaraties voor de day, month en year variabelen.
Met behulp van impliciete declaratie eindigen die na een dure scope traversal op je globale window object.

Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 03-10 20:30

Lye

Het mooiste is nog dat deze functionaliteit al in javascript zit... Je hebt niet voor niets een Date object...

Acties:
  • 0 Henk 'm!

  • JohnStaakke
  • Registratie: Oktober 2007
  • Laatst online: 01-10 10:56
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...
Correct :) Ik had het dan ook heel anders aangepakt als ik dit vanaf scratch moet bouwen...maar ja.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

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.
To spec:
// Also separates date into month, day, and year variables
Dat je daar dan globals voor gebruikt is weer een andere WTF, maar het doet nu iig wat de functie zegt dat het doet.

[ 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.


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 04-10 23:59

Ventieldopje

I'm not your pal, mate!

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 :F

[ 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


Acties:
  • 0 Henk 'm!

  • Cloud
  • Registratie: November 2001
  • Laatst online: 17-09 10:39

Cloud

FP ProMod

Ex-moderatie mobster

Dat is irritant ja :P

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.

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


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 04-10 23:59

Ventieldopje

I'm not your pal, mate!

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


Acties:
  • 0 Henk 'm!

  • Cloud
  • Registratie: November 2001
  • Laatst online: 17-09 10:39

Cloud

FP ProMod

Ex-moderatie mobster

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


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 04-10 23:59

Ventieldopje

I'm not your pal, mate!

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


Acties:
  • 0 Henk 'm!

  • Jan_V
  • Registratie: Maart 2002
  • Laatst online: 08:39
Is juist wel handig, zo kan de gebruiker een gedetaileerde foutmelding doorsturen naar de servicedesk :+

Battle.net - Jandev#2601 / XBOX: VriesDeJ


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
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 :+
Beter: Eenvoudige melding naar de gebruiker sturen, stacktrace e.d. wel doorsturen of beschikbaar maken maar niet gelijk tonen.

Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 02-10 09:47
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. |:(

Acties:
  • 0 Henk 'm!

Verwijderd

Phas0r 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 :F
Dat kan beter :p

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 ]


Acties:
  • 0 Henk 'm!

  • noes
  • Registratie: Augustus 2006
  • Niet online

noes

gek op benzine.

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...
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 :)

K54/R1250RS | K48/K1600GT | E61/550i


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Ik heb gister dit juweeltje geprogrammeerd om iets te parsen:

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.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

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.


Acties:
  • 0 Henk 'm!

  • gvdh
  • Registratie: December 2009
  • Laatst online: 11:15
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...

[...]
Ik zou dit als volgt doen:

OpenEdge ABL:
1
monthInt = lookup(monthString, "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec").

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

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 :)
Oftewel check met je validatie of je input gelijk is aan je output (qua datum) ;)

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.


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
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").
Beter.

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. :D

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...

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... 8)7

Maar het wordt nog mooier!

C++:
1
#define Null   NULL


:'(

[ Voor 14% gewijzigd door Verwijderd op 17-02-2011 02:08 ]


  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 04-10 21:59
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:

C++:
1
#define NULL true



Om je collega's op 1 april gek te maken >:)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd 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
}
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.

[ 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.


  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
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 >:)
Klassieke gemene truc, :+. Natuurlijk kun je ook #define NULL 0 naar #define NULL 1 vertalen (aangezien NULL en 0 in C / C++ effectief hetzelfde zijn. Toch?)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

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

.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.
Ja, ik heb er ook gewoon een composite van gemaakt :P. Volgens mij is dat wél de manier waarop het moet

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 03-10 20:30

Lye

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 >:)
Zo ken ik er nog een:
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:

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 ]


  • bobo1on1
  • Registratie: Juli 2001
  • Laatst online: 18-05 17:57
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...
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.

Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.


  • ReneDD
  • Registratie: Februari 2011
  • Laatst online: 28-09 19:53
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.
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).

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

ReneDD 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).
Is ook leuk als je de code in die functie vergeet te try catchen :+ Ben 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 :P

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.


Acties:
  • 0 Henk 'm!

  • ReneDD
  • Registratie: Februari 2011
  • Laatst online: 28-09 19:53
.Gertjan. schreef op donderdag 17 februari 2011 @ 17:37:
[...]


Is ook leuk als je de code in die functie vergeet te try catchen :+ Ben 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 :P
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 :)

Acties:
  • 0 Henk 'm!

  • Jeffroiscool
  • Registratie: December 2006
  • Laatst online: 29-09 23:46

Jeffroiscool

Proud DD Member! :D

Faalpuntje uit m'n CMS aangezien ik niet zo ff 123 een betere methode kon bedenken voor het deleten van users (met confirm bericht)
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


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
D'r zitten zelfs zoveel faalpuntjes in dat ik niet weet waar ik moet beginnen...

Acties:
  • 0 Henk 'm!

  • Jeffroiscool
  • Registratie: December 2006
  • Laatst online: 29-09 23:46

Jeffroiscool

Proud DD Member! :D

Davio schreef op vrijdag 18 februari 2011 @ 12:42:
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 zien :-(

League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W


Acties:
  • 0 Henk 'm!

Verwijderd

Davio schreef op vrijdag 18 februari 2011 @ 12:42:
D'r zitten zelfs zoveel faalpuntjes in dat ik niet weet waar ik moet beginnen...
Business logic en presentation logic door elkaar? :?

Acties:
  • 0 Henk 'm!

  • Jeffroiscool
  • Registratie: December 2006
  • Laatst online: 29-09 23:46

Jeffroiscool

Proud DD Member! :D

Verwijderd schreef op vrijdag 18 februari 2011 @ 12:50:
[...]


Business logic en presentation logic door elkaar? :?
Die snap ik niet? Leg uit :P

League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 04-10 20:40
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
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


Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 12:56

AW_Bos

Liefhebber van nostalgie... 🕰️

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 :P

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

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.


Acties:
  • 0 Henk 'm!

  • borft
  • Registratie: Januari 2002
  • Laatst online: 03-10 15:41
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.

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 04-10 20:40
@.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


Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 12:56

AW_Bos

Liefhebber van nostalgie... 🕰️

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.

[ Voor 7% gewijzigd door AW_Bos op 18-02-2011 13:03 ]

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • borft
  • Registratie: Januari 2002
  • Laatst online: 03-10 15:41
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;
}

Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

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; ?>
Ow die endfor kan ook natuurlijk. Dat is best een mooie constructie, beter dan inderdaad een zwevende accolade.

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.
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;
}
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.

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.


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Je 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.

[ Voor 20% gewijzigd door Davio op 18-02-2011 13:16 ]


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

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.
Dat heet heredoc syntax :)

[ Voor 75% gewijzigd door eamelink op 18-02-2011 13:15 ]


Acties:
  • 0 Henk 'm!

  • Jeffroiscool
  • Registratie: December 2006
  • Laatst online: 29-09 23:46

Jeffroiscool

Proud DD Member! :D

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.
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 :P
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.
.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.
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.
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.
Dat die() is me ooit aangeleerd door iemand. Vroeger had ik nog een class gtfo waar ik de footer eerst plaats en daarna die ();

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?
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.
Mooie stuk code, ik ga het zeker op die manier implementeren aangezien het er idd een stuk beter uit ziet.

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


Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

Davio schreef op vrijdag 18 februari 2011 @ 13:14:
Je 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.
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 ... ;)
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.


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
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...

Acties:
  • 0 Henk 'm!

  • Jeffroiscool
  • Registratie: December 2006
  • Laatst online: 29-09 23:46

Jeffroiscool

Proud DD Member! :D

R4gnax 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...
Het is een admin backend :P

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


Acties:
  • 0 Henk 'm!

  • borft
  • Registratie: Januari 2002
  • Laatst online: 03-10 15:41
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?

[ Voor 29% gewijzigd door borft op 18-02-2011 15:21 ]


Acties:
  • 0 Henk 'm!

  • Jeffroiscool
  • Registratie: December 2006
  • Laatst online: 29-09 23:46

Jeffroiscool

Proud DD Member! :D

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?
Het is toch juist JS wat ik moet vermijden o.a?

League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 04:50

alienfruit

the alien you never expected

Volgens collega's schijnt PDO ook sneller te zijn dan old school mysql_connect() etc. Geen idee of dat waar is :)

Acties:
  • 0 Henk 'm!

  • Bv202
  • Registratie: Oktober 2006
  • Laatst online: 14-11-2021
alienfruit 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 :)
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 niet :)

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? :?

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 03-10 10:15
'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().

Acties:
  • 0 Henk 'm!

Verwijderd

Dit kwam ik gister tegen in de code van een klasgenoot:

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)...

Acties:
  • 0 Henk 'm!

  • Jan_V
  • Registratie: Maart 2002
  • Laatst online: 08:39
Vind die defines eigenlijk zorgwekkender dan de methodenaam ;)

Battle.net - Jandev#2601 / XBOX: VriesDeJ


Acties:
  • 0 Henk 'm!

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 ;)

Acties:
  • 0 Henk 'm!

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...).

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
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 ;)
Ik neem aan dat je voor Nederlands slechtere cijfers haalde?

Maar 1337-speak is zoooo 2002, wist niet dat het nog gebruikt wordt. :)

Acties:
  • 0 Henk 'm!

  • BarôZZa
  • Registratie: Januari 2003
  • Laatst online: 11:02
.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 ... ;)
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.

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 ;)

Acties:
  • 0 Henk 'm!

  • ronn0
  • Registratie: Oktober 2009
  • Laatst online: 17-09 14:19
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?

Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 04-10 12:10
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/

[...]
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.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
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.
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 ).

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...
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.
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.

[ Voor 26% gewijzigd door Gomez12 op 21-02-2011 01:32 ]


Acties:
  • 0 Henk 'm!

  • BarôZZa
  • Registratie: Januari 2003
  • Laatst online: 11:02
@ 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 :+

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 ;) ?

Acties:
  • 0 Henk 'm!

Verwijderd

Templates? :?

Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

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.
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.

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.


Acties:
  • 0 Henk 'm!

  • Jeffroiscool
  • Registratie: December 2006
  • Laatst online: 29-09 23:46

Jeffroiscool

Proud DD Member! :D

.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.
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?

League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 04-10 09:54

Sebazzz

3dp

.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.
Nee, daar hebben ze strip_tags() voor uitgevonden :+

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
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.

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

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?
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.

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.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

roy-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)
Exclude from build :)

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.


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
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 :+
Ik ben misschien geen Ronn0 ;) maar ik vind het zelf een stuk netter om PHP template stijl te gebruiken ipv. echo statements. De nadruk hoort te liggen op je HTML, niet op de PHP, die is er alleen om hier en daar een variabel in te vullen of een control statement toe te voegen. Zeker bij grotere stukken HTML gaat de leesbaarheid er snel op achteruit bij echo statements.

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; ?>

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 03-10 10:15
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 ;) ?
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.

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
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
}
?>
Ik als non-pr0 kies voor notatie #3 of #4:

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.
quote: Gertjan
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?
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.
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.
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.

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 ]


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 03-10 10:15
YopY 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.
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 homepage ;)) werkte die opzet best goed. Voor grotere projecten zal ik toch echt een CMS pakken en aanpassen waar nodig.

Acties:
  • 0 Henk 'm!

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 18-01-2023
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


Acties:
  • 0 Henk 'm!

  • Famous Copra
  • Registratie: April 2010
  • Laatst online: 07:32
$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

Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 04-10 18:41
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
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.

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
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
Indien de variabelen direct uit je invoervelden komen, heb je een leuke sql injection mogelijkheid geintroduceerd : >:)

Acties:
  • 0 Henk 'm!

  • StephanVierkant
  • Registratie: Mei 2003
  • Laatst online: 08-09 16:22
Voeg 'or die(mysql_error())' er aan toe en je weet het ;-)
Pagina: 1 ... 51 ... 103 Laatste

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. :)