Toon posts:

[alg] Slechtste programmeervoorbeelden deel 4 Vorige deelOverzichtLaatste deel

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

Pagina: 1 2 3 ... 103 Laatste
Acties:
  • 980.553 views

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15:30

NMe

Quia Ego Sic Dico.

Topicstarter
Het is alweer tijd voor deel 4 van deze succesvolle topicreeks. :P

Vorige delen:
[alg] slechtste prog voorbeelden.
[alg] Slechtste programmeervoorbeelden deel 2
[Alg] Slechtste programmeervoorbeelden deel 3

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

Daarnaast is het niet de bedoeling dat je hier maar even snel een kort vraagje komt stellen. Als een vraag niet topicwaardig is, dan is hij wat dit forum betreft ook niet postwaardig. :)

[Voor 0% gewijzigd door een moderator op 01-10-2008 15:42. Reden: Deel veranderd... lutser :P]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:25

Robtimus

me Robtimus no like you

CyCloneNL schreef op woensdag 01 oktober 2008 @ 12:59:
Maar hoe geef je dan optionele velden aan.
Custom attribute?
HTML:
1
<input type="text" name="name" optional="true">

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function CheckForm(Form)
{
    for (var i = 0; i < Form.Elements.Length; i++)
    {
        if(Form.Elements[i].value == '' && !Form.Elements[i].getAttribute("optional"))
        {
            alert('Vul aub alle velden in!');
            return false;
        }
    } 
    Form.submit();
    return true;
}

Let ook op de return values zodat je in een submit button het submitten kan tegenhouden:
HTML:
1
<input type="submit" name="submit" value="Verstuur" onclick="return CheckForm(...);">

More than meets the eye
There is no I in TEAM... but there is ME
Vroeger IceManX | system specs


  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Maar dat is toch niet valide html.

Freelance Unity3D developer


  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 25-04 20:54
Hence the topic name "Slechste programmeervoorbeelden" :+

  • Patriot
  • Registratie: December 2004
  • Laatst online: 14:12

Patriot

Fulltime #whatpulsert

-NMe- schreef op woensdag 01 oktober 2008 @ 13:31:
Het is alweer tijd voor deel 3 van deze succesvolle topicreeks. :P
Nu-uh, het is tijd voor deel 4!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
EvilB2k schreef op woensdag 01 oktober 2008 @ 15:04:
Hence the topic name "Slechste programmeervoorbeelden" :+
Daarom vraag ik hoe je het juist wel goed moet doen :)

Of is het alleen de bedoeling om foute dingen te posten?

Freelance Unity3D developer


  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 25-04 20:54
maar goed om maar even een start te maken deze kwam ik laatst nog tegen in een oude VB app:

code:
1
goto <regelnummer>


even wat enters/nieuwe code er tussendoor en je programma is stuk :P

en draait dan ook nog eens in productie bij een niet nader te noemen bedrijfje.

edit naar hierboven: Ja deze topic is gemaakt om slechte voorbeelden in te posten die niet bepaald conform "best-practice" zijn gemaakt. Gewoon... omdat het grappig is :P (of om van te janken)

[Voor 45% gewijzigd door Laurens-R op 01-10-2008 15:21]


  • Phyxion
  • Registratie: April 2004
  • Laatst online: 07-06 20:11

Phyxion

_/-\o_

Patriot schreef op woensdag 01 oktober 2008 @ 15:09:
[...]


Nu-uh, het is tijd voor deel 4!
Nein 8)7
CyCloneNL schreef op woensdag 01 oktober 2008 @ 15:15:
[...]


Daarom vraag ik hoe je het juist wel goed moet doen :)

Of is het alleen de bedoeling om foute dingen te posten?
"Daarnaast is het niet de bedoeling dat je hier maar even snel een kort vraagje komt stellen. Als een vraag niet topicwaardig is, dan is hij wat dit forum betreft ook niet postwaardig."

'You like a gay cowboy and you look like a gay terrorist.' - James May


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 20:06
IceManX schreef op woensdag 01 oktober 2008 @ 13:48:
[...]

Custom attribute?
HTML:
1
<input type="text" name="name" optional="true">
Beter met "rel'.

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


  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

Rel is alleen voor op een a en daar wordt het eigenlijk ook alleen maar misbruikt.

Huur mij in als freelance SEO consultant!


  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-05 10:06
CyCloneNL schreef op woensdag 01 oktober 2008 @ 15:01:
Maar dat is toch niet valide html.
Het zou wel valide xhtml zijn wanneer je een eigen namespace 'foo' definieert:

HTML:
1
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="http://foo.bar">


en je je custom attribute als volgt gebruikt:

HTML:
1
<input type="text" name="name" foo:optional="true">


Maar of dat nou ook echt is wat je wilt...

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

EvilB2k schreef op woensdag 01 oktober 2008 @ 15:17:
maar goed om maar even een start te maken deze kwam ik laatst nog tegen in een oude VB app:

code:
1
goto <regelnummer>


even wat enters/nieuwe code er tussendoor en je programma is stuk :P
:?
Regelnummers in basic moeten expliciet worden opgegeven, en zijn ongerelateerd aan regelnummers in het bestand. Een enter ertussen boeit dus niet.

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


Anoniem: 178962

.oisyn schreef op woensdag 01 oktober 2008 @ 16:25:
[...]

:?
Regelnummers in basic moeten expliciet worden opgegeven, en zijn ongerelateerd aan regelnummers in het bestand. Een enter ertussen boeit dus niet.
Inderdaad, vroegah waren we altijd zo aan het proggen:

10 bla
20 bla
30 bla
40 bla

Op die manier kon je altijd nog genoeg code tussendoor toevoegen mocht je een foutje gemaakt hebben.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Klopt, of zelfs met 100-tallen als increment. En als na een zooi aanpassingen de regelnummers toch te veel dichtslibten werden dan kon je ze hernummeren (uiteraard zo dat goto's ook automatisch meenummerde) :). Ah yes, the good old times :7

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

10 x = 0
20 poke 53281, x
30 x = x + 1
40 goto 20

en later werd het geloof ik zoiets

.A2000 LDX $D020
INX
STX $D020
JMP $2000

Mooie tijden. Toen waren er nog geen small portal hacks ;)

[Voor 18% gewijzigd door Zoijar op 01-10-2008 16:56]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:25

Robtimus

me Robtimus no like you

CyCloneNL schreef op woensdag 01 oktober 2008 @ 15:01:
Maar dat is toch niet valide html.
Zolang de W3C HTML validator al keihard onderuit gaan zodra ik een link heb met &, en in JavaScript gaat zoeken naar errors, krijg ik de neiging die te negeren zodra JavaScript eraan te pas komt.

Bovendien, 1) het werkt zonder veel extra moeite, 2) (vrijwel) geen enkele browser valt erover, en 3) ik zou nergens beweren dat mijn pagina valid HTML bevat ;)

More than meets the eye
There is no I in TEAM... but there is ME
Vroeger IceManX | system specs


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Zo'n "valid html" plaatje is zooo web 1.0 :P

Overigens, ik neem aan dat die & in een link een &amp; moet zijn? Daar is best wat voor te zeggen...

[Voor 55% gewijzigd door .oisyn op 01-10-2008 18:09]

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

rrrandy schreef op woensdag 01 oktober 2008 @ 16:21:
[...]


Het zou wel valide xhtml zijn wanneer je een eigen namespace 'foo' definieert:

HTML:
1
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="http://foo.bar">


en je je custom attribute als volgt gebruikt:

HTML:
1
<input type="text" name="name" foo:optional="true">


Maar of dat nou ook echt is wat je wilt...
Of een custom dtd gebruiken dat de standaard dtd uitbreidt.

  • Patriot
  • Registratie: December 2004
  • Laatst online: 14:12

Patriot

Fulltime #whatpulsert

Uh, jawel hoor, is in de OP nu ook al gefixed :+
Zolang de W3C HTML validator al keihard onderuit gaan zodra ik een link heb met &, en in JavaScript gaat zoeken naar errors, krijg ik de neiging die te negeren zodra JavaScript eraan te pas komt.
Uhm, & moet zoals .oisyn al zei gewoon & worden, en fouten in Javascript? Waarom heb ik daar nooit last van dan? :?

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Patriot schreef op woensdag 01 oktober 2008 @ 18:43:
Waarom heb ik daar nooit last van dan? :?
Wellicht gebruik je netjes HTML ipv XHTML.

Anoniem: 84120

Ookal gebruik ik vrijwel perfecte HTML. Als ik snel een eenvoudig scriptje nodig heb, en deze plaats binnen een <script>-tagje, dan doet W3C erg snel erg moeilijk als ergens in dat script de tekst '</' (zonder 'script>') bevat. En ja dat is geldig volgens specificatie[1], maar verder is er geen browser die er moeilijk over doet, aangezien die elke browsers alles tussen <script> als script lezen.

Dus: het werkt, overal is alles goed (in alle browsers die ik ken), om een paar dingen makkelijk werkend te krijgen doe ik kleine dingen 'fout' --> BOEIEND. W3c Valide garandeert geen correct werkende webapplicatie.

[1] http://www.w3.org/TR/REC-html40/types.html#h-6.2

  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-05 10:06
BalusC schreef op woensdag 01 oktober 2008 @ 18:15:
[...]

Of een custom dtd gebruiken dat de standaard dtd uitbreidt.
Mja, kan ook. Een eigen namespace vind ik dan toch wat eleganter. Is het direct overal duidelijk dat het echt om eigen dingen gaat.

Anoniem: 260596

Misschien niet echt een Slecht programmeervoorbeeld, mar veilig zal het ook wel niet zijn als je een dergelijk beveiligingssysteem hebt, dat gewoon in de Broncode van je website staat:
(Rechtstreekse Copy/Paste)
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script language="javascript">
<!--//
/*Dit script verplicht de bezoekers een password en ID in te vullen alvorens de pagina te kunnen opvragen*/
function pasuser(form) {
<!--//verander hier onder je eigen ID
if (form.id.value=="BLOG01") { 
<!--//verander hier onder je eigen logincode
if (form.pass.value=="OYEAH") {           
<!--//verander hier onder de pagina die beveiligd moet worden
location="http/woei/show_news.php" 
} else {
alert("Invalid Password")
}
} else {  alert("Invalid UserID")
}
}
//-->
</script>


|:(

[Voor 2% gewijzigd door een moderator op 02-10-2008 11:35. Reden: Link naar de echte site weggehaald]


  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Oeh, ik weet het wachtwoord!

Freelance Unity3D developer


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 23-07-2021
He, niet denigrerend doen he, het is wel waarschijnlijk versleuteld door een lettertype wat geen duidelijk onderscheid maakt tussen een 0 en een O...

:)

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Waarschijnlijk een site alleen bezocht door digibeten :+

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 14:16

Wijnbo

Electronica werkt op rook.

kenneth schreef op woensdag 01 oktober 2008 @ 23:52:
Waarschijnlijk een site alleen bezocht door digibeten :+
Zo had mijn school eerder een pakket om toetsen af te nemen, voor elke toets stond een wachtwoord, in de bron ;')

Kon je dus ver van te voren al de toets inzien 8)7

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
Gomez12 schreef op woensdag 01 oktober 2008 @ 22:30:
He, niet denigrerend doen he, het is wel waarschijnlijk versleuteld door een lettertype wat geen duidelijk onderscheid maakt tussen een 0 en een O...

:)
logisch natuurlijk als je zo openbarend bent met je passwords :+

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Ook leuk als iemand direct naar show_news.php gaat linken. :P

{signature}


  • link0007
  • Registratie: Augustus 2006
  • Laatst online: 07-06 06:40
IceManX schreef op woensdag 01 oktober 2008 @ 13:48:
[...]

Custom attribute?
HTML:
1
<input type="text" name="name" optional="true">

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function CheckForm(Form)
{
    for (var i = 0; i < Form.Elements.Length; i++)
    {
        if(Form.Elements\[i].value == '' && !Form.Elements\[i].getAttribute("optional"))
        {
            alert('Vul aub alle velden in!');
            return false;
        }
    } 
    Form.submit();
    return true;
}

Let ook op de return values zodat je in een submit button het submitten kan tegenhouden:
HTML:
1
<input type="submit" name="submit" value="Verstuur" onclick="return CheckForm(...);">
Nee, veel beter is een class te geven voor optionele parameters.
HTML:
1
<input type="text" name="name" class="optionalFormField">


Daarna javascript gebruiken om de class uit te lezen.

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


  • Tiemez
  • Registratie: December 2003
  • Laatst online: 24-10-2022
Zullen die mensen nou echt niet snappen dat iedereen dat wachtwoord kan zien. :?
Voutloos schreef op donderdag 02 oktober 2008 @ 08:25:
Ook leuk als iemand direct naar show_news.php gaat linken. :P
De echte WTF is natuurlijk hoe de maker van die site een 10 voor Nederlands heeft kunnen krijgen. :P

  • Puc van S.
  • Registratie: Maart 2002
  • Laatst online: 15:51
Tiemez schreef op donderdag 02 oktober 2008 @ 09:27:
[...]


Zullen die mensen nou echt niet snappen dat iedereen dat wachtwoord kan zien. :?
Tja... ik denk dat meisjes van 12 niet echt bezig zijn met of de beveiliging op de site goed werkt ;)

[http://www.okbreijnen.nl] [Overwatch] [Cennahysh]


  • Cr1mp
  • Registratie: September 2008
  • Laatst online: 16-05 02:46
nvm. |:(

[Voor 98% gewijzigd door Cr1mp op 02-10-2008 09:53]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Tiemez schreef op donderdag 02 oktober 2008 @ 09:27:
[...]


Zullen die mensen nou echt niet snappen dat iedereen dat wachtwoord kan zien. :?
Richt-click disablen, jeweettoch!

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • Anoniem: 33810
  • Registratie: Augustus 2001
  • Niet online
Anoniem: 260596 schreef op woensdag 01 oktober 2008 @ 21:28:
Misschien niet echt een Slecht programmeervoorbeeld, mar veilig zal het ook wel niet zijn als je een dergelijk beveiligingssysteem hebt, dat gewoon in de Broncode van je website staat:
(Rechtstreekse Copy/Paste)
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script language="javascript">
<!--//
/*Dit script verplicht de bezoekers een password en ID...*/
function pasuser(form) {
<!--//verander hier onder je eigen ID
if (form.id.value=="BLOG01") { 
<!--//verander hier onder je eigen logincode
if (form.pass.value=="OYEAH") {           
<!--//verander hier onder de pagina die beveiligd moet worden
location="" 
} else {
alert("Invalid Password")
}
} else {  alert("Invalid UserID")
}
}
//-->
</script>


|:(
Je had die location="..." ook even weg kunnen editten, want daar gaat het natuurlijk niet om. Nu krijg je allemaal weer vreemde figuren die zo nodig moeten gaan reageren daar ;).

Verder is zoiets natuurlijk te verwachten van iemand die voor het eerst een website maakt, die plukt de makkelijkste scriptjes van het internet...en als simpelste vorm van beveiliging werkt het, zolang de gebruiker geen kennis heeft van HTML :).

  • Tiemez
  • Registratie: December 2003
  • Laatst online: 24-10-2022
ik kwam deze laatst nog tegen

PHP:
1
2
3
4
5
6
7
$query = "SELECT * FROM tabel";
if($_SESSION["zoeken"]["betaal_status"] == "-"){
        $query .= " WHERE status != 'eenletterdienietvoorkomt'";
    } else {
        $query .= " WHERE status = '".$_SESSION["zoeken"]["status"]."'";
        $zoeken = 'ja';
    }


En vandaag kwam ik nog een script pagina tegen met een if-constructie met 10 else-ifs, waarbij alleen in de "else" code staat. (oftewel, die if had anders gekunt gemoeten.)

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:25

Robtimus

me Robtimus no like you

.oisyn schreef op donderdag 02 oktober 2008 @ 10:46:
[...]

Richt-click disablen, jeweettoch!
Ik lach elke keer weer als iedereen zit te klagen dat right-click niet werkt. Opera negeert die code namelijk nog steeds ;)
Tiemez schreef op donderdag 02 oktober 2008 @ 12:21:
ik kwam deze laatst nog tegen

PHP:
1
2
3
4
5
6
7
$query = "SELECT * FROM tabel";
if($_SESSION["zoeken"]["betaal_status"] == "-"){
        $query .= " WHERE status != 'eenletterdienietvoorkomt'";
    } else {
        $query .= " WHERE status = '".$_SESSION["zoeken"]["status"]."'";
        $zoeken = 'ja';
    }


En vandaag kwam ik nog een script pagina tegen met een if-constructie met 10 else-ifs, waarbij alleen in de "else" code staat. (oftewel, die if had anders gekunt gemoeten.)
Ik vraag me af wat ik dommer vind. De overduidelijke SQL-injection-waiting-to-happen, of het toevoegen van een feitelijke TRUE statement als WHERE clause. Waarbij helaas de performance slechter wordt omdat voor elk record wel de status moet worden vergeleken met 'eenletterdienietvoorkomt'.

Ik zal maar niks zeggen over $zoeken. Nederlands in code, brrrr... :X
(maar goed, dat is persoonlijke voorkeur ;))

More than meets the eye
There is no I in TEAM... but there is ME
Vroeger IceManX | system specs


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

IceManX schreef op donderdag 02 oktober 2008 @ 12:39:
[...]

Ik lach elke keer weer als iedereen zit te klagen dat right-click niet werkt. Opera negeert die code namelijk nog steeds ;)
Of je drukt gewoon op de context-menu toets die naast de rechter CTRL zit ;)

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 25-05 13:32
IceManX schreef op donderdag 02 oktober 2008 @ 12:39:
[...]

Ik lach elke keer weer als iedereen zit te klagen dat right-click niet werkt. Opera negeert die code namelijk nog steeds ;)
offtopic:
Ctrl-F12, Geavanceerd, Inhoud, Javascript opties..., Ontvangen van rechter-muisklikken toestaan :) Staat gelukkig standaard uit!

Full-stack webdeveloper in Groningen


  • Tiemez
  • Registratie: December 2003
  • Laatst online: 24-10-2022
IceManX schreef op donderdag 02 oktober 2008 @ 12:39:
[...]

Ik lach elke keer weer als iedereen zit te klagen dat right-click niet werkt. Opera negeert die code namelijk nog steeds ;)


[...]

Ik vraag me af wat ik dommer vind. De overduidelijke SQL-injection-waiting-to-happen, of het toevoegen van een feitelijke TRUE statement als WHERE clause. Waarbij helaas de performance slechter wordt omdat voor elk record wel de status moet worden vergeleken met 'eenletterdienietvoorkomt'.

Ik zal maar niks zeggen over $zoeken. Nederlands in code, brrrr... :X
(maar goed, dat is persoonlijke voorkeur ;))
Ja, het is een stuk code van een collega van me. Die zelf ook niet (meer?) wist waarom dit er in zat.

ik gebruik zelf overigens ook altijd engelse variabelen en functienamen. En gebruik voor Database-query's het liefst PDO of ZEND_DB die het escapen voor je doen. (en anders mysql_real_escape_string())

[Voor 6% gewijzigd door Tiemez op 02-10-2008 13:09]


  • Cartman!
  • Registratie: April 2000
  • Niet online
Vorige week een dikke bug die een collega (inmiddels vertrokken) had gemaakt en ik kon gaan zoeken. Het ging om een simpele webshop waar je een paar producten in een shoppingcart kunt plaatsen en afrekenen.
Bij het opslaan maakt ie een ordernummer aan en zet die in de database en daar koppelt ie de klantgegevens aan. Wat deed ie nu... hij pakte <jaar><maand><nr> waarbij <nr> ooit begon met 1 en bij het aanmaken van het ordernummer checkte die de laatste order en pakte de laatste 3 getallen van dat ordernummer, hoogde dat op met 1, en dat plakte die dus achter <jaar><maand>.

Toevallig was dit de eerste maand waarbij het aantal bestellingen over de 1000 ging, dus zorge dat voor problemen, want de laatste 3 getallen van 2008091000 wordt...000 en + 1 = 1. Dus begon ie opnieuw met tellen en liep de boel de zeik in :{

Gelukkig heb ik snel een workaround ingebakken (substr op de getallen na jaar/datum) en dat + 1; maar wat een methode :| :'(

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 14:43

Salandur

Software Engineer

autoincrement/sequence? order nummer = <jaar><dag><db_id> is wel makkelijker dan

Assumptions are the mother of all fuck ups | iRacing Profiel | GT Sport stats


  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-05 10:06
Salandur schreef op vrijdag 03 oktober 2008 @ 16:16:
autoincrement/sequence? order nummer = <jaar><dag><db_id> is wel makkelijker dan
Brrrr.... db_id lijkt me niet zo handig. Krijg je gaten in je overzicht van orders (ten minste, als je je id's globaal nummert ipv per tabel.

Dan liever een dedicated sequence voor de ordernummers.

  • Chip.
  • Registratie: Mei 2006
  • Niet online
Kwam eergisteren dit tegen in vb...

code:
1
2
3
if i = 130 Then
i = i
End if

Neem aan dat het gewoon nog een stukje code was om te testen of iets dergelijks.

  • Mitrilvich
  • Registratie: Juli 2004
  • Laatst online: 07-06 13:39
IceManX schreef op donderdag 02 oktober 2008 @ 12:39:
[...]

Ik lach elke keer weer als iedereen zit te klagen dat right-click niet werkt. Opera negeert die code namelijk nog steeds ;)


[...]

Ik vraag me af wat ik dommer vind. De overduidelijke SQL-injection-waiting-to-happen, of het toevoegen van een feitelijke TRUE statement als WHERE clause. Waarbij helaas de performance slechter wordt omdat voor elk record wel de status moet worden vergeleken met 'eenletterdienietvoorkomt'.

Ik zal maar niks zeggen over $zoeken. Nederlands in code, brrrr... :X
(maar goed, dat is persoonlijke voorkeur ;))
Nu ben ik toch nieuwsgierig, de $_SESSION variabele bevat toch gegevens die door je applicatie gevuld is en niet de gebruiker? Hoe kan dit dan SQL injection veroorzaken? (mits je applicatie de $_SESSION var zelf goed vult natuurlijk).

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:25

Robtimus

me Robtimus no like you

Goed punt. Maar iemand die dit soort code schrijft zie ik ook goed in staat zijn input niet te controleren.

Toch had ik daar niet vanuit mogen gaan nee.

More than meets the eye
There is no I in TEAM... but there is ME
Vroeger IceManX | system specs


  • Mitrilvich
  • Registratie: Juli 2004
  • Laatst online: 07-06 13:39
Het is inderdaad twijfelachtig of waardes in de $_SESSION variabele wel ge-escaped zijn.

Ik bedacht me later ook dat ik zelf pas de waardes zou gaan escapen net voordat ik ze in een query zou gebruiken. Het is logischer om de originelen in de $_SESSION variabele op te slaan.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 23-07-2021
Mitrilvich schreef op zaterdag 04 oktober 2008 @ 14:20:
[...]
Nu ben ik toch nieuwsgierig, de $_SESSION variabele bevat toch gegevens die door je applicatie gevuld is en niet de gebruiker? Hoe kan dit dan SQL injection veroorzaken? (mits je applicatie de $_SESSION var zelf goed vult natuurlijk).
Je app kan de session variabelen nog zo goed vullen, je kan je inputvelden nog zo goed controleren.
In wezen moet je alles controleren, anders heb je altijd het risico op een domino-effect door een oude db-entry ( van voordat je input-velden controleerde ) die in combinatie met een bugje in het vullen van session variabelen je app rare dingen laat doen.

Ten allen tijde heb je een risico op bugs, als je de resultaten opslaat heb je een kans dat je ongefilterde data in je dbase hebt zitten vanwege een oude bug.

En hoeveel moeite is het nou om 1 extra check uit te voeren? ( lijkt mij persoonlijk juist een rare situatie om 1 gegeven door je hele app heen als onbetrouwbaar te classificeren totdat hij opeens in je $_SESSION zit, dan is hij opeens magisch betrouwbaar geworden? Terwijl hij het zelfde moet voorstellen )

  • Mitrilvich
  • Registratie: Juli 2004
  • Laatst online: 07-06 13:39
Gomez12 schreef op zaterdag 04 oktober 2008 @ 16:38:
[...]

Je app kan de session variabelen nog zo goed vullen, je kan je inputvelden nog zo goed controleren.
In wezen moet je alles controleren, anders heb je altijd het risico op een domino-effect door een oude db-entry ( van voordat je input-velden controleerde ) die in combinatie met een bugje in het vullen van session variabelen je app rare dingen laat doen.

Ten allen tijde heb je een risico op bugs, als je de resultaten opslaat heb je een kans dat je ongefilterde data in je dbase hebt zitten vanwege een oude bug.

En hoeveel moeite is het nou om 1 extra check uit te voeren? ( lijkt mij persoonlijk juist een rare situatie om 1 gegeven door je hele app heen als onbetrouwbaar te classificeren totdat hij opeens in je $_SESSION zit, dan is hij opeens magisch betrouwbaar geworden? Terwijl hij het zelfde moet voorstellen )
Ik denk dat je altijd waardes moet escapen voordat je ze gebruikt in een query. Ongeacht of ze van je applicatie of van de gebruiker af komen. (Tenzij je 200% zeker ben dat de waardes in een veilige range van tekens zitten).

Het speciale was de combinatie van $_SESSION en de term "sql injection". Het is niet duidelijk of $_SESSION gegevens bevat die ingegeven is door de gebruiker (zoals een zoekterm) en die daarmee bewust een SQL string manipuleert.

  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 15:41
Cartman! schreef op vrijdag 03 oktober 2008 @ 16:10:
Vorige week een dikke bug die een collega (inmiddels vertrokken) had gemaakt en ik kon gaan zoeken. Het ging om een simpele webshop waar je een paar producten in een shoppingcart kunt plaatsen en afrekenen.
Bij het opslaan maakt ie een ordernummer aan en zet die in de database en daar koppelt ie de klantgegevens aan. Wat deed ie nu... hij pakte <jaar><maand><nr> waarbij <nr> ooit begon met 1 en bij het aanmaken van het ordernummer checkte die de laatste order en pakte de laatste 3 getallen van dat ordernummer, hoogde dat op met 1, en dat plakte die dus achter <jaar><maand>.

Toevallig was dit de eerste maand waarbij het aantal bestellingen over de 1000 ging, dus zorge dat voor problemen, want de laatste 3 getallen van 2008091000 wordt...000 en + 1 = 1. Dus begon ie opnieuw met tellen en liep de boel de zeik in :{

Gelukkig heb ik snel een workaround ingebakken (substr op de getallen na jaar/datum) en dat + 1; maar wat een methode :| :'(
:D het klinkt als een stukje software die een heel aantal jaar terug heb geschreven. Alleen heb ik dit principe toen toegepast voor een administratie systeem. Echt precies hetzelfde. Alleen had ik toen opzettelijk het risico genomen. Als hij meer orders wou moest hij zelf maar een betere nummering kiezen. :P

http://hawvie.deviantart.com/


  • RobIII
  • Registratie: December 2001
  • Laatst online: 19:23

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

HawVer schreef op zondag 05 oktober 2008 @ 10:47:
Alleen had ik toen opzettelijk het risico genomen.
En waarom zou je dat doen?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Patriot
  • Registratie: December 2004
  • Laatst online: 14:12

Patriot

Fulltime #whatpulsert

Mitrilvich schreef op zaterdag 04 oktober 2008 @ 17:16:
[...]

Ik denk dat je altijd waardes moet escapen voordat je ze gebruikt in een query. Ongeacht of ze van je applicatie of van de gebruiker af komen. (Tenzij je 200% zeker ben dat de waardes in een veilige range van tekens zitten).

Het speciale was de combinatie van $_SESSION en de term "sql injection". Het is niet duidelijk of $_SESSION gegevens bevat die ingegeven is door de gebruiker (zoals een zoekterm) en die daarmee bewust een SQL string manipuleert.
Nouja, álle waardes escapen is wat overdreven. Maar ik denk dat je wel kunt stellen dat variabelen die "van buiten" het script komen, die dus niet in het script zijn gedefiniëerd, het beste escaped kunnen worden. $_SESSION is dus wel een variabele die ik zou escapen, maar als ik 10 (of 100, of desnoods in een geïnclude bestand) regels voor de query een variabele definiëer (met hardcoded waarde dus), dan ga ik die natuurlijk niet escapen (tenzij dat nodig is uiteraard).

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Dat lijkt me een unmaintainable zooitje worden eigenlijk. Als je dan eens een keer die waarde aanpast, waarbij op dat moment niet meer heel duidelijk is dat de waarde ook in een db wordt gestopt (zonder escaping, want dat hoefte immers eerst niet) kan een fout er gemakkelijk doorheen glippen.

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Patriot schreef op zondag 05 oktober 2008 @ 12:01:
[...]


Maar ik denk dat je wel kunt stellen dat variabelen die "van buiten" het script komen, die dus niet in het script zijn gedefiniëerd, het beste escaped kunnen worden.
Ecapen en casten.
Met printf kan je eerst al een correcte string opbouwen. Bv als je een integer verwacht, dat er ook echt een integer komt te staan.

PHP:
1
2
3
$data = array ( 5, '.oisyn_sql_hack', 9 );

$sql = sprintf ( 'SELECT * FROM table WHERE name = "%u"', $data[1] );


of

PHP:
1
2
3
$data = array ( 5, '.oisyn_sql_hack', 9 );

$sql = 'SELECT * FROM table WHERE name = "' . (int) $data[1] . '"';


In beide gevallen krijgen we dan:

code:
1
SELECT * FROM table WHERE name = "0"


Op plaatsen waar je een string verwacht moet je escapen, en zien dat je strings tussen quotes staan. PDO heeft hier de handige functie quote () voor, die je strings altijd van quotes voorziet, en deze escaped.

En als je toch PDO gebruikt, kan je direct prepared statements gebruiken.

World War One


  • Zyppora
  • Registratie: December 2005
  • Laatst online: 05-06 12:02

Zyppora

155/50 Warlock

.oisyn schreef op zondag 05 oktober 2008 @ 20:15:
Dat lijkt me een unmaintainable zooitje worden eigenlijk. Als je dan eens een keer die waarde aanpast, waarbij op dat moment niet meer heel duidelijk is dat de waarde ook in een db wordt gestopt (zonder escaping, want dat hoefte immers eerst niet) kan een fout er gemakkelijk doorheen glippen.
Juist vanwege dit zou ik een $_SESSION variabele wél willen escapen, aangezien dat een van de minst overzichtelijke variabelen is die je in je script zult tegenkomen, en dus ook user input kan bevatten (desnoods van tig page-loads terug).

Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290


  • netvor
  • Registratie: September 2000
  • Laatst online: 26-11-2021
Een Session Variable mag dan wel door de applicatie gevuld worden, het is en blijft een cookie die door de user-agent naar de server gestuurd wordt. Ik heb het zelf al vaak genoeg meegemaakt dat ik eventjes met wget wat grote bestanden van een beveiligde applicatie wilde ophalen. Inloggen is met wget een beetje omslachtig, dus wat ik dan doe is netjes inloggen via de browser, kijken wat m'n Session ID is en deze vervolgens via wget meesturen. Als ik handmatig een Session ID kan opgeven kan ik ook ' " OR 1=1 ' of iets dergelijks meesturen.

Computer Science: describing our world with boxes and arrows.


  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 15:41
RobIII schreef op zondag 05 oktober 2008 @ 11:25:
[...]

En waarom zou je dat doen?
Dat was ongeveer 6 jaar geleden toen ik nog maar net met ontwikkeling om de hoek kwam kijken, plus het aantal orders was toen ongeveer 5 per week misschien. Dus dat aantal zou die niet halen.

Ik zou het nu wel anders doen met of meer cijfers achter de maand of met een nette errormelding oid. Overigens is het systeem nooit live gegaan wegens acceptatieproblemen. Men bleef liever werken met Excel.. :z

[Voor 11% gewijzigd door HawVer op 06-10-2008 12:45]

http://hawvie.deviantart.com/


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:31

Janoz

Moderator Devschuur®

!litemod

netvor schreef op maandag 06 oktober 2008 @ 12:40:
Een Session Variable mag dan wel door de applicatie gevuld worden, het is en blijft een cookie die door de user-agent naar de server gestuurd wordt.
nee, sessie variabelen staan op de server, niet op de client. Op de client staat alleen een token (sessionId) om de juiste sessie variabelen weer bij de juiste bezoeker te kunnen vinden.
Ik heb het zelf al vaak genoeg meegemaakt dat ik eventjes met wget wat grote bestanden van een beveiligde applicatie wilde ophalen. Inloggen is met wget een beetje omslachtig, dus wat ik dan doe is netjes inloggen via de browser, kijken wat m'n Session ID is en deze vervolgens via wget meesturen. Als ik handmatig een Session ID kan opgeven kan ik ook ' " OR 1=1 ' of iets dergelijks meesturen.
Nee, dat kan dus niet. Er is een heel groot verschil tussen de waarde van je sessieId en de waarde van de variabelen in je sessie.


Tot slot, het escapen van input of sessie variabelen is helemaal niet relevant. Je moet escapen naar de context. Pas als je een query bouwt ga je je parameters escapen. Pas wanneer je html afdrukt ga je html spesialchars loslaten en xss verwijderen. En door php's vreemde instellingen zul je zo nu en dan de binnengekomen variabelen uit GET, POST en COOKIE moeten unescapen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Casmo
  • Registratie: Juni 2002
  • Laatst online: 08-05 20:41

Casmo

Mr. Hero

Ik weet niet of het hier tussen hoort maar vondt het wel grappig:
code:
1
2
3
4
5
// Take away
// het afhalen van PRODUCTEN
// niet het afhalen van fastfood (dit ter verwarring voor mathieu)

$takeaway = TRUE;

naxasius.com, mijn eigen mmorpg spel (browser based).


  • netvor
  • Registratie: September 2000
  • Laatst online: 26-11-2021
Janoz schreef op maandag 06 oktober 2008 @ 12:56:
nee, sessie variabelen staan op de server, niet op de client. Op de client staat alleen een token (sessionId) om de juiste sessie variabelen weer bij de juiste bezoeker te kunnen vinden.
:X Zucht. Ik ben ook niet helemaal wakker of wel? Verder sluit ik me volledig aan bij jouw samenvatting dat je moet escapen naar context. Als je het volgende in je code hebt:

PHP:
1
$query = "DELETE FROM table WHERE id = '$var'";

Dan moet je gewoon $var escapen om te zorgen dat er op zijn minst geen loszittende aanhalingstekens in zitten. Ook al komt die $var uit de session, of uit de DB, of van de aanroepende functie, je moet gewoon dat risico afvangen. Het is net als we bij de autorijles hebben geleerd: altijd in de dode hoek kijken, ook al weet je dat er geen auto zit.

Computer Science: describing our world with boxes and arrows.


  • Pathogen
  • Registratie: April 2004
  • Laatst online: 11:57

Pathogen

Shoop Da Whoop

Heeft mijn baas gemaakt:
code:
1
2
3
4
Do While SQLCA.SQLCODE = 0
  Query 1
  Query 2
Loop


Werkte prima, tot Query 1 fout ging en Query 2 niet :D
SQLCA is Informix IDS' standaard object voor SQL (error) codes... en 0 is uiteraard "no problem"

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 25-05 13:32
netvor schreef op maandag 06 oktober 2008 @ 13:06:
[...]


:X Zucht. Ik ben ook niet helemaal wakker of wel? Verder sluit ik me volledig aan bij jouw samenvatting dat je moet escapen naar context. Als je het volgende in je code hebt:

PHP:
1
$query = "DELETE FROM table WHERE id = '$var'";

Dan moet je gewoon $var escapen om te zorgen dat er op zijn minst geen loszittende aanhalingstekens in zitten. Ook al komt die $var uit de session, of uit de DB, of van de aanroepende functie, je moet gewoon dat risico afvangen. Het is net als we bij de autorijles hebben geleerd: altijd in de dode hoek kijken, ook al weet je dat er geen auto zit.
Als het goed is, is id een getal, en moet je dus gewoon casten naar een integer ;) (en de aanhalingstekens weghalen, die zijn alleen voor strings, ook al werkt het wel)

Full-stack webdeveloper in Groningen


  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Iets met klok, klepel en exceptions:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function setPassword($password, $oldPassword) {
    if ($password === $oldPassword) {
        return;
    }
    if (!$this->checkPassword($oldPassword)) {
        throw new Exception('Wrong password.');
    }
    if (strlen($password) < 8) {
        throw new Exception('Password too short.');
    }
    if (empty($password)) {
        throw new Exception('Empty password not permitted.');
    }
    $this->password = $password;
    $this->save();
}

bron

12x360Wp = 4320 Wp @ Growatt 4200TL-XL. Zuid met helling 13° op plat dak.


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

De volgorde klopt ook niet helemaal :D

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 17:45
Ik kwam laatst deze van mezelf tegen:

PHP:
1
2
3
4
5
6
        $offset = $this->subpage * self::SUBPAGE_LIMIT;
        
        if ($this->subpage == 0)
        {
            $offset = 0;
        }


doh :p

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

BalusC schreef op dinsdag 14 oktober 2008 @ 20:22:
De volgorde klopt ook niet helemaal :D
Mwoa, vind ik niet. Het is eerder dat de aparte rule voor empty password nogal overbodig is aangezien een password toch al minstens 8 tekens mag zijn. Vanuit het standpunt van de gebruiker zou ik het ook nogal irritant vinden als ik eerst geen wachtwoord wil en dus een "leeg ww mag niet" bericht krijg, om vervolgens dan maar een ww van 1 teken te gebruiken waarop ik de melding krijg "moet minstens 8 tekens". Ja, zeg dat dan meteen! 8)7

Een speciaal geval afschermen terwijl het al afgeschermd wordt door een generiekere regel is imho gewoon overbodig.
Maghiel schreef op dinsdag 14 oktober 2008 @ 20:58:
Ik kwam laatst deze van mezelf tegen:

PHP:
1
2
3
4
5
6
        $offset = $this->subpage * self::SUBPAGE_LIMIT;
        
        if ($this->subpage == 0)
        {
            $offset = 0;
        }


doh :p
Heh, die is helemaal niet zo d'oh als je denkt hoor. Mag jij uitvinden waarom ;)

[Voor 30% gewijzigd door .oisyn op 14-10-2008 23:00]

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • Patriot
  • Registratie: December 2004
  • Laatst online: 14:12

Patriot

Fulltime #whatpulsert

De volgorde klopt natuurlijk niet helemaal, daar had hij gelijk in. Maar ik ben het inderdaad met je eens dat een leeg wachtwoord niet anders zou moeten zijn dan een te kort wachtwoord.
[...]


Heh, die is helemaal niet zo d'oh als je denkt hoor. Mag jij uitvinden waarom ;)
Als ze allemaal integers zijn (wat imho toch wel geimpliceerd is), dan is de d'oh natuurlijk dat $offset al 0 is als $this->subpage 0 is.

[Voor 25% gewijzigd door Patriot op 14-10-2008 23:08]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Ik zie niet in waarom SUBPAGE_LIMIT per se een int moet zijn. Er is namelijk precies 1 waarde in het bereik van de floats die toch een heel zinnige betekenis heeft. En precies bij die ene waarde is 0 * SUBPAGE_LIMIT ongelijk aan 0.

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • Patriot
  • Registratie: December 2004
  • Laatst online: 14:12

Patriot

Fulltime #whatpulsert

.oisyn schreef op dinsdag 14 oktober 2008 @ 23:09:
Ik zie niet in waarom SUBPAGE_LIMIT per se een int moet zijn. Er is namelijk precies 1 waarde in het bereik van de floats die toch een heel zinnige betekenis heeft. En precies bij die ene waarde is 0 * SUBPAGE_LIMIT ongelijk aan 0.
Het gaat volgens mij om subpagina's van het één of het ander, pagina's tellen we over het algemeen in hele getallen. Het kan natuurlijk anders, maar het lijkt mij in dit geval logischer dat het een integer betreft.

EDIT:
Moet overigens toegeven niet te weten bij welke floating point waarde 0 * float niet gelijk is aan 0.

[Voor 9% gewijzigd door Patriot op 14-10-2008 23:23]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Nee, het gaat om de limiet van het aantal subpagina's. Wat als je nou geen limiet wilt gebruiken? Knutsel je dan liever met een arbitrair grote int of gewoon met het wiskundige concept dat daar prima bij past: ∞?

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • Patriot
  • Registratie: December 2004
  • Laatst online: 14:12

Patriot

Fulltime #whatpulsert

.oisyn schreef op dinsdag 14 oktober 2008 @ 23:22:
Nee, het gaat om de limiet van het aantal subpagina's. Wat als je nou geen limiet wilt gebruiken? Knutsel je dan liever met een arbitrair grote int of gewoon met het wiskundige concept dat daar prima bij past: ∞?
Sinds wanneer kunnen we die waarde in PHP assignen aan een variabele (en nu niet grappen dat het kan als string)?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Euh, infinity past gewoon in een float hoor. De rekenregels ermee zijn gewoon gedefinieerd in IEEE 754. Ik weet even niet uit m'n hoofd of PHP een constante/functie kent die je direct kunt gebruiken (de meeste programmeertalen wel), maar anders kun je nog iets doen als:
PHP:
1
2
3
4
5
6
define("INFINITY", -log(0));

echo 4 < INFINITY;  // true
echo max(4, INFINITY); // INF
echo min(4, INFINITY); // 4
echo is_infinite(INFINITY); // true


Het "probleem" van Maghiel dat hij onbewust toch heeft opgelost is dat 0∙∞ niet gedefinieerd is. Oftewel, daar komt een NaN uit.

[Voor 13% gewijzigd door .oisyn op 14-10-2008 23:34]

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 17:45
weer wat geleerd :D

[Voor 88% gewijzigd door Maghiel op 14-10-2008 23:36]


  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 15:04

CoolGamer

What is it? Dragons?

.oisyn schreef op dinsdag 14 oktober 2008 @ 23:31:
Euh, infinity past gewoon in een float hoor. De rekenregels ermee zijn gewoon gedefinieerd in IEEE 754. Ik weet even niet uit m'n hoofd of PHP een constante/functie kent die je direct kunt gebruiken (de meeste programmeertalen wel),
Je kan INF gebruiken.

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Kijk eens aan :)

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • Patriot
  • Registratie: December 2004
  • Laatst online: 14:12

Patriot

Fulltime #whatpulsert

Ah zo, nog nooit mee gewerkt zelf. Kan me verder ook niet voorstellen er ooit mee te gaan werken. Ik kies er meestal voor om bij 0 uit te gaan van oneindig (dat hangt allemaal van de situatie af natuurlijk). In de praktijk komt het er op neer dat je in beide gevallen een getal "opgeeft". Dat kan 0 zijn, of het hoogst mogelijke getal in een float (wat INF in feite is, als ik de docs goed begrijp dan zal INF gelijk zijn aan de hoogst mogelijke float).

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Nee, INF is echt oneindig. De hoogst mogelijke float is ongeveer 1.79769313486231570e+308. Die waarde vermenigvuldigen met 0 geeft gewoon 0, en delen door zichzelf geeft 1 (oftewel, alles wat je bij een normale waarde verwacht). Infinity vermenigvuldigen met 0 kan niet, noch kun je 'm delen door zichzelf.

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • Patriot
  • Registratie: December 2004
  • Laatst online: 14:12

Patriot

Fulltime #whatpulsert

.oisyn schreef op woensdag 15 oktober 2008 @ 00:50:
Nee, INF is echt oneindig. De hoogst mogelijke float is ongeveer 1.79769313486231570e+308. Die waarde vermenigvuldigen met 0 geeft gewoon 0, en delen door zichzelf geeft 1 (oftewel, alles wat je bij een normale waarde verwacht). Infinity vermenigvuldigen met 0 kan niet, noch kun je 'm delen door zichzelf.
Oh, ik zie nu hoe het zit, had het even eerder moeten testen. Anyway, ik vermoed dat het in dit geval niet echt boeiend is. Maar dat blijft speculatie.

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:05

Haan

dotnetter

Kom net een fijne tegen :P
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
if (locationField != null)
{
if (locationField.Value.Equals("AWP"))
{
    lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", "true", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_law", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", "false", "BOOLEAN"));
}
else if (locationField.Value.Equals("SVF"))
{
    lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", "true", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_law", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", "false", "BOOLEAN"));
}
else if (locationField.Value.Equals("DRONTEN"))
{
    lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", "true", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_law", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", "false", "BOOLEAN"));
}
else if (locationField.Value.Equals("LAW"))
{
    lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_law", "true", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", "false", "BOOLEAN"));
}
else if (locationField.Value.Equals("VRW"))
{
    lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_law", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", "true", "BOOLEAN"));
}
else
{
    lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_law", "false", "BOOLEAN"));
    lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", "false", "BOOLEAN"));
}
}

Kater? Eerst water, de rest komt later


  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Het herhalen van code is slecht, maar "false" ipv een boolean is ook nogal fout. :P

12x360Wp = 4320 Wp @ Growatt 4200TL-XL. Zuid met helling 13° op plat dak.


  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 14:43

Salandur

Software Engineer

en dan moet er opeens een property bij...

Assumptions are the mother of all fuck ups | iRacing Profiel | GT Sport stats


  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 20-04 19:15
AtleX schreef op vrijdag 24 oktober 2008 @ 10:40:
Het herhalen van code is slecht, maar "false" ipv een boolean is ook nogal fout. :P
Dat vind ik niet zo heel slecht in dit voorbeeld. Hij geeft namelijk ook een objecttype mee (als string). Dus waarschijnlijk gaat de functie die hij aanroept "false" omzetten in een mooie booelan false. Dus zo fout is dat opzich niet denk ik (mits de functie natuurlijk ook anderer types dan booleans kan ontvangen).

Hij had natuurlijk ook Object kunnen gebruiken als parameter type en dan boolean false erin gooien.

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.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

AtleX schreef op vrijdag 24 oktober 2008 @ 10:40:
Het herhalen van code is slecht, maar "false" ipv een boolean is ook nogal fout. :P
Waarom? Misschien is ie wel iets textueels aan het genereren. Dat kun je uit deze beperkte context niet opmaken.

Maar goed, ik zou het zo opgelost hebben (even in C++, m'n C# is wat roestig ;))
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct LocatieInfo
{
    string locationName;
    string propertyName;
};

LocatieInfo locations[] =
{
    { "AWP", "new_locatie_awp" },
    { "SVF", "new_locatie_svf" },
    { "DRONTEN", "new_locatie_dro" },
    { "LAW", "new_locatie_law" },
    { "VRW", "new_locatie_vrw" },
};

int num = sizeof(locations) / sizeof(locations[0]);
for (int i = 0; i < num; i++)
{
    string value = locationField.Value.Equals(locations[i].locationName) ? "true" : "false";
    lstFields.Add(m_Processor.CreateProperty(locations[i].propertyName, value, "BOOLEAN")); 
}


Of simpelweg iets als
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct LocationTesterHelper
{
private:
    string loc;
public:
    LocationTesterHelper(string location) : loc(location) { }
    string Get(string value) { return loc.Equals(value) ? "true" : "false"; }
}
LocationTesterHelper locHelper(locationField.Value);
lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", locHelper.Get("AWP"), "BOOLEAN")); 
lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", locHelper.Get("SVF"), "BOOLEAN")); 
lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", locHelper.Get("DRONTEN"), "BOOLEAN")); 
lstFields.Add(m_Processor.CreateProperty("new_locatie_law", locHelper.Get("LAW"), "BOOLEAN")); 
lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", locHelper.Get("VRW"), "BOOLEAN"));

[Voor 70% gewijzigd door .oisyn op 24-10-2008 13:14]

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:05

Haan

dotnetter

Die CreateProperty methode kan allerlei types properties aanmaken, dus om niet voor ieder type een overload te maken neemt ie gewoon strings als input. Maar nu zat ik te kijken naar hoe die boolean omgezet wordt:
C#:
1
2
3
4
5
6
7
8
9
bool b;
if (value.Equals("false"))
{
    b = bool.Parse("false");
}
else
{
    b = bool.Parse("true");
}


Terwijl dat natuurlijk ook gewoon zo had gekund :P
C#:
1
2
3
4
5
bool b = false;
if (value.Equals("true;"))
{
      b = true;
}

Kater? Eerst water, de rest komt later


  • Puc van S.
  • Registratie: Maart 2002
  • Laatst online: 15:51
Haan schreef op vrijdag 24 oktober 2008 @ 13:49:
Terwijl dat natuurlijk ook gewoon zo had gekund :P
C#:
1
2
3
4
5
bool b = false;
if (value.Equals("true;"))
{
      b = true;
}
/mierenneukmode: Die van jou gaat dus nooit goed ;)

[http://www.okbreijnen.nl] [Overwatch] [Cennahysh]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Haan schreef op vrijdag 24 oktober 2008 @ 13:49:
Die CreateProperty methode kan allerlei types properties aanmaken, dus om niet voor ieder type een overload te maken neemt ie gewoon strings als input. Maar nu zat ik te kijken naar hoe die boolean omgezet wordt:
C#:
1
2
3
4
5
6
7
8
9
bool b;
if (value.Equals("false"))
{
    b = bool.Parse("false");
}
else
{
    b = bool.Parse("true");
}


Terwijl dat natuurlijk ook gewoon zo had gekund :P
C#:
1
2
3
4
5
bool b = false;
if (value.Equals("true;"))
{
      b = true;
}
Waarom niet
C#:
1
bool b = bool.Parse( value );

Of mogen er ook foutieve waardes gegeven worden die naar false moeten evalueren?

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


  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 20-04 19:15
Haan schreef op vrijdag 24 oktober 2008 @ 13:49:
Die CreateProperty methode kan allerlei types properties aanmaken, dus om niet voor ieder type een overload te maken neemt ie gewoon strings als input. Maar nu zat ik te kijken naar hoe die boolean omgezet wordt:
C#:
1
2
3
4
5
6
7
8
9
bool b;
if (value.Equals("false"))
{
    b = bool.Parse("false");
}
else
{
    b = bool.Parse("true");
}


Terwijl dat natuurlijk ook gewoon zo had gekund :P
C#:
1
2
3
4
5
bool b = false;
if (value.Equals("true;"))
{
      b = true;
}
Dat is niet helemaal waar. Alles wat niet "true" is zal in jouw geval een false worden. Maar dat is niet altijd gewenst? Stel je voor dat je met nullable bools werkt, of dat je een fout wil geven als er geen "false" of "true" wordt meegegeven. Dus zo slecht is de eerste oplossing niet.

Zoals gezegd had het overigens ook opgelost kunnen worden door de value als object mee te geven. Dan kan je aan de hand van de string die het type aangeeft het object weer terugcasten naar een boolean (uiteraard na een check).

Ik ga er overigens van uit dat je in de code de check of je eigenlijk wel een boolean wilt hebben boven het geschreven stukje hebt staan, want anders moet je daar natuurlijk ook rekening mee houden ;)

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.


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Overigens zou ik gewoon meerdere overloads creeren als je voor bepaalde types ook andere afhandeling hebt, je moet dan toch al code per type schrijven dus waarom niet meteen een goede overload erbij. Je zou dan alsnog een generieke methode met Object kunnen make voor types waar je een generieke afhandeling voor 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.”


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 07-06 19:54

curry684

left part of the evil twins

AtleX schreef op vrijdag 24 oktober 2008 @ 10:40:
Het herhalen van code is slecht, maar "false" ipv een boolean is ook nogal fout. :P
Niet echt, de derde parameter definieert het domein van de property, en als je vast gaat leggen dat een boolean een bool als 2e parameter wil ben je dependencies verkeerdom aan het leggen - met het systeem als hier getoond kan de implementor ervoor kiezen om domains toe te voegen zonder de code van Property aan te hoeven passen. Hoogstwaarschijnlijk zal het domain 'BOOLEAN' wel gedefinieerd zijn als een enum waarvan strings "true" en "false" de enige geldige attribute values zijn.

Professionele website nodig?


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 26-05 18:56

Snake

Los Angeles, CA, USA

curry684 schreef op vrijdag 24 oktober 2008 @ 15:47:
[...]

Niet echt, de derde parameter definieert het domein van de property, en als je vast gaat leggen dat een boolean een bool als 2e parameter wil ben je dependencies verkeerdom aan het leggen - met het systeem als hier getoond kan de implementor ervoor kiezen om domains toe te voegen zonder de code van Property aan te hoeven passen. Hoogstwaarschijnlijk zal het domain 'BOOLEAN' wel gedefinieerd zijn als een enum waarvan strings "true" en "false" de enige geldige attribute values zijn.
Neen gewoon een string.

Hij test op de strings "true", "false", en probeert het daarna nog eens met whitespaces getrimt.

C#:
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
public static bool TryParse(string value, out bool result)
{
    result = false;
    if (value != null)
    {
        if ("True".Equals(value, StringComparison.OrdinalIgnoreCase))
        {
            result = true;
            return true;
        }
        if ("False".Equals(value, StringComparison.OrdinalIgnoreCase))
        {
            result = false;
            return true;
        }
        if (m_trimmableChars == null)
        {
            char[] destinationArray = new char[string.WhitespaceChars.Length + 1];
            Array.Copy(string.WhitespaceChars, destinationArray, string.WhitespaceChars.Length);
            destinationArray[destinationArray.Length - 1] = '\0';
            m_trimmableChars = destinationArray;
        }
        value = value.Trim(m_trimmableChars);
        if ("True".Equals(value, StringComparison.OrdinalIgnoreCase))
        {
            result = true;
            return true;
        }
        if ("False".Equals(value, StringComparison.OrdinalIgnoreCase))
        {
            result = false;
            return true;
        }
    }
    return false;
}
uit reflector. (Parse gebruikt TryParse).

Going for adventure, lots of sun and a convertible! | GMT-8


  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 20-04 19:15
rwb schreef op vrijdag 24 oktober 2008 @ 14:38:
Overigens zou ik gewoon meerdere overloads creeren als je voor bepaalde types ook andere afhandeling hebt, je moet dan toch al code per type schrijven dus waarom niet meteen een goede overload erbij. Je zou dan alsnog een generieke methode met Object kunnen make voor types waar je een generieke afhandeling voor hebt.
Ik denk dat je dan in de problemen gaat komen met je versie met object. Want als je een bool meegeeft kan hij namelijk naar de functie met de bool als parameter maar ook naar versie met object als parameter. Dus ik denk dat je compiler dit niet erg leuk zal vinden (hoewel ik het niet geprobeerd heb).

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.


  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Kwam ik gisteren tegen in een online gastenboek:
code:
1
2
3
4
5
6
7
                  <td  valign="top" >Type dit getal in 
                  
                  <img src="captcha.php?rand=96334"></td>
                  <td valign="top">&nbsp;</td>
                  <td  align="left"><input name="antwoord" size="30" maxlength="50">
                  <input type="hidden" name="antwoordcheck" value="96334">
                  </td>

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
.Gertjan. schreef op vrijdag 24 oktober 2008 @ 16:00:
[...]


Ik denk dat je dan in de problemen gaat komen met je versie met object. Want als je een bool meegeeft kan hij namelijk naar de functie met de bool als parameter maar ook naar versie met object als parameter. Dus ik denk dat je compiler dit niet erg leuk zal vinden (hoewel ik het niet geprobeerd heb).
De compiler zal er niet zo'n probleem mee hebben
C#:
1
2
3
4
5
6
7
8
9
10
public class MyTest
{
    public void Test(object test)
    {
    }

    public void Test(bool test)
    {
    }
}

Is geen enkel probleem, als je op de volgende manier aanroept word gewoon de juiste methode aangeroepen
C#:
1
myTest.Test( true );

Het gaat inderdaad mis als je het op de volgende manier aanroept
C#:
1
2
3
bool b = true;
object o = (object)b;
Test(o);

Dit zou je eventueel op kunnen vangen door daar te checken of het een type is waar je een speciale case voor hebt.
KabouterSuper schreef op vrijdag 24 oktober 2008 @ 16:05:
Kwam ik gisteren tegen in een online gastenboek:
code:
1
2
3
4
5
6
7
                  <td  valign="top" >Type dit getal in 
                  
                  <img src="captcha.php?rand=96334"></td>
                  <td valign="top"> </td>
                  <td  align="left"><input name="antwoord" size="30" maxlength="50">
                  <input type="hidden" name="antwoordcheck" value="96334">
                  </td>
De vraag is of de captcha visueel ook 96334 bevatte of dat het alleen een identifier was voor de server om te herleiden over welke captcha het gaat. Als dat het geval is dan zou het geen probleem zijn ( Mits ze niet hergebruikt worden ;) )

[Voor 26% gewijzigd door Woy op 24-10-2008 16:15]

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


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:31

Janoz

Moderator Devschuur®

!litemod

rwb schreef op vrijdag 24 oktober 2008 @ 16:12:
De vraag is of de captcha visueel ook 96334 bevatte of dat het alleen een identifier was voor de server om te herleiden over welke captcha het gaat. Als dat het geval is dan zou het geen probleem zijn ( Mits ze niet hergebruikt worden ;) )
Er zijn drie mogelijkheden :
- de waarde is 96334
- de randomizer wordt geseed met 96334 (waardoor de in te vullen captcha gelijk is wanneer de seed gelijk is)
- het is een terug vind token
2 daarvan zijn inderdaad dit topic waardig.


De derde mogelijkheid is vervolgens weer onder te verdelen in een token met beperkte korte houdbaarheid en een token met onbeperkte of lange houdbaarheid. Daarvan valt de laatste in dezelfde categorie als optie 2 uit het vorige lijstje.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 20:06
Vierde mogelijkheid: Spambotters nemen dat nummer en mensen vullen het (andere) capcha nummer in. Als een soort van misleiding dus.

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


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Maar zo is het wel heel makkelijk om met een scriptje de waarde van 'antwoordcheck' te gebruiken voor de waarde van 'antwoord'.

edit:
Langzaam 8)7

[Voor 8% gewijzigd door BalusC op 24-10-2008 16:26]


  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Goede antwoord: de waarde is 96334 (dus topicwaardig)

Ik kwam er pas later achter dat "antwoordcheck" ook nog in het formulier wordt meeverstuurd....

Het plaatje bevatte 96334, maar zodra er kleuren gebruikt worden, haak ik af.

[Voor 21% gewijzigd door KabouterSuper op 24-10-2008 16:36]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:22

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Kon ook toeval zijn ;)

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Een toeval van minstens 1 op 96334^2? Dat zie ik toch wel als iets té toevallig ;)

[Voor 5% gewijzigd door BalusC op 24-10-2008 18:06]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:12
1 op (RAND_MAX+1), niet 963342, maar ok. :P

[Voor 4% gewijzigd door Soultaker op 24-10-2008 19:06]

Pagina: 1 2 3 ... 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. :)

Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee