[alg] slechtste prog voorbeelden. Overzicht Volgende deel Laatste deel

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

Pagina: 1 ... 7 ... 11 Laatste
Acties:
  • 18.980 views sinds 30-01-2008

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat is daar mis mee? Het lijkt me volkomen valide als de schrijver rekening heeft gehouden met de toekomst, dwz dat er mogelijk een stukje code tussen komt die fBlaat op false zet.

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!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

.oisyn schreef op maandag 15 augustus 2005 @ 18:06:
Wat is daar mis mee? Het lijkt me volkomen valide als de schrijver rekening heeft gehouden met de toekomst, dwz dat er mogelijk een stukje code tussen komt die fBlaat op false zet.
...wat dan wel met commentaar erbij vermeld behoort te worden. :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.


Acties:
  • 0 Henk 'm!

Verwijderd

-NMe- schreef op maandag 15 augustus 2005 @ 18:09:

...wat dan wel met commentaar erbij vermeld behoort te worden. :P
Met het commentaar: "pas op, dit is een variabele, iets of iemand zou de waarde weleens kunnen veranderen?" ;)

Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Mja, het werd dus nooit veranderd en kennelijk was hij toen aan het uitzoeken of die bool soms wel eens false werd :P Weet verder niet meer wat er verder in dat if statement stond, maar er klopte vrij weinig van.

Dat dat soort constructies gebruikt worden omdat het ooit wel eens kan gaan veranderen snap ik, maar dan zet je er niet dat soort commentaar bij.

[ Voor 27% gewijzigd door Radiant op 15-08-2005 18:13 ]


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
.oisyn schreef op maandag 15 augustus 2005 @ 18:06:
Wat is daar mis mee? Het lijkt me volkomen valide als de schrijver rekening heeft gehouden met de toekomst, dwz dat er mogelijk een stukje code tussen komt die fBlaat op false zet.
Het later toevoegen kost niet meer tijd dan er nu rekening mee houden. Zeker niet als het niet altijd gebeurd.
De code wordt er wel 'slechter' door, dus zou ik het niet doen.

Acties:
  • 0 Henk 'm!

Verwijderd

kenneth schreef op maandag 15 augustus 2005 @ 16:10:
Exception misbruik (execption = uit-zon-de-ring ;)) vind ik wel een zodanig grote zonde, dat ik hem niet zou misbruiken voor optimalisatie.
Ik ken 1 situatie in Java die je eigenlijk verplicht (nouja...) om een exception te misbruiken: de isNumber(String); functie die Sun maar weigert om aan Java API toe te voegen. Bijna iedereen die ik ken implementeerd deze met een String.toDouble en geeft dan false terug als er een NumberFormatExeption komt en true als dat niet zo is.

Je zou kunnen zeggen dat je altijd een nummer verwacht via deze functie en dat geen number eraan meegeven een exception is, maar ik blijf het misbruik vinden.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op maandag 15 augustus 2005 @ 23:04:
Ik ken 1 situatie in Java die je eigenlijk verplicht (nouja...) om een exception te misbruiken: de isNumber(String); functie die Sun maar weigert om aan Java API toe te voegen. Bijna iedereen die ik ken implementeerd deze met een String.toDouble en geeft dan false terug als er een NumberFormatExeption komt en true als dat niet zo is.

Je zou kunnen zeggen dat je altijd een nummer verwacht via deze functie en dat geen number eraan meegeven een exception is, maar ik blijf het misbruik vinden.
Je kan toch ook een regexp gebruiken? Al zal dat waarschijnlijk trager zijn dan met een exception werken. :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.


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 11-09 13:55
Owww dat ik dit topic nu pas ontdek!!! Ik werk nu ruim een half jaar bij een internet bedrijf dat voornamelijk sites met een CMS oplevert.
In deze code kom ik regelmatig de volgende 'slimme oplossingen' tegen;

PHP:
1
2
3
4
5
6
$bestelling = ereg_replace("-------","------", $bestelling);
$bestelling = ereg_replace("------","-----", $bestelling);
$bestelling = ereg_replace("-----","----", $bestelling);
$bestelling = ereg_replace("----","---", $bestelling);
$bestelling = ereg_replace("---","--", $bestelling);
$bestelling = ereg_replace("--","-", $bestelling);

Dit wordt dus gebruikt om meerdere liggende streepjes achter elkaar, te vervangen tot 1 liggend streepje...
Toen ik mijn collega vroeg waarom hij het niet zo deed;
PHP:
1
$bestelling = ereg_replace("[-]*","-", $bestelling);

als hij perse een regExp wou gebruiken, of
PHP:
1
2
3
4
5
6
$bestelling = str_replace("-------","------", $bestelling);
$bestelling = str_replace("------","-----", $bestelling);
$bestelling = str_replace("-----","----", $bestelling);
$bestelling = str_replace("----","---", $bestelling);
$bestelling = str_replace("---","--", $bestelling);
$bestelling = str_replace("--","-", $bestelling);

als hij van replace's houd.. was het antwoord;
"Deze code werkt al jaren, en het is zonde van de tijd om het aan te passen"

Mijn baas begrijp het niet dat ik liever dingen opnieuw ontwikkel dan in de code van collega's werk...

[ Voor 45% gewijzigd door frickY op 16-08-2005 09:31 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
frickY schreef op dinsdag 16 augustus 2005 @ 09:30:
als hij van replace's houd.. was het antwoord;
"Deze code wetrkt al jaren, en het is zonde van de tijd om het aan te passen"
Op zich logisch dat het niet aangepast wordt als er niks aan de code gedaan moet worden maar niet echt een antwoord op je vraag natuurlijk ;)

“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!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Waarom zou je correcte code vervangen, ook al is het wtf-code? Ja, er is een grens, maar dan ga je richting IOCCC-code :)

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


Acties:
  • 0 Henk 'm!

Verwijderd

In het algemeen (zo is de opvatting van de meerderheid van mensen) moet je nooit code gaan vervangen , ook al is het een enorme WTF.

Ik heb laatst een topic geopend wat precies hierover gaat:

[rml][ alg] Herschrijven brakke code collega's?[/rml]

Zelfs de experts zijn er duidelijk over: blijf met je poten van andermans code af. Als het werk, dan werkt het.

Alleen in het geval dat je toch een bug moet fixen in de code of echt groot (radicaal) onderhoud moet plegen, kun je overwegen een WTF weg te halen, maar dan moet je wel eerst met de grootste voorzichtigheid en diplomatie je WTF'ende collega benaderen.

Acties:
  • 0 Henk 'm!

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 22:47

Salandur

Software Engineer

frickY schreef op dinsdag 16 augustus 2005 @ 09:30:
Owww dat ik dit topic nu pas ontdek!!! Ik werk nu ruim een half jaar bij een internet bedrijf dat voornamelijk sites met een CMS oplevert.
In deze code kom ik regelmatig de volgende 'slimme oplossingen' tegen;

PHP:
1
2
3
4
5
6
$bestelling = ereg_replace("-------","------", $bestelling);
$bestelling = ereg_replace("------","-----", $bestelling);
$bestelling = ereg_replace("-----","----", $bestelling);
$bestelling = ereg_replace("----","---", $bestelling);
$bestelling = ereg_replace("---","--", $bestelling);
$bestelling = ereg_replace("--","-", $bestelling);


...
Jaja, en wat als er nou 8 -jes inzitten? dan hou je er altijd 2 over 8)7

Assumptions are the mother of all fuck ups | iRacing Profiel


Acties:
  • 0 Henk 'm!

  • Oscar Mopperkont
  • Registratie: Februari 2001
  • Laatst online: 03-08-2024

Oscar Mopperkont

Hoepel op!

Al mijn eigen code komt denk ik wel in aanmerking! Datastructuren? Nog nooit van gehoord! Ik doe alles ad-hoc en ik merk zelf vaak dat ik dingen verkeerd had aangepakt. Maar goed, mijn excuus is dan dat ik alleen een inleidend vak in Pascal heb gehad en nu met Delphi loop te "prutsen" (vanuit oogpunt van iemand die echt kan programmeren). Ben ook geen hobbyist, maar doe het als bijbaantje als student-assistent. Mag wat algoritmes proggen, dus het gaat maar om kleine dingen, waar je met mijn programmeerwerk nog wel weg komt.

ik blijf dan ook maar prutsen met arrays, waar je ook een TObjectlist zou kunnen gebruiken... Maar dat vergeet ik dan weer als ik aan iets nieuws begin.

[ Voor 14% gewijzigd door Oscar Mopperkont op 16-08-2005 11:20 ]


Acties:
  • 0 Henk 'm!

  • schoene
  • Registratie: Maart 2003
  • Laatst online: 21:17
Heb onlangs deze code tegengekomen op mn werk:

C++:
1
2
3
4
5
6
7
8
std::string aString;

// aString wordt ingevuld ...

if (aString == "eerste waarde" || "tweede waarde")
{
// doe iets
}

De code in het if-block werd dus altijd uitgevoerd. die code was eigenlijk niet
echt belangrijk, met als gevolg dat dit er al heel lang in zat.
Toch wel grappig, want als je de if statement leest, klinkt het wel goed :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
schoene schreef op dinsdag 16 augustus 2005 @ 11:34:
Heb onlangs deze code tegengekomen op mn werk:
Dit is nou mijn nachtmerrie. Code van anderen, waarop je op de eerste 15 keer dat je het leest niet ziet waar de fout zit. En als je vervolgens aan het debuggen slaat jezelf voor je kop slaat en roept: "Dat ik dat niet heb gezien!". Very obvious foutje, maar wel een gemene. Overigens vind ik dit soort fouten wel een fout van de developer in kwestie die er uit had moeten komen tijdens het testen van het betreffende blok code. In dit geval had hij alle "randwaarden" moeten testen, dus "eerste waarde", "tweede waarde" een "andere waarde". Dit zou, in ieder geval bij ons, niet door de tests komen en dus (in princiepe *kuch*) niet in productie code terechtkomen.

[ Voor 12% gewijzigd door RobIII op 16-08-2005 11:40 ]

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

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
schoene schreef op dinsdag 16 augustus 2005 @ 11:34:
Heb onlangs deze code tegengekomen op mn werk:

C++:
1
2
3
4
5
6
7
8
std::string aString;

// aString wordt ingevuld ...

if (aString == "eerste waarde" || "tweede waarde")
{
// doe iets
}

De code in het if-block werd dus altijd uitgevoerd. die code was eigenlijk niet
echt belangrijk, met als gevolg dat dit er al heel lang in zat.
Toch wel grappig, want als je de if statement leest, klinkt het wel goed :)
Dit is idd een veel voorkomende (beginners) fout. Ik heb hem ook al enkele keren gezien.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Dit blijft ook altijd tricky:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int nextValue(int& x) {
    return (x = x + 1); // or complicated series based on x
}

int main() {
   int series = 0;
   std::cout 
      << " n0 = " << series 
      << " n1 = " << nextValue(series) 
      << " n2 = " << nextValue(series) 
      << std::endl;

// prints: "n0 = 2 n1 = 2 n2 = 2" on VC7.1
}


(en wat als je dit met bekende C library functies doet die niet thread safe zijn? Of bv met rand()? ...)

[ Voor 95% gewijzigd door Zoijar op 16-08-2005 13:22 . Reden: oops foutje :P ]


Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Zoijar schreef op dinsdag 16 augustus 2005 @ 13:09:
Dit blijft ook altijd tricky:
C++:
1
2
// prints: "n0 = 2 n1 = 2 n2 = 2" on VC7.1
}


(en wat als je dit met bekende C library functies doet die niet thread safe zijn? Of bv met rand()? ...)
Ik zit te twijfelen of dit nou per compiler verschillend is. Als namelijk bekend is of de operator links of rechts associatief is, dan heeft dit een eenduidige betekenis. VC7.1 behandelt het volgens mij als rechts assiciatief, maar ligt zoiets vast in de standaard?

edit:
Nu ik er over nadenk, wsch niet, omdat het een optimalisatie kwestie is.

[ Voor 19% gewijzigd door Glimi op 16-08-2005 13:26 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Zoijar schreef op dinsdag 16 augustus 2005 @ 13:09:
Dit blijft ook altijd tricky:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int nextValue(int& x) {
    return (x = x + 1); // or complicated series based on x
}

int main() {
   int series = 0;
   std::cout 
      << " n0 = " << series 
      << " n1 = " << nextValue(series) 
      << " n2 = " << nextValue(series) 
      << std::endl;

// prints: "n0 = 2 n1 = 2 n2 = 2" on VC7.1
}


(en wat als je dit met bekende C library functies doet die niet thread safe zijn? Of bv met rand()? ...)
Variatie op de 'standaard' bug, waar idd veel mensen intrappen.

C++:
1
2
3
4
5
6
7
8
9
void print( int a, int b ) {
 std::cout "a=" << a << " b=" << b << std:endl;
}

int main() {
   int series = 0;
   print ( series, nextValue(series) );
   return 0;
}


Dit is ook zoiets. De output is nu undefined. Ik heb hier ooit eens slaande ruzie over gehad met een collega bij een vorig bedrijf. Ik zei dat je niet op de volgorde van evaluatie moest vetrouwen en dat dit dus fout kon gaan. Het punt was dat het toevallig goed ging op de compiler die we toen gebruikte en die jongen me gewoon keihard niet geloofde. Ik kon lullen als brugman, maar hij geloofde me gewoon keihard niet. Nog een passage in de standaard laten zien, maar ook dat mocht niet baten :(

Acties:
  • 0 Henk 'm!

Verwijderd

Een echte WTF! die ik laatst tegen kwam:

Een collega van mij trapte in de bekende val door steeds meer java code (scriptlets) aan een JSP pagina toe te voegen. Ik heb dus even overlegd met hem en gezegd dat je eigenlijk geen logica met java (Scriptlets) in een JSP pagina moet gebruiken, maar dat je alleen HTML en taglibs (bv JSTL) dient te gebruiken voor opmaak.

Nou, dat 'voor opmaak' was zeker niet goeddoorgekomen. Een tijdje later moest ik toevallig in een JSP pagina van hem kijken, en mijn eerste reactie was daadwerkelijk: WTF!?

Wat was er gebeurd? Hij had een gedeelte van de logica op de pagina gewoon herschreven in JSTL! Alle Java statements gewoon vervangen door JSTL constructies. |:(

(maar goed, na wat overleg is het weer allemaal goedgekomen, en nu terugkijkend is het wel lachen eigenlijk :) )

Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Glimi schreef op dinsdag 16 augustus 2005 @ 13:23:
Ik zit te twijfelen of dit nou per compiler verschillend is. Als namelijk bekend is of de operator links of rechts associatief is, dan heeft dit een eenduidige betekenis. VC7.1 behandelt het volgens mij als rechts assiciatief, maar ligt zoiets vast in de standaard?

edit:
Nu ik er over nadenk, wsch niet, omdat het een optimalisatie kwestie is.
Ligt niet vast nee, en verschilt dus per compiler. De associativiteit van de operators ligt wel vast, maar de volgorde van executie niet. Het is (vrijwel) niet mogelijk om zeker te zijn van de volgorde van executie in C++. Er zijn maar twee regels, en dat is dat tussen sequence points alle side effect 'gedaan' zijn, en dat de waarneembare status onveranderd blijft door reordering van instructies. Waarneembare status is I/O en I/O naar volatile. Je kan dus enigszins wat doen met 'volatile' om de ordering te beinvloeden. Dit is ook waarom bv double checked locking niet werkt. Omdat je bij een statement van de vorm "instance = new Singleton;" niet weet wat er eerst gebeurt: de allocatie, de constructie, of de pointer assignment.

Acties:
  • 0 Henk 'm!

Verwijderd

net eentje die perfect door de compiler heen komt:

code:
1
2
3
4
5
private string _patientGuid
{
get {return (string) Session["PatientGuid"];}
set {Session["PatientGuid"] = _patientGuid;}
}

Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Verwijderd schreef op dinsdag 16 augustus 2005 @ 13:39:
Dit is ook zoiets. De output is nu undefined. Ik heb hier ooit eens slaande ruzie over gehad met een collega bij een vorig bedrijf. Ik zei dat je niet op de volgorde van evaluatie moest vetrouwen en dat dit dus fout kon gaan. Het punt was dat het toevallig goed ging op de compiler die we toen gebruikte en die jongen me gewoon keihard niet geloofde. Ik kon lullen als brugman, maar hij geloofde me gewoon keihard niet. Nog een passage in de standaard laten zien, maar ook dat mocht niet baten :(
Het is erg vervelend als compilers dingen die undefined zijn wel goed doen... Net als bv geheugen of pointers op 0 initialiseren. Tijd terug nog een probleem mee gehad: een groot stuk code werkte overal, en ik ging er thuis aan werken en daar crashed het runtime. Na uren zoeken bleek het dat er een pointer niet geinitialiseerd was. Er werden wel null-checks op pointers gedaan, maar blijkbaar waren die toevallig null op alle andere platformen; behalve de mijne dus.

Erg handig om alles op 0xDEADBEEF the initiaiseren :)

Acties:
  • 0 Henk 'm!

  • qless
  • Registratie: Maart 2000
  • Laatst online: 17:21

qless

...vraag maar...

Ook iets leuk (eigen fout)

Op sommige punten zet ik bij een try {} catch een system exit neer omdat ik dan zeker wil weten dat het programma niet meer start/verder gaat.

Best aardig natuurlijk, alleen niet als je dezelfde constructie toepast in een java bean...ploff daar ging jboss keurig netjes alles afsluiten.

Website|Air 3s|Mini 4 Pro|Avata 2|Canon R6|Canon 5d2|8 fisheye|14f2.8|24f2.8|50f1.8|135f2|10-22|17-40|24-105|70-300|150-600


Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 23:21

AW_Bos

Liefhebber van nostalgie... 🕰️

Dan heb ik de echte nachtmerrie gevonden op enkele web-scripters forums.
Misschien klinkt Criminals (tekst-based RGP game) wel bekend bij jullie, vele jongeren gebruiken deze source. Maar nog steeds is het onbekend wie nou de auteur is.

Laat ik maar een stukje geven, en houd je goed vast aan je stoel zou ik zeggen :+:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php /* ------------------------- */  

  include("_include-config.php");  
  if(! check_login()) {  
    header("Location: login.php");  
    exit;  
  }  

  if(! ($data->level & 0x80))  
    exit;  

  mysql_query("UPDATE `[users]` SET `online`=NOW() WHERE `login`='{$data->login}'");  

/* ------------------------- */ ?>  

<html> 
<head> 

<title> Cyber-war </title> 
<link rel="stylesheet" type="text/css" href="<?php echo ($_COOKIE['v'] == 2) ? "css-v2.css" :  
"css-v1.css"; ?>"> 

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
</head> 

<style="background: #000000; margin: 0px;"> 
Je moet admin heten om iedereen te resetten.<br> 
<? if($data->login == admin) { ?>  
<a href="massa-reset.php?p=tjahierstondeenpasswoord">Klik hier om het hele spel te 
Resetten.</a><br> 

<?php  


if($_GET['p'] == "tjahierstondeenpasswoord"){  
mysql_query("UPDATE `[users]` SET `IPs`=''");  
mysql_query("UPDATE `[users]` SET `cash`='2500'");  
mysql_query("UPDATE `[users]` SET `bank`='2500'");  
mysql_query("UPDATE `[users]` SET `bankleft`='5'");  
mysql_query("UPDATE `[users]` SET `bankmax`='2500'");  
mysql_query("UPDATE `[users]` SET `clicks`='0'");  
mysql_query("UPDATE `[users]` SET `clickstoday`='0'");  
mysql_query("UPDATE `[users]` SET `attack`='0'");  
mysql_query("UPDATE `[users]` SET `defence`='0'");  
mysql_query("UPDATE `[users]` SET `attwins`='0'");  
mysql_query("UPDATE `[users]` SET `attlosses`='0'");  
mysql_query("UPDATE `[users]` SET `defwins`='0'");  
mysql_query("UPDATE `[users]` SET `deflosses`='0'");  
mysql_query("UPDATE `[users]` SET `clan`=''");  
mysql_query("UPDATE `[users]` SET `clanlevel`='0'");  
mysql_query("UPDATE `[users]` SET `turns`='100'");  
mysql_query("UPDATE `[users]` SET `showonline`='1'");  
mysql_query("UPDATE `[users]` SET `attack`='0'");  
mysql_query("UPDATE `[users]` SET `defence`='0'");  
mysql_query("UPDATE `[users]` SET `attwins`='0'");  
mysql_query("UPDATE `[users]` SET `Mes`='0'");  
mysql_query("UPDATE `[users]` SET `Walter P99`='0'");  
mysql_query("UPDATE `[users]` SET `Uzi`='0'");  
mysql_query("UPDATE `[users]` SET `MP5k`='0'");  
mysql_query("UPDATE `[users]` SET `Flashbang`='0'");  
mysql_query("UPDATE `[users]` SET `Granaat`='0'");  
mysql_query("UPDATE `[users]` SET `Shotgun`='0'");  
mysql_query("UPDATE `[users]` SET `G36C`='0'");  
mysql_query("UPDATE `[users]` SET `SIG 552`='0'");  
mysql_query("UPDATE `[users]` SET `Ak47`='0'");  
mysql_query("UPDATE `[users]` SET `Ak Beta`='0'");  
mysql_query("UPDATE `[users]` SET `Scherpschut geweer`='0'");  
mysql_query("UPDATE `[users]` SET `M4`='0'");  
mysql_query("UPDATE `[users]` SET `Granaat Lanceerder`='0'");  
mysql_query("UPDATE `[users]` SET `Bazooka`='0'");  
mysql_query("UPDATE `[users]` SET `Kogelvrij vest`='0'");  
mysql_query("UPDATE `[users]` SET `Bulldog`='0'");  
mysql_query("UPDATE `[users]` SET `Camera`='0'");  
mysql_query("UPDATE `[users]` SET `Hek`='0'");  
mysql_query("UPDATE `[users]` SET `Muur`='0'");  
mysql_query("UPDATE `[users]` SET `Bunker`='0'");  
mysql_query("UPDATE `[users]` SET `Mobieltje`='1'");  
mysql_query("UPDATE `[users]` SET `FN P90`='0'");  
mysql_query("UPDATE `[users]` SET `Chip`='0'");  
mysql_query("UPDATE `[users]` SET `Helm`='0'");  
mysql_query("UPDATE `[users]` SET `Politie wagen`='0'");  
print <<<ENDHTML  
<p><font color="#FFFFFF" size="4"><b>U heeft net het hele spel gereset!!</b></font></p>  
<p><font size="4"><a href="hq.php">klik  
hier om terug te gaan naar het hoofdkwartier</a></font></p>  
ENDHTML;}  
  else  
    print "<BR>n";  
}  
?>  
</body> 
</html> 

en het ergste vind ik dat ze voor het updaten van diverse velden al zat queries gebruiken. je kan ook meerdere dingen updaten in 1 querie. ? Als de auteur dit makkelijk vind, echt handig is het niet ?
mysql_pconnect() is ook niet handig. Persistentie connecties zijn niet leuk meestal voor servers.
Maar het blijft een vraag. Wie o wie is de maker? :P. Dat zal een eeuwige vraag blijven denk ik :p.

[ Voor 87% gewijzigd door AW_Bos op 16-08-2005 16:02 ]

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • Rac-On
  • Registratie: November 2003
  • Niet online
mjah, minstens even erg vind ik dat je "mass reset" optie alleen beveiligd wordt door een $_GET variabele en dat je een user identificeerd adv zijn/haar naam ipv een userid...

doet niet aan icons, usertitels of signatures


Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Zoijar schreef op dinsdag 16 augustus 2005 @ 13:49:
Ligt niet vast nee, en verschilt dus per compiler. De associativiteit van de operators ligt wel vast, maar de volgorde van executie niet. Het is (vrijwel) niet mogelijk om zeker te zijn van de volgorde van executie in C++.
Ok, ik ziet niet diep in C++, dus dit is pure speculatie van mijn kant hoor. Ik wil je ook niet in twijfel trekken, maar eerder de boel wat beter begrijpen.

Stel << is rechts associeerend, dan kunnen we het schrijven als:
code:
1
2
3
4
5
(std::cout
      << (" n0 = " << (series 
      << (" n1 = " << (nextValue(series) 
      << (" n2 = " << (nextValue(series) 
      << std::endl) ) ) ) ) ) )

Stel we vervangen nu de operator door een functiecall
code:
1
2
3
4
5
6
7
8
f(std::cout,
  f(" n0 = ",
    f(series, 
      f(" n1 = ",
        f(nextValue(series), 
          f(" n2 = ",
            f(nextValue(series), 
              f(std::endl) ) ) ) ) ) )

Hij zal eerst z'n argument moeten berekenen voordat hij de call kan doen.
Err... hmmz nu ik het uitschrijf zie ik het ook wel staan eigenlijk. Hij kan natuurlijk eerst kiezen om het tweede argument te berekenen of het eerste argument. Net wat het beste uitkomt en daarmee is het niet bepaald in welke volgorde hij de boel gaat uitrekenen.
Er zijn maar twee regels, en dat is dat tussen sequence points alle side effect 'gedaan' zijn, en dat de waarneembare status onveranderd blijft door reordering van instructies. Waarneembare status is I/O en I/O naar volatile. Je kan dus enigszins wat doen met 'volatile' om de ordering te beinvloeden. Dit is ook waarom bv double checked locking niet werkt. Omdat je bij een statement van de vorm "instance = new Singleton;" niet weet wat er eerst gebeurt: de allocatie, de constructie, of de pointer assignment.
Super, duidelijk. Bedankt voor het inzicht Zoijar. d:)b

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

DateTime discussie verplaatst naar [rml][ VB/.Net] DateTime perikelen[/rml]

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!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

AW_Bos schreef op dinsdag 16 augustus 2005 @ 15:56:
Dan heb ik de echte nachtmerrie gevonden op enkele web-scripters forums.
Misschien klinkt Criminals (tekst-based RGP game) wel bekend bij jullie, vele jongeren gebruiken deze source. Maar nog steeds is het onbekend wie nou de auteur is.

Laat ik maar een stukje geven, en houd je goed vast aan je stoel zou ik zeggen :+:
PHP:
1
{lap code}

en het ergste vind ik dat ze voor het updaten van diverse velden al zat queries gebruiken. je kan ook meerdere dingen updaten in 1 querie. ? Als de auteur dit makkelijk vind, echt handig is het niet ?
mysql_pconnect() is ook niet handig. Persistentie connecties zijn niet leuk meestal voor servers.
Maar het blijft een vraag. Wie o wie is de maker? :P. Dat zal een eeuwige vraag blijven denk ik :p.
Ik kreeg pas geleden ook een mailtje van iemand die wat dingen in elkaar had gedraaid om al zijn users te kunnen mailen. Het haalde alle usernames op, doorliep ze vervolgens allemaal, deed daarin een query om te kijken wat de prefs waren, aan de hand van die prefs werd er nog een query gedaan om data uit de database te trekken, en vervolgens nog een query om de hoeveelheid mailtjes die die user had gehad met 1 op te hogen. In principe is dat voor een scriptje wat incidenteel 10 users mailt niet zo'n probleem, maar wel als je het elke week loslaat op zo'n 1500 users :X. Met wat joins in de queries heb ik het geheel terug gebracht tot 1 query vooraf, en 1 query bij elke lusdoorloop die de teller ophoogde als het versturen van de mail gelukt was. Preventief heb ik de memory limit voor het script wat opgeschroeft zodat hij weer even vooruit kan :).

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 22:47

Salandur

Software Engineer

AtleX schreef op dinsdag 16 augustus 2005 @ 16:50:
[...]


Ik kreeg pas geleden ook een mailtje van iemand die wat dingen in elkaar had gedraaid om al zijn users te kunnen mailen. Het haalde alle usernames op, doorliep ze vervolgens allemaal, deed daarin een query om te kijken wat de prefs waren, aan de hand van die prefs werd er nog een query gedaan om data uit de database te trekken, en vervolgens nog een query om de hoeveelheid mailtjes die die user had gehad met 1 op te hogen. In principe is dat voor een scriptje wat incidenteel 10 users mailt niet zo'n probleem, maar wel als je het elke week loslaat op zo'n 1500 users :X. Met wat joins in de queries heb ik het geheel terug gebracht tot 1 query vooraf, en 1 query bij elke lusdoorloop die de teller ophoogde als het versturen van de mail gelukt was. Preventief heb ik de memory limit voor het script wat opgeschroeft zodat hij weer even vooruit kan :).
het kan zelfs met 2 querys: eentje om alle mailadressen te selecteren, en eentje om bij iedereen met die een mail gaat krijgen hem op te hogen.

Assumptions are the mother of all fuck ups | iRacing Profiel


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Salandur schreef op dinsdag 16 augustus 2005 @ 17:15:
[...]

het kan zelfs met 2 querys: eentje om alle mailadressen te selecteren, en eentje om bij iedereen met die een mail gaat krijgen hem op te hogen.
En als het versturen van 1 van die mails fout gaat dan? Weer een update om de teller te verlagen? :X

[ Voor 7% gewijzigd door RobIII op 16-08-2005 17:18 ]

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

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat let je om de update pas te doen nadat de mails verstuurd zijn?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Glimi schreef op dinsdag 16 augustus 2005 @ 16:07:
Super, duidelijk. Bedankt voor het inzicht Zoijar. d:)b
Geen probleem. Ik moest het zelf ook weer even goed nakijken, waardoor het nu weer vers in het geheugen ligt. Altijd goed om dit soort dingen bij te houden :)

MSVC maakt er trouwens leuke code van:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
; 58   :    int series = 0;
; 59   :    std::cout << "n0 = " << series << " n1 = " << nextValue(series) << " n2 = " << nextValue(series) << std::endl; 

    push    2
    push    OFFSET FLAT:??_C@_06FNDEGBIO@?5n2?5?$DN?5?$AA@
    push    2
    push    OFFSET FLAT:??_C@_06BKJEBLFO@?5n1?5?$DN?5?$AA@
    push    2
    push    OFFSET FLAT:??_C@_05MEOHHFKP@n0?5?$DN?5?$AA@
    push    OFFSET FLAT:?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::cout
    call    ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char> >
    add esp, 8
    mov ecx, eax
    call    ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z ; std::basic_ostream<char,std::char_traits<char> >::operator<<

Zo zie je maar weer...functie aanroep, welke functie aanroep? ;) (en de staat van huidige optimizing compilers, not bad)

[ Voor 10% gewijzigd door Zoijar op 16-08-2005 17:30 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Grappig is overigens dat MSVC++ 8.0 wel 0, 1, 2 output ;)

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!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
.oisyn schreef op dinsdag 16 augustus 2005 @ 17:22:
Wat let je om de update pas te doen nadat de mails verstuurd zijn?
code:
1
2
3
4
5
6
7
If bAllSentOK then
  Update users set mails_received = mails_received + 1
else
  for t=0 to UBound(SuccessArray)
    Update users set mails_received = mails_received + 1 where us_id = SuccessArray(T)
  next
end if

Zoiets? Lekker duidelijk ... Mag je ook nog eens een array gaan zitten bijhouden tijdens het mails sturen welke nu succesvol zijn en welke niet. Of zoiets:
code:
1
2
3
4
5
6
7
8
If bAllSentOK then
  Update users set mails_received = mails_received + 1
else
  for t=0 to UBound(SuccessArray)
    sOut = sOut & SuccessArray(T) & ","    
  next
  Update users set mails_received = mails_received + 1 where us_id in (Left(sOut,Len(sOut)-1))
end if

(Beide "pseudo code" en vrij SQL e.d. door elkaar).

Doe mij dan maar lekker de DB bijwerken na ieder mailtje. Houdt de load ook wat lager wegens de "vertraging" tussen de queries wegens de mails sturen :P

En nog beter: Een disconnected recordsetje bijhouden, daarbij zelf de waardes ophogen en dan uiteindelijk connecten en een updatebatch er tegen aan knallen :+

[ Voor 27% gewijzigd door RobIII op 16-08-2005 17:37 ]

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

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

.oisyn schreef op dinsdag 16 augustus 2005 @ 17:31:
Grappig is overigens dat MSVC++ 8.0 wel 0, 1, 2 output ;)
2, 2, 1 bij mij? (8.0.50215.44 beta2, zowel debug als release build) Ach het bewijst in ieder geval het punt ;)

Acties:
  • 0 Henk 'm!

  • Dannr
  • Registratie: Augustus 2005
  • Laatst online: 15:16
Glimi schreef op dinsdag 16 augustus 2005 @ 13:23:
[...]

Ik zit te twijfelen of dit nou per compiler verschillend is. Als namelijk bekend is of de operator links of rechts associatief is, dan heeft dit een eenduidige betekenis. VC7.1 behandelt het volgens mij als rechts assiciatief, maar ligt zoiets vast in de standaard?

edit:
Nu ik er over nadenk, wsch niet, omdat het een optimalisatie kwestie is.
Beter laat dan nooit, gcc maakt ervan:
code:
1
 n0 = 2 n1 = 2 n2 = 1

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nee, want ik ging er al niet vanuit dat iedereen standaard de mail krijgt omdat je dat nou net in je preferences in kon stellen.
Lekker duidelijk... Mag je ook nog eens een array gaan zitten bijhouden tijdens het mails sturen welke nu succesvol zijn en welke niet.
Zoals ik al zei, die array zul je toch op de een of andere manier hebben, of die nou rechtstreeks uit je database komt of even ergens intern opgeslagen staat. Ik zie niet in hoe dat slecht is. En als je dan de mail aan het versturen bent kun je iedereen bij wie het foutgaat uit de lijst wegstrepen en dan hou je exact een lijst over bij wie het wel gelukt is. Wat is hier nou "bad practice" aan?

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!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Dannr schreef op dinsdag 16 augustus 2005 @ 17:40:
Beter laat dan nooit, gcc maakt ervan:
code:
1
 n0 = 2 n1 = 2 n2 = 1
Hmmmz, nu ik dit zie en dan het stukje van mezelf erboven, zie ik dat ik weer wat onzin heb neergezet. Rechts associatief is onzin, VC7.1 lijkt gewoon eerst alle functiecalls te doen. GCC en de VC van Zoijar doen wel de boel netjes van rechts naar links.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Zoijar schreef op dinsdag 16 augustus 2005 @ 17:40:
[...]

2, 2, 1 bij mij? (8.0.50215.44 beta2, zowel debug als release build) Ach het bewijst in ieder geval het punt ;)
Ik krijg idd ook 2, 2, 1 in een release build, maar in debug is het toch echt 0, 1, 2. De /clr optie staat wel aan, even kijken of dat uitmaakt :)

.edit: dat maakt idd uit :D

[ Voor 4% gewijzigd door .oisyn op 16-08-2005 17:49 ]

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!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
.oisyn schreef op dinsdag 16 augustus 2005 @ 17:45:
Wat is hier nou "bad practice" aan?
Niks joh! Dat was mijn punt :+
We gaan lekker vandaag met z'n tweetjes he? :> Ik zal je een biertje aanbieden op de meeting :P

[ Voor 35% gewijzigd door RobIII op 16-08-2005 17:49 ]

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

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 20:51

mulder

ik spuug op het trottoir

C#:
1
Decimal huisnr = (decimal)BllHelper.ConvertToDecimal( this.huisnummer.Text.Trim() );


:/

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 09-09 13:57

pjvandesande

GC.Collect(head);

Don Facundo schreef op woensdag 17 augustus 2005 @ 09:45:
C#:
1
Decimal huisnr = (decimal)BllHelper.ConvertToDecimal( this.huisnummer.Text.Trim() );


:/
Wat maakt dit het slechtste prog voorbeeld?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik kan een aantal dingen bedenken. Ten eerste zie ik geen foutafvanging staan en ten tweede zie ik ook niet in waarom je een BllHelper moet maken voor een convert van string naar decimal

daar heb je tenslotte
C#:
1
Convert.ToDecimal( string );

voor. Nou zou het kunnen dat die BllHelper geen exception gooit maar dan weet je nog steeds niet wanneer het een ongeldig nummer is.

[edit]
O en de cast lijkt me natuurlijk ook niet meer nodig als je net Geconverteerd hebt ;)

[ Voor 11% gewijzigd door Woy op 17-08-2005 10:01 ]

“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!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 20:51

mulder

ik spuug op het trottoir

questa schreef op woensdag 17 augustus 2005 @ 09:53:
[...]


Wat maakt dit het slechtste prog voorbeeld?
1) Huisnummer decimal?
2) Decimal = (decimal)Convert.ToDecimal() beetje overdone? En cast dan nog naar Decimal en niet naar decimal.

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Ik kwam pas nog een website tegen waar een contact formulier in stond, met een hidden form-field met het adres waar de email naartoe gestuurd werd. Ik even een eigen form gemaakt, met mijn eigen adres in het 'naar'-veld, en ja hoor: email kwam netjes bij mij aan. Lijkt me toch ook iets dat je eigenlijk zou willen beveiligen. :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:19
Die cast is idd een beetje overdone, maar een decimal en een Decimal in .NET mappen eigenlijk naar hetzelfde datatype. Een decimal is geloof ik, het primitieve type, en Decimal is het .NET type.

Maar een huisnummer in een decimal opslaan is wel raar ja.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
whoami schreef op woensdag 17 augustus 2005 @ 10:08:
Die cast is idd een beetje overdone, maar een decimal en een Decimal in .NET mappen eigenlijk naar hetzelfde datatype. Een decimal is geloof ik, het primitieve type, en Decimal is het .NET type.

Maar een huisnummer in een decimal opslaan is wel raar ja.
Ik weet het niet zeker maar volgens mij is het zelfs gewoon een Alias dus dan is het voor de compiler exact hetzelfde.

Maar idd Gebruik dan gewoon altijd dezelfde dat is ieder geval duidelijker.

Voor de rest kan je een Huisnummer natuurlijk best numeriek opslaan als je dan ook maar een apart gedeelte hebt voor de toevoeging. Volgens mij heeft elk adres nog steeds een numeriek huisnummer gedeelte. Al zou ik het zelf idd niet als numeriek opslaan.

“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!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 09-09 13:57

pjvandesande

GC.Collect(head);

Dit is inderdaad onnodig.
2) Decimal = (decimal)Convert.ToDecimal() beetje overdone? En cast dan nog naar Decimal en niet naar decimal.
Die merkt de compiler bij een release build en de optimizer zal dit gewoon negeren.
rwb schreef op woensdag 17 augustus 2005 @ 10:14:
[...]

Voor de rest kan je een Huisnummer natuurlijk best numeriek opslaan als je dan ook maar een apart gedeelte hebt voor de toevoeging. Volgens mij heeft elk adres nog steeds een numeriek huisnummer gedeelte.
Ik zou inderdaad ook gewoon een string pakken.

[ Voor 33% gewijzigd door pjvandesande op 17-08-2005 10:19 ]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:19
rwb schreef op woensdag 17 augustus 2005 @ 10:14:
[...]

Ik weet het niet zeker maar volgens mij is het zelfs gewoon een Alias dus dan is het voor de compiler exact hetzelfde.
Ik ben er vrijwel zeker van dat dat niet zo is; Decimal is zeer zeker een struct, en decimal is een primitive. Om van decimal naar Decimal te gaan, en omgekeerd, moet er volgens mij ook geboxed en ge-unboxed worden.
Er moet niet geboxed worden.
Voor de rest kan je een Huisnummer natuurlijk best numeriek opslaan als je dan ook maar een apart gedeelte hebt voor de toevoeging. Volgens mij heeft elk adres nog steeds een numeriek huisnummer gedeelte. Al zou ik het zelf idd niet als numeriek opslaan.
Numeriek opslaan, ok, maar een decimal is toch niet nodig ? Gebruik dan gewoon een int.

[ Voor 3% gewijzigd door whoami op 17-08-2005 10:27 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13-09 09:39

Janoz

Moderator Devschuur®

!litemod

rwb schreef op woensdag 17 augustus 2005 @ 10:14:
[...]

Ik weet het niet zeker maar volgens mij is het zelfs gewoon een Alias dus dan is het voor de compiler exact hetzelfde.

Maar idd Gebruik dan gewoon altijd dezelfde dat is ieder geval duidelijker.

Voor de rest kan je een Huisnummer natuurlijk best numeriek opslaan als je dan ook maar een apart gedeelte hebt voor de toevoeging. Volgens mij heeft elk adres nog steeds een numeriek huisnummer gedeelte. Al zou ik het zelf idd niet als numeriek opslaan.
Waarom dan geen int? Ik ken niemand die op nummer 15 en een half woont. ;)

edit @ hieronder : de aanname van apart opslaan was al in het door mij gequote stukje gedaan.

[ Voor 8% gewijzigd door Janoz op 17-08-2005 11:05 ]

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!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 21:50

Cyphax

Moderator LNX
Janoz schreef op woensdag 17 augustus 2005 @ 10:23:
[...]


Waarom dan geen int? Ik ken niemand die op nummer 15 en een half woont. ;)
Flatbewoners hebben nog weleens de neiging op 63A ofzo te wonen. :)
Als je per se je huisnummer in een int wil hebben moet je 't in 2 delen opslaan anders... dat lijkt me ook wat onhandig. :)

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Idd een Decimal is een beetje overbodig. Maar ook als int opslaan zou ik echt alleen doen als je perse wilt dat alleen het numerieke gedeelte in het veld kan staan.

want ik vindt ook de toevoeging eigenlijk wel bij het nummer horen omdat het gewoon nodig is om een adres uniek te indentificeren. want je kan ook nummers hebben als 2 bis 2 hoog. Dan kan je natuurlijk bis 2 hoog als toevoegsel opslaan maar ik vindt het dan duidelijker om het gewoon in een veld te houden aangezien het gewoon een unieke identifier binnen de straat is. Bedenkt me trouwens wel dat dat problemen kan geven met het sorteren.
Ik ben er vrijwel zeker van dat dat niet zo is; Decimal is zeer zeker een struct, en decimal is een primitive.
Ik wist het idd ook niet zeker. Ik gebruik ze ook meestal zo. Als ik een datatype aangeef dan gebruik ik decimal en als ik er een static method van gebruik gebruik ik Decimal aangezien je een method aanroept op een Object en de standaard is nou eenmaal dat je daarvoor hoofdletters gebruikt.

“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!

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 16:56

Tomatoman

Fulltime prutser

Cyphax schreef op woensdag 17 augustus 2005 @ 10:27:
[...]

Flatbewoners hebben nog weleens de neiging op 63A ofzo te wonen. :)
Als je per se je huisnummer in een int wil hebben moet je 't in 2 delen opslaan anders... dat lijkt me ook wat onhandig. :)
In tweeëen opdelen werkt niet, daarvoor zijn er te veel varianten. Bij woonboten wordt bijvoorbeeld het huisnummer aangehouden van het huis waarvoor de boot ligt en wordt er a.b. (= aan boord) voor gezet: Lindelaan a.b. 12. Wat nog veel vaker voorkomt: een pand met meerdere huisnummers: Lindelaan 14-18. En dan heb ik het nog niet eens over varianten zoals Lindelaan 22bis. Trouwens: welk huisnummer zou je willen gebruiken om een bouwplaats in een nieuwe wijk aan te duiden? Vaak bestaat daar nog niet eens een officiële postcode. Kortom: een huisnummer moet je in een string opslaan.

Een goede grap mag vrienden kosten.


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
whoami schreef op woensdag 17 augustus 2005 @ 10:19:
[...]

Ik ben er vrijwel zeker van dat dat niet zo is; Decimal is zeer zeker een struct, en decimal is een primitive.
Je hebt gelijk. Ik was even in de war met bool wat wel een alias is voor System.Boolean.

System.Decimal is idd een struct.

“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!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nou kan ik niet verifieren hoe het met decimal zit aangezien C++/cli dat niet kent als native type, maar alle System types mappen direct naar primitives hoor:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>

using namespace System;

void f(System::Int32) { }
void f(int) { }   // error: f(int) already has a body

int main()
{
    std::cout << typeid(System::Boolean).name() << std::endl;  // outputs "bool"
    std::cout << typeid(System::Int32).name() << std::endl;  // outputs "int"
}


offtopic:
I love C++/CLI O+ O+ O+


.edit: in de MSDN staat overigens ook dat decimal een C# alias is voor System.Decimal.

[ Voor 15% gewijzigd door .oisyn op 17-08-2005 11:28 ]

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!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ok dan zal het met decimal wel hetzelfde zijn. Ik dacht ook dat ik dat ergens gelezen had. Maar in de documentatie staat dat er bij bool specifiek bij en bij de andere types niet.

idd
C#:
1
2
3
4
5
6
public void Test( Decimal a )
{
}
public void Test( decimal a )
{
}

geeft compiler error
Class 'WindowsApplication2.Form1' already defines a member called 'Test' with the same parameter types
.edit: in de MSDN staat overigens ook dat decimal een C# alias is voor System.Decimal.
Mmm dat zag ik hier niet staan. En bij bool wel letterlijk
[edit]
nou ik beter kijk toch wel
The following table shows the keywords for built-in C# types, which are aliases of predefined types in the System namespace.

C# Type .NET Framework type
bool System.Boolean
byte System.Byte
sbyte System.SByte
char System.Char
decimal System.Decimal
double System.Double
float System.Single
int System.Int32
uint System.UInt32
long System.Int64
ulong System.UInt64
object System.Object
short System.Int16
ushort System.UInt16
string System.String

[ Voor 114% gewijzigd door Woy op 17-08-2005 11:41 ]

“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!

Verwijderd

offtopic:
Herb Sutter is een cool mannetje :)
Mischien kan tweakers eens van C++/CLI een mooie tech review schrijven als VS.NET 2005 final uit is?

Acties:
  • 0 Henk 'm!

  • BovenHond
  • Registratie: Februari 2002
  • Laatst online: 12-09 23:50
Een paar keer tegen gekomen:
Visual Basic:
1
2
3
4
5
If voorwaarde = true then
  <intVariabele> = 5
else
  <intVariabele> = 5
end if

weinig uitleg voor nodig dat deze voorwaardelijke conditie overbodig is. Maar toch betrap ik mezelf ook regelmatig op dit soort prutswerk. Om de simpele reden dat je tijdens het ontwerpen die voorwaardelijke conditie wel nodig hebt gehad en uiteindelijk, bij het debuggen er achter bent gekomen dat je toch géén voorwaarde nodig hebt gehad.

maar nu mijn punt
Zou het topic niet beter worden als we direct bij de code schrijven wat er beter / anders aan zou kunnen. Dan kunnen beginners (waaronder mijzelf) meteen zien hoe het hoort en wat "done" is en wat "not done" is.

concreet: slechter prog voorbeelden en de oplossing / verbetering

[ Voor 4% gewijzigd door BovenHond op 17-08-2005 21:56 ]


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Ooit een keer tegengekomen:

code:
1
2
3
4
if (i != 0 || i != 1)
{
    //Deze compoundstatement zal dus altijd uitgevoerd worden
}


-_-"

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13-09 09:39

Janoz

Moderator Devschuur®

!litemod

@Bovenhond:
Ik kan me eigenlijk heel moeilijk voorstellen hoe iemand er bij het debuggen pas achter komt dat een bepaalde voorwaarde de program flow niet beinvloed.

@prototype:
Een duidelijk deMorgan foutje :D

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


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Janoz schreef op donderdag 18 augustus 2005 @ 09:35:
@Bovenhond:
Ik kan me eigenlijk heel moeilijk voorstellen hoe iemand er bij het debuggen pas achter komt dat een bepaalde voorwaarde de program flow niet beinvloed.

@prototype:
Een duidelijk deMorgan foutje :D
Yeah, het herschrijven van die expressie volgens deMorgan had explicieter boekdelen moeten spreken. Helaas heeft niet iedereen logica gehad :(

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Heeft iemand hier de source van osCommerce wel eens bekeken? Sorry, maar wat een bagger code. Ze defineren bijvoorbeeld ergens eerst een functie, dan outputten ze een stukje HTML (sowieso dus al logica gemixt met presentatie code), dan worden enkele variabelen gevuld en wordt de functie aangeroepen, maar worden de zojuist aangemaakte variabelen niet als parameter meegeven, maar staan er gewoon netjes enkele global declaraties in het begin van de functie.

Ook hebben ze classes gemaakt voor het construeren van een box op een pagina. Helemaal niet verkeerd dus, behalve dat het aanroepen wordt op de volgende manier:
PHP:
1
new infoBox($content, $title);

Blijkt dus dat ze gewoon de HTML outputten in de constructor, erg slecht imo.

Noushka's Magnificent Dream | Unity


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Michali schreef op donderdag 01 september 2005 @ 15:21:
Blijkt dus dat ze gewoon de HTML outputten in de constructor, erg slecht imo.
opzich is daar niks mis mee, als dat het enige doel van die class is

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 09-09 13:57

pjvandesande

GC.Collect(head);

Erkens schreef op donderdag 01 september 2005 @ 15:32:
[...]

opzich is daar niks mis mee, als dat het enige doel van die class is
Dan is een static method beter imho.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Erkens schreef op donderdag 01 september 2005 @ 15:32:
[...]

opzich is daar niks mis mee, als dat het enige doel van die class is
Je verwacht gewoon een dat een object wordt geconstrueerd, zonder side-effects als HTML output imo. Ik zou altijd voor een expliciete method gaan die de output verzorgt. Desnoods roep je het dan zo aan:
PHP:
1
new InfoBox($title, $content)->render();

Noushka's Magnificent Dream | Unity


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

questa schreef op donderdag 01 september 2005 @ 15:34:
[...]


Dan is een static method beter imho.
nee want dan mis je de voordelen van het gebruik van een object ;)
Michali schreef op donderdag 01 september 2005 @ 15:36:
[...]

Je verwacht gewoon een dat een object wordt geconstrueerd, zonder side-effects als HTML output imo. Ik zou altijd voor een expliciete method gaan die de output verzorgt. Desnoods roep je het dan zo aan:
PHP:
1
new InfoBox($title, $content)->render();
true, ik denk dat ik het ook op een dergelijke manier zou hebben gedaan, maar het ligt een beetje aan. Want opzich is er weinig mis mee met een constructor die ook nog iets anders doet bij het creeren van het object, mits dit niet verplicht is (bijvoorbeeld met de argumenten die je mee geeft)

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 09-09 13:57

pjvandesande

GC.Collect(head);

Erkens schreef op donderdag 01 september 2005 @ 15:42:
[...]

nee want dan mis je de voordelen van het gebruik van een object ;)
Als je het object nodig hebt... dan vind ik dat je gebruik moet maken van een method als Render oid.

Als alleen de ctor maar nodig is om HTML uit te spugen heb je het object niet nodig dus kan het static.

[ Voor 16% gewijzigd door pjvandesande op 01-09-2005 15:44 ]


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

questa schreef op donderdag 01 september 2005 @ 15:44:
[...]


Als je het object nodig hebt... dan vind ik dat je gebruik moet maken van een method als Render oid.

Als alleen de ctor maar nodig is om HTML uit te spugen heb je het object niet nodig dus kan het static.
Het ligt natuurlijk ook aan de naamgeving van de class, stel het beestje heet iets als HTMLOutputRenderer ofzo, dan is het al duidelijk wat het ding gaat doen. Enne met static heb je nogal wat beperkingen.

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 09-09 13:57

pjvandesande

GC.Collect(head);

Erkens schreef op donderdag 01 september 2005 @ 15:48:
[...]

Het ligt natuurlijk ook aan de naamgeving van de class, stel het beestje heet iets als HTMLOutputRenderer ofzo, dan is het al duidelijk wat het ding gaat doen. Enne met static heb je nogal wat beperkingen.
Inderdaad, het zou dan een anderen naamgeving moeten hebben. Maar een ctor die alleen HTML uitspuugd vind ik wel heel ransig. Zeker als het object alleen daarvoor gebruikt word en verder niet, dan blijft imho static de beste keuze.

  • TXC
  • Registratie: Oktober 2002
  • Laatst online: 01-07 08:56

TXC

OkkE schreef op woensdag 17 augustus 2005 @ 10:06:
Ik kwam pas nog een website tegen waar een contact formulier in stond, met een hidden form-field met het adres waar de email naartoe gestuurd werd. Ik even een eigen form gemaakt, met mijn eigen adres in het 'naar'-veld, en ja hoor: email kwam netjes bij mij aan. Lijkt me toch ook iets dat je eigenlijk zou willen beveiligen. :)
Op zich niets mis mee want wat heb je eraan het from of to adres te veranderen? Je eigen e-mail naar jezelf sturen is niet echt nuttig en kan ook wel via outlook.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Klant:
AAAARGH! We zijn gehacked! En da's al de zoveelste keer! En we draaien nog wel een firewall en virusscanner bla bla bla... Hoe komt dat? :(
Ikke:
Ik heb geen idee, maar ik zal eens even kijken...
* RobIII checked wat stuff.... Ontdekt een firewall die uit staat, een gratis (meuk) virusscanner en een IIS+PHP+MySQL configuratie die completely default is. Vervolgens kijk ik in een PHP bestand, en daar zie ik dit staan:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
    include "c:\internet\databasesettings.php";
    $connection = mysql_connect($DB_SERVER, $DB_USER, $DB_PASSWORD) or die("Kan gaan verbinding met de server maken.");
    mysql_select_db($DB_NAME, $connection);

    $barcode2 = strtolower(ltrim(rtrim($barcode)));
    $barcode2 = ereg_replace("\.","",$barcode2);
    $barcode = strtolower($barcode);
    $query = "SELECT * FROM XXXX WHERE LCASE(barcode) LIKE \"%$barcode\" OR LCASE(barcode) LIKE \"%$barcode2\"";
    $result = mysql_query($query, $connection);
?>

Nu ben ik zelf nogal een ASP-er en niet zo'n PHP-er, maar zie ik hier geen mega-sql-injection mogelijkheden? Of mis ik iets?

(Los van het feit dat ik alle bovenstaande "stommiteiten" in 2 minuten tijd ontdekte en ik niet verder durf te kijken wat ik nog meer tegen kom... :'( )

[ Voor 12% gewijzigd door RobIII op 01-09-2005 15:58 ]

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

Je eigen tweaker.me redirect

Over mij


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13-09 09:39

Janoz

Moderator Devschuur®

!litemod

TXC schreef op donderdag 01 september 2005 @ 15:52:
[...]


Op zich niets mis mee want wat heb je eraan het from of to adres te veranderen? Je eigen e-mail naar jezelf sturen is niet echt nuttig en kan ook wel via outlook.
Iets ruimer denken. Zo'n lek is ideaal om bergen spam te versturen naar willekeurige personen.

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


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:19
questa schreef op donderdag 01 september 2005 @ 15:44:
[...]


Als je het object nodig hebt... dan vind ik dat je gebruik moet maken van een method als Render oid.

Als alleen de ctor maar nodig is om HTML uit te spugen heb je het object niet nodig dus kan het static.
Mja, als je dat static maakt, dan kan je ook geen gebruik gaan maken van de polymorfische mogelijkheden die een OO taal je biedt.

https://fgheysels.github.io/


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
RobIII schreef op donderdag 01 september 2005 @ 15:55:
Nu ben ik zelf nogal een ASP-er en niet zo'n PHP-er, maar zie ik hier geen mega-sql-injection mogelijkheden? Of mis ik iets?
Alleen als register globals aan staat, wat waarschijnlijk het geval is als alles default is (in nieuwere versies is dit niet zo, maar ik verwacht niet dat ze die hebben draaien).

Noushka's Magnificent Dream | Unity


  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Michali schreef op donderdag 01 september 2005 @ 15:21:
Ook hebben ze classes gemaakt voor het construeren van een box op een pagina. Helemaal niet verkeerd dus, behalve dat het aanroepen wordt op de volgende manier:
PHP:
1
new infoBox($content, $title);

Blijkt dus dat ze gewoon de HTML outputten in de constructor, erg slecht imo.
Dit lijkt mij op de constructie in JSP:
code:
1
<%= new Bla()%>

Waarbij een anoniem object geïnstantieerd wordt en direct (impliciet) diens .toString() wordt aangeroepen. Daar is volgens mij niks mis mee als je die klasse gebruikt als een shortcut voor bepaalde opmaak die ook nog eens afhankelijk is van bepaalde state-informatie van de rest van het pakket.

[ Voor 16% gewijzigd door Remus op 01-09-2005 16:01 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Erkens schreef op donderdag 01 september 2005 @ 15:42:
[...]

nee want dan mis je de voordelen van het gebruik van een object ;)
Een constructor is voor initialisatie (hence de naam "constructor"), html output is geen initialisatie. Daarnaast, de gebruiker heeft duidelijk niets aan dit 'voordeel' (hij wordt immers niet geassigned aan een variabele dus je kunt er verder niets meer mee). Als de functie die de html uit moet spugen een object nodig heeft dan maakt ie er intern maar een, dit is niet iets om de gebruiker mee lastig te vallen.

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.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Michali schreef op donderdag 01 september 2005 @ 15:58:
[...]

Alleen als register globals aan staat, wat waarschijnlijk het geval is als alles default is (in nieuwere versies is dit niet zo, maar ik verwacht niet dat ze die hebben draaien).
PHP 4.4.0
offtopic:
Waar vind ik dat register globals? In C:\Windows\PHP.ini? Want daar staat in: register_globals = Off
Is het dan "SQL-injection-proof" :? Ik ga even ditte lezen :P

Ook een leuke: DB Admin naam en pass zijn gelijk. En nog leuker: Beide zijn gewoon de bedrijfsnaam... :X |:( |:( Dat is vast moeilijk voor zo'n "hacker" om dan binnen te komen ja... :X
Wat een @*!%(&%!@ lopen er toch rond....

Edit: ik heb het even gelezen, maar hoe beschermt register_globals dan tegen SQL injection :?

[ Voor 35% gewijzigd door RobIII op 01-09-2005 16:06 ]

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

Je eigen tweaker.me redirect

Over mij


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
RobIII schreef op donderdag 01 september 2005 @ 16:00:
[...]

PHP 4.4.0
offtopic:
Waar vind ik dat register globals? In C:\Windows\PHP.ini? Want daar staat in: register_globals = Off
Is het dan "SQL-injection-proof" :?
Als de variabel van een veilige locatie komt natuurlijk niet. Maar dat zal wel niet het geval zijn. Dit bestand wordt zeker geinclude door een ander bestand. Het staat idd in je php.ini. Hier wat meer info: http://nl3.php.net/register_globals

Noushka's Magnificent Dream | Unity


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Michali schreef op donderdag 01 september 2005 @ 16:05:
[...]

Als de variabel van een veilige locatie komt natuurlijk niet. Maar dat zal wel niet het geval zijn. Dit bestand wordt zeker geinclude door een ander bestand. Het staat idd in je php.ini. Hier wat meer info: http://nl3.php.net/register_globals
Zie mijn edit. Ik had het al gevonden en gelezen, maar ik zie niet hoe register_globals beschermt tegen SQL injection (in het geval van voorgaande code). De code zoekt in de DB naar een (zoals je kunt zien) barcode. De "input" komt van een ge-POST form van de *kuch* site... Maar nogmaals: Ik ben niet zo'n PHP-er, ASP is meer mijn koekje :P
(En dit is misschien niet helemaal het juiste topic ervoor :P )

[ Voor 27% gewijzigd door RobIII op 01-09-2005 16:10 ]

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

Je eigen tweaker.me redirect

Over mij


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Remus schreef op donderdag 01 september 2005 @ 15:59:
[...]


Dit lijkt mij op de constructie in JSP:
code:
1
<%= new Bla()%>

Waarbij een anoniem object geïnstantieerd wordt en direct (impliciet) diens .toString() wordt aangeroepen. Daar is volgens mij niks mis mee als je die klasse gebruikt als een shortcut voor bepaalde opmaak die ook nog eens afhankelijk is van bepaalde state-informatie van de rest van het pakket.
Daar is ook weinig mis mee, want het is direct duidelijk dat er iets ge-output wordt. In het geval waar ik het over had stond die statement gewoon alleen zo, op 1 regel.

Noushka's Magnificent Dream | Unity


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
RobIII schreef op donderdag 01 september 2005 @ 16:07:
[...]

Zie mijn edit. Ik had het al gevonden en gelezen, maar ik zie niet hoe register_globals beschermt tegen SQL injection (in het geval van voorgaande code).
Ik neem aan dat die code in een apart bestand staat. In het geval dat register globals aan zou staan, zou je dit bestand zo kunnen aanroepen: "bestand.php?barcode={SQLInjectieCode}". Puur omdat barcode direct beschikbaar is als variabel in bestand.php. Als register globals uit zou staan echter, dan heb je nog kans dat het allemaal goed kan gaan. Stel dat $barcode eerst uitgebreid getest wordt in het bestand dat bestand.php include, dan is er niets aan de hand. Als er geen controle of escape is, en $barcode wordt gevuld met een input waarde, dan heb je dus wel weer mogelijkheid tot SQL injectie.

Noushka's Magnificent Dream | Unity


  • kim72
  • Registratie: Oktober 2001
  • Laatst online: 28-03 14:55
Op mijn werk kunnen ze er ook wat van, OO voorbeeldje deze keer:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
public abstract class AbstractA {
  public void doIets() {
    if (this instanceof B) {
      // do B specific stuff here
    } else {
      // do normal stuff here
    }
  }
}

public class B extends AbstractA {
}

en het moet natuurlijk zijn:
Java:
1
2
3
4
5
6
7
8
9
10
11
public abstract class AbstractA {
  public void doIets() {
    // do normal stuff here
  }
}

public class B extends AbstractA {
  public void doIets() {
    // do B specific stuff here
  }
}

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Michali schreef op donderdag 01 september 2005 @ 16:10:
[...]

Ik neem aan dat die code in een apart bestand staat. In het geval dat register globals aan zou staan, zou je dit bestand zo kunnen aanroepen: "bestand.php?barcode={SQLInjectieCode}". Puur omdat barcode direct beschikbaar is als variabel in bestand.php. Als register globals uit zou staan echter, dan heb je nog kans dat het allemaal goed kan gaan. Stel dat $barcode eerst uitgebreid getest wordt in het bestand dat bestand.php include, dan is er niets aan de hand. Als er geen controle of escape is, en $barcode wordt gevuld met een input waarde, dan heb je dus wel weer mogelijkheid tot SQL injectie.
Het form waar de website bezoeker de barcode invult word gewoon direct gepost. Niks geen controles, het hobbelt zo meteen die query in. Net wat ik dacht dus... Nog een WTF (op een toch al f*cked-up server) dus. En maar janken dat ze steeds "gehacked" worden...

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

Je eigen tweaker.me redirect

Over mij


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
RobIII schreef op donderdag 01 september 2005 @ 16:21:
[...]

Het form waar de website bezoeker de barcode invult word gewoon direct gepost. Niks geen controles, het hobbelt zo meteen die query in. Net wat ik dacht dus... Nog een WTF (op een toch al f*cked-up server) dus. En maar janken dat ze steeds "gehacked" worden...
Gewoon eerlijk uitleggen wat er aan de hand is dus :P

Noushka's Magnificent Dream | Unity


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06 16:43

Varienaja

Wie dit leest is gek.

tomatoman schreef op woensdag 17 augustus 2005 @ 11:02:
...
Kortom: een huisnummer moet je in een string opslaan.
Huisnummer is numeriek (NEN 5825) 0...99999
Huisletter is alfanumeriek a..z
Huisnummertoevoeging (Die letters of tekens die noodzakelijk zijn om naast huisnummer en -letter
de brievenbus te vinden.) alfanumeriek dus
Aanduiding bij huisnummer: by of to
En tenslotte is er een lokatieomschrijving (Een al dan niet aanvullende omschrijving van de ligging van een object,indien deze niet of onvoldoende kan worden aangegeven door middel van de adresgegevens.)

Je kunt allerlei methodes gebruiken natuurlijk, maar deze methode wordt gehanteerd bij de overheid.

Siditamentis astuentis pactum.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Michali schreef op donderdag 01 september 2005 @ 16:30:
[...]

Gewoon eerlijk uitleggen wat er aan de hand is dus :P
pffff, uitleggen aan zo'n leken is niet leuk... ik fix0r het wel gewoon allemaal.... en dan de rekening er achter aan >:)

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

Je eigen tweaker.me redirect

Over mij


Verwijderd

Michali schreef op donderdag 01 september 2005 @ 16:10:
[...]

Ik neem aan dat die code in een apart bestand staat. In het geval dat register globals aan zou staan, zou je dit bestand zo kunnen aanroepen: "bestand.php?barcode={SQLInjectieCode}". Puur omdat barcode direct beschikbaar is als variabel in bestand.php. Als register globals uit zou staan echter, dan heb je nog kans dat het allemaal goed kan gaan. Stel dat $barcode eerst uitgebreid getest wordt in het bestand dat bestand.php include, dan is er niets aan de hand. Als er geen controle of escape is, en $barcode wordt gevuld met een input waarde, dan heb je dus wel weer mogelijkheid tot SQL injectie.
Hoe voorkom je het dan?

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
mysql_real_escape_string
:Y)

Zie deze pagina ook voor wat meer info.

[ Voor 21% gewijzigd door Michali op 01-09-2005 16:44 ]

Noushka's Magnificent Dream | Unity


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Register globals moet gewoon altijd op OFF en input van gebruiker moet altijd door een aantal checks, of door iets als mysql_real_excape_string() oid. :)
Varienaja schreef op donderdag 01 september 2005 @ 16:36:
[...]
Huisnummer is numeriek (NEN 5825) 0...99999
Huisletter is alfanumeriek a..z
Huisnummertoevoeging (Die letters of tekens die noodzakelijk zijn om naast huisnummer en -letter
de brievenbus te vinden.) alfanumeriek dus
Aanduiding bij huisnummer: by of to
En tenslotte is er een lokatieomschrijving (Een al dan niet aanvullende omschrijving van de ligging van een object,indien deze niet of onvoldoende kan worden aangegeven door middel van de adresgegevens.)

Je kunt allerlei methodes gebruiken natuurlijk, maar deze methode wordt gehanteerd bij de overheid.
Maar om daar allemaal apparate veldjes voor te maken gaat imo ook weer een beetje ver (tenzij het dus over een gemeente/overheid/kadaster DB gaat :+ ). :P Gewoon een stringetje straat en een stringetje huisnummer met meuk. Je gaat toch niet rekenen met huisnummers.

[ Voor 4% gewijzigd door Voutloos op 01-09-2005 16:45 ]

{signature}


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Michali schreef op donderdag 01 september 2005 @ 16:10:
[...]

Ik neem aan dat die code in een apart bestand staat. In het geval dat register globals aan zou staan, zou je dit bestand zo kunnen aanroepen: "bestand.php?barcode={SQLInjectieCode}". Puur omdat barcode direct beschikbaar is als variabel in bestand.php. Als register globals uit zou staan echter, dan heb je nog kans dat het allemaal goed kan gaan. Stel dat $barcode eerst uitgebreid getest wordt in het bestand dat bestand.php include, dan is er niets aan de hand. Als er geen controle of escape is, en $barcode wordt gevuld met een input waarde, dan heb je dus wel weer mogelijkheid tot SQL injectie.
Het sleutelwoord is hier natuurlijk magic_quotes, niet register_globals. Want of hij nou direct in een variabele wordt opgeslagen of hij pleurt een $_GET["barcode"] in een query, dat maakt geen zak uit. Als magic_quotes uitstaat (wat ik persoonlijk wel prefereer overigens, wie zegt dat ik de inhoud in een db wil gooien? Ik convert 'm dus zelf wel als dat nodig is) kun je SQL injecten, anders niet echt.

Die globals kunnen uiteraard ook in fouten resulteren, maar alleen als het script kijkt of een niet van buitenaf komende variabele al gezet is of niet en daar z'n logic op baseert. Als jij bijvoorbeeld een $login_name hebt die alleen door een stukje login code alleen gezet is als je ingelogd bent, dan kun je natuurlijk met een bla.php?login_name=randomuser het script voor de gek houden.

[ Voor 3% gewijzigd door .oisyn op 01-09-2005 16:47 ]

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

Bedankt!

Ik was benieuwd of macromedia icm PHAkt wel goede code creeerde of dat ik alles nog moest nalopen. Maar het lijkt goed te gaan.


code:
1
2
3
4
5
6
7
8
9
// begin Recordset
$table__recursive2 = 'TABLE_1';
if (isset($HTTP_GET_VARS['google'])) {
  $table__recursive2 = $HTTP_GET_VARS['google'];
}
$query_recursive2 = sprintf("SELECT * FROM x_tables WHERE TABLE_NAME='%s'", $table__recursive2);
$recursive2 = $test->SelectLimit($query_recursive2) or die($test->ErrorMsg());
$totalRows_recursive2 = $recursive2->RecordCount();
// end Recordset

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Die code lijkt duidelijk gevoelig voor SQL injection. Als parameter google gevult wordt met gevaarlijke SQL code, dan heb je dus een probleem.

Noushka's Magnificent Dream | Unity


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
.oisyn schreef op donderdag 01 september 2005 @ 16:46:
[...]


Het sleutelwoord is hier natuurlijk magic_quotes, niet register_globals. Want of hij nou direct in een variabele wordt opgeslagen of hij pleurt een $_GET["barcode"] in een query, dat maakt geen zak uit. Als magic_quotes uitstaat (wat ik persoonlijk wel prefereer overigens, wie zegt dat ik de inhoud in een db wil gooien? Ik convert 'm dus zelf wel als dat nodig is) kun je SQL injecten, anders niet echt.

Die globals kunnen uiteraard ook in fouten resulteren, maar alleen als het script kijkt of een niet van buitenaf komende variabele al gezet is of niet en daar z'n logic op baseert. Als jij bijvoorbeeld een $login_name hebt die alleen door een stukje login code alleen gezet is als je ingelogd bent, dan kun je natuurlijk met een bla.php?login_name=randomuser het script voor de gek houden.
Natuurlijk, maar het ging er even om of er uberhaubt een mogelijkheid was dat er SQL injection kon plaats vinden. Als $barcode direct een waarde krijgt uit $_REQUEST ed., dan heb je dus altijd die mogelijkheid. Toen ik het stukje schreef wist ik namelijk nog niet waar $barcode vandaan kwam, en als register globals uit staat, dan zou er niets aan de hand hoeven zijn (kwa veiligheids probleem dan, kwa ranzige code wel natuurlijk ;)).

Noushka's Magnificent Dream | Unity


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Mijn punt is dat er in de code vanuit wordt gegaan dat $barcode bestaat. Dan komt hij dus óf uit een request, óf wordt hij vanuit een script gezet. In het eerste geval bestaat er een injection gevaar, maar ook zonder globals zou dat bestaan aangezien je dan idd $_REQUEST zou gebruiken. In het tweede geval bestaat er sowieso geen gevaar, omdat de requestvariabelen gezet worden voordat je script gerund wordt, en de $barcode variabele weer overschreven wordt. Ergo, register_globals maakt in dit geval geen enkele reet uit ;)

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.


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
.oisyn schreef op donderdag 01 september 2005 @ 17:15:
Mijn punt is dat er in de code vanuit wordt gegaan dat $barcode bestaat. Dan komt hij dus óf uit een request, óf wordt hij vanuit een script gezet. In het eerste geval bestaat er een injection gevaar, maar ook zonder globals zou dat bestaan aangezien je dan idd $_REQUEST zou gebruiken. In het tweede geval bestaat er sowieso geen gevaar, omdat de requestvariabelen gezet worden voordat je script gerund wordt, en de $barcode variabele weer overschreven wordt. Ergo, register_globals maakt in dit geval geen enkele reet uit ;)
Maar als register globals aan zou staan en het bestand met het stukje code (waarvan ik aanneem dat het in een apart bestand staat) direct aangeroepen wordt (met bijvoorbeeld script.php?barcode={SQL}), dan wordt $barcode dus niet overschreven en is direct geinitialiseerd beschikbaar met die gevaarlijke SQL code er in. Dan maakt dus weldegelijk uit of register globals aan staat. Als register globals uit zou staan, heeft het direct aanroepen van het bestandje geen zin, omdat het onmogelijk is om $barcode gevuld te krijgen. Dat bedoelde ik. Uiteraard, als een ander bestand $barcode vult met $_REQUEST['barcode'], en dan zonder escape direct die andere code include, dan heb je wel een probleem (behalve als magic quotes aan staan dus ;))

Noushka's Magnificent Dream | Unity


Verwijderd

Michali schreef op donderdag 01 september 2005 @ 17:06:
Die code lijkt duidelijk gevoelig voor SQL injection. Als parameter google gevult wordt met gevaarlijke SQL code, dan heb je dus een probleem.
Daar was ik dus al bang voor. Maar daarom is dit Topic dus zo interessant, van "domme fouten" van een ander kun je veel van leren. Nu kan ik tenminste verder met het ontwikkelen van mijn site en proberen hem hackproof te maken.

Nu nog ergens 120 vrije uren zien te vinden. ;( ;(

Acties:
  • 0 Henk 'm!

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08 14:36
Dit kwam ik vandaag tegen:

Visual Basic:
1
IIf(LenB(someString), someString, vbNullString)

en
JavaScript:
1
if (someString.length != '')


En het gebruik van LenB() en .length was waarschijnlijk i.v.m. snelheid :z

| Toen / Nu


Acties:
  • 0 Henk 'm!

  • klinz
  • Registratie: Maart 2002
  • Laatst online: 24-08 19:19

klinz

weet van NIETS

Verwijderd schreef op dinsdag 16 augustus 2005 @ 09:54:
Alleen in het geval dat je toch een bug moet fixen in de code of echt groot (radicaal) onderhoud moet plegen, kun je overwegen een WTF weg te halen, maar dan moet je wel eerst met de grootste voorzichtigheid en diplomatie je WTF'ende collega benaderen.
En als de teerbeminde collega inmiddels vertrokken is?

Acties:
  • 0 Henk 'm!

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 16:56

Tomatoman

Fulltime prutser

klinz schreef op woensdag 07 september 2005 @ 18:03:
[...]
En als de teerbeminde collega inmiddels vertrokken is?
Dan pas je met de grootste omzichtigheid alsnog de code aan en documenteer je dat uitvoerig.
code:
1
2
3
4
5
// ---------------------------------------------------------------------------
// Tomatoman @ 7-9-2005:
// Hier stond een enorme WTF van onze teerbeminde ex-collega Piet de Prutser.
// Nu hij eindelijk is vertrokken heb ik er wat leesbaars van gemaakt.
// ---------------------------------------------------------------------------

Een goede grap mag vrienden kosten.

Pagina: 1 ... 7 ... 11 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.