Ik was eigenlijk meer aan het kijken naar je 'Failed attempts". 60 queries per seconden vind ik niet zo heel gek veel, meer dan 1000 failed connection attempts in een uur tijd echter wel.quote:Op woensdag 30 december 2009 19:28 schreef PiRANiA het volgende:
[..]
Jij zal het niet veel vinden (als je de FOK! stats hebt gezien), maar ik vind 60 queries per seconde vrij veel
Hoe kom ik er achter waar het fout gaat?quote:Op woensdag 30 december 2009 19:29 schreef Tuvai.net het volgende:
[..]
Ik was eigenlijk meer aan het kijken naar je 'Failed attempts". 60 queries per seconden vind ik niet zo heel gek veel, meer dan 1000 failed connection attempts in een uur tijd echter wel.
Voor je bezoekersteller mag je wel trots zijn (mits redelijk aantal queries per pagina), maar je had het erover dat hij het druk had. En dat is niet zo, een moderne thuis-pc kan rustig 50-100k queries/seconde uitvoeren primary key look-ups wel.quote:Op woensdag 30 december 2009 19:28 schreef PiRANiA het volgende:
[..]
Jij zal het niet veel vinden (als je de FOK! stats hebt gezien), maar ik vind 60 queries per seconde vrij veel
tcpdumpquote:Op woensdag 30 december 2009 19:37 schreef PiRANiA het volgende:
[..]
Hoe kom ik er achter waar het fout gaat?
Het zijn allemaal lokale scripts met data uit metingen. Tcpdump werkt dan niet denk ik?quote:Op woensdag 30 december 2009 19:41 schreef GlowMouse het volgende:
[..]
Voor je bezoekersteller mag je wel trots zijn (mits redelijk aantal queries per pagina), maar je had het erover dat hij het druk had. En dat is niet zo, een moderne thuis-pc kan rustig 50-100k queries/seconde uitvoeren primary key look-ups wel.
[..]
tcpdump
Jup, chille x2200 server. Ik moet hem alleen nog ergens weghangen eigenlijk, maar colocatie is vrij duurquote:
Relatief veel data (~200MB database) op standaard configuratie...quote:Op woensdag 30 december 2009 22:54 schreef GlowMouse het volgende:
ic; heb je zo'n enorm kleine dataset of heb je MySQL nog met de default config draaien?
Ben ik wel benieuwd met welke settings je dat beter kan optimaliseren als je veel data hebt.quote:Op woensdag 30 december 2009 22:59 schreef GlowMouse het volgende:
zonde!
1 2 3 4 | $QuotaAmount = sprintf('%0.2f', $QuotaAmount); $QuotaAmount = (float)str_replace(',', '.', $QuotaAmount); ?> |
1 2 3 4 | $sReCheckQuotaAmount = sprintf('%0.2f', $sReCheckQuotaAmount); $sReCheckQuotaAmount = (float)str_replace(',', '.', $sReCheckQuotaAmount); ?> |
Omdat je daar er ook al een float van maakt. Floats zijn niet altijd precies het getal die je bedoelt.quote:Op donderdag 31 december 2009 10:28 schreef ursel het volgende:
Mja, maar de afronding gaat al verkeerd in de sprintf
aah, wacht, die sprintf maakt er ook float van.quote:Op donderdag 31 december 2009 10:32 schreef Tijn het volgende:
[..]
Omdat je daar er ook al een float van maakt. Floats zijn niet altijd precies het getal die je bedoelt.
Het handige van een float is dat je zowel extreem grote als extreem kleine getallen erin kunt opslaan. Andere types hebben harde limieten, zoals bv een int die van -2147483648 t/m 2147483647 werkt. Een float heeft dat soort grenzen niet echt, daar kun je honderd cijfers voor of achter de komma bij zetten en je krijgt nog een waarde eruit die (min of meer) lijkt op wat je bedoelde.quote:Op donderdag 31 december 2009 10:57 schreef ursel het volgende:
[..]
Gewoon even nieuwsgierig, maar wat is eigenlijk het nut van een float als je die niet precies het getal is dat je bedoeld?
Sowieso overstappen op InnoDB, beetje recente versie pakken (5.4/5.5), en dan spelen met de buffer pool, en logbuffer.quote:Op donderdag 31 december 2009 09:07 schreef ursel het volgende:
[..]
Ben ik wel benieuwd met welke settings je dat beter kan optimaliseren als je veel data hebt.
Heb je daar een mooie guide voor? Of een leidraad waar ik kan beginnen?quote:Op donderdag 31 december 2009 11:53 schreef GlowMouse het volgende:
[..]
Sowieso overstappen op InnoDB, beetje recente versie pakken (5.4/5.5), en dan spelen met de buffer pool, en logbuffer.
Oeh leuk materiaal om naar te kijken. Ik ben nu mijn grootste tabel aan het omzetten naar InnoDB:quote:
Ahja, dat werkt.quote:Op donderdag 31 december 2009 14:32 schreef GlowMouse het volgende:
Gewoon toevoegen (/etc/mysql/my.cnf) en mysql herstarten
innodb_buffer_pool_size= 1000M
Die rowcount is innodb-eigen, zie manual.
je moet een count door php laten uitvoeren dan?quote:Op donderdag 31 december 2009 15:00 schreef GlowMouse het volgende:
Bij FOK! scheelt dat wel een miljoen keer (of 10 miljoen miljard keer); de kunst is dan ook om nooit/niet vaak een count op een hele tabel te doen.
wanneer wil je nou ooit weten hoeveel rijen een tabel heeft?quote:Op donderdag 31 december 2009 15:06 schreef ursel het volgende:
[..]
je moet een count door php laten uitvoeren dan?
Best vaak hoor.quote:Op donderdag 31 december 2009 15:07 schreef GlowMouse het volgende:
[..]
wanneer wil je nou ooit weten hoeveel rijen een tabel heeft?
Ik wil weten hoe de opbouw van sommige data verloopt, dan vind ik het wel intereressant om te weten hoe veel gegevens ik al hebquote:Op donderdag 31 december 2009 15:07 schreef GlowMouse het volgende:
[..]
wanneer wil je nou ooit weten hoeveel rijen een tabel heeft?
We hadden het over een SELECT count(*) FROM tbl, niet over een andere query.quote:Op donderdag 31 december 2009 15:09 schreef Tuvai.net het volgende:
[..]
Best vaak hoor.Al dan niet met een GROUP BY.
dat is een query'tje per maand ofzo, /care.quote:Op donderdag 31 december 2009 15:09 schreef PiRANiA het volgende:
[..]
Ik wil weten hoe de opbouw van sommige data verloopt, dan vind ik het wel intereressant om te weten hoe veel gegevens ik al heb
Een hoop van onze tabellen staan gelijk aan het aantal producten en of objecten.quote:Op donderdag 31 december 2009 15:07 schreef GlowMouse het volgende:
[..]
wanneer wil je nou ooit weten hoeveel rijen een tabel heeft?
En dan staat er nooit in WHERE bij? En dit zijn ook typisch dingen die je denormaliseert.quote:Op donderdag 31 december 2009 15:13 schreef ursel het volgende:
[..]
Een hoop van onze tabellen staan gelijk aan het aantal producten en of objecten.
http://www.mysqlperforman(...)-paginated-displays/quote:Daarnaast voor het aangeven van hoeveel pagina's er zijn in de lijst navigatie.
Dus redelijk vaak eigenlijk nog wel.
Ja, doh. Toen vroeg jij hoe vaak je dat wel niet doet, waarom ik (en zo te zien andere ook) reageer dat ik dat dus wel eens nodig heb.quote:Op donderdag 31 december 2009 15:11 schreef GlowMouse het volgende:
We hadden het over een SELECT count(*) FROM tbl, niet over een andere query.
quote:Op donderdag 31 december 2009 15:14 schreef GlowMouse het volgende:
[..]
En dan staat er nooit in WHERE bij? En dit zijn ook typisch dingen die je denormaliseert.
[..]
http://www.mysqlperforman(...)-paginated-displays/
quote:Op donderdag 31 december 2009 15:17 schreef Tuvai.net het volgende:
[..]
@PiRANiA: COUNT(*) op tabellen zonder een WHERE clausule is in InnoDB nou eenmaal erg traagMyISAM snel omdat door het ontbreken van MVCC er gewoon een countertje in een tabel zit waar je in 1x het aantal rijen in een tabel kan aflezen. Zodra je iets met WHERE erbij doet, is MyISAM weer even traag als de rest.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in C:\domains\svenahrens.nl\wwwroot\syncml\syncml\sync.php on line 68 Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of xml_parse_into_struct(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in C:\domains\svenahrens.nl\wwwroot\syncml\syncml\xml.php on line 160 Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of xml_parse_into_struct(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in C:\domains\svenahrens.nl\wwwroot\syncml\syncml\xml.php on line 160 Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of datastore_search(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in C:\domains\svenahrens.nl\wwwroot\syncml\syncml\syncml.php on line 210 Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in C:\domains\svenahrens.nl\wwwroot\syncml\syncml\syncml.php on line 220 Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in C:\domains\svenahrens.nl\wwwroot\syncml\syncml\syncml.php on line 221 Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in C:\domains\svenahrens.nl\wwwroot\syncml\syncml\syncml.php on line 222 Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of datastore_search(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in C:\domains\svenahrens.nl\wwwroot\syncml\syncml\syncml.php on line 346 |
Ga ik eens kijken of die weg te halen zijn en of het dan wel werkt..quote:Op zondag 3 januari 2010 00:06 schreef GlowMouse het volgende:
xml_parse_into_struct ( resource $parser , string $data , array &$values [, array &$index ] )
dat gaat al goed, bij de functieaanroep zijn geen ampersands nodig
In de code staan de ampersands er ook niet..quote:Op zondag 3 januari 2010 00:06 schreef GlowMouse het volgende:
xml_parse_into_struct ( resource $parser , string $data , array &$values [, array &$index ] )
dat gaat al goed, bij de functieaanroep zijn geen ampersands nodig
1 2 3 4 5 6 7 | if (!xml_parse_into_struct ($xml_parser, $xml_text, &$values, &$index)) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } ?> |
bugger..quote:
1 2 3 4 5 6 7 8 9 10 | public function validateTel(&$inputValidateTel){ $this->stripSingle($inputValidateTel); if (preg_match("/[0-9]/",$inputValidateTel)){ return true; } return false; } ?> |
1 2 3 | (preg_match("/^[0-9]/",$inputValidateTel)) ?> |
Of eventueel ctype_digit?quote:Op maandag 4 januari 2010 08:51 schreef Tijn het volgende:
Waarom gebruik je niet gewoon is_numeric()?
1 2 3 4 5 6 7 | public function validateTel(&$inputValidateTel){ $this->stripSingle($inputValidateTel); ctype_digit($inputValidateTel); return; } ?> |
quote:
1 2 3 4 5 6 7 8 9 10 | public function stripSingle(&$inputStripSingle){ if($inputStripSingle !== ""){ $inputStripSingle = trim($inputStripSingle); $inputStripSingle = stripslashes($inputStripSingle); $inputStripSingle = htmlentities($inputStripSingle, ENT_QUOTES); } return; } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* * Telephone number validate function * @param string with text * @return bool * @return string with validated & stripped digits */ public function validateTel(&$inputValidateTel) { //Strip $this->stripSingle($inputValidateTel); //Strip everything but digits preg_replace('/[^0-9]/', '',$inputValidateTel); //Check if string contains only digits, if not return false if(ctype_digit($inputValidateTel)) { return true; } return false; } ?> |
quote:Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.
Alleen cijfers voor een telefoonnummer is niet handig. Het kan ook gebeuren dat iemand een internationaal telefoonnummer wil invoeren, dan heb je in ieder geval een + nodig als eerste teken. Dan maak je het met 2 velden (netnummer en abonneenummer) niet handiger.quote:Op maandag 4 januari 2010 12:40 schreef hamkaastosti het volgende:
dwing je gebruikers gewoon een correct telefoonnummer in te voeren door bijvoorbeeld een kengetal en abonneeveld te gebruiken die je zelf aan elkaar plakt of geef bij je form een voorbeeld hoe het ingevuld moet worden met evt clientside javascript validatie. je kunt met php dan simpelweg ctype_digit gebruiken voor de check.
[..]
Dit moet een validation class worden die voor meerdere omgevingen te gebruiken is. Dwz dat telefoon nummers erg kunnen verschillen omdat de programmatuur voor diverse landen gebruikt kan worden.quote:Op maandag 4 januari 2010 12:40 schreef hamkaastosti het volgende:
dwing je gebruikers gewoon een correct telefoonnummer in te voeren door bijvoorbeeld een kengetal en abonneeveld te gebruiken die je zelf aan elkaar plakt of geef bij je form een voorbeeld hoe het ingevuld moet worden met evt clientside javascript validatie. je kunt met php dan simpelweg ctype_digit gebruiken voor de check.
[..]
Waarom heb je dan een plus nodig?quote:Op maandag 4 januari 2010 13:04 schreef Light het volgende:
[..]
Alleen cijfers voor een telefoonnummer is niet handig. Het kan ook gebeuren dat iemand een internationaal telefoonnummer wil invoeren, dan heb je in ieder geval een + nodig als eerste teken. Dan maak je het met 2 velden (netnummer en abonneenummer) niet handiger.
Jij misschien, maar je gebruikers zullen het op alle mogelijke manieren proberen...quote:Op maandag 4 januari 2010 13:11 schreef Sitethief het volgende:
[..]
Dit moet een validation class worden die voor meerdere omgevingen te gebruiken is. Dwz dat telefoon nummers erg kunnen verschillen omdat de programmatuur voor diverse landen gebruikt kan worden.
[..]
Waarom heb je dan een plus nodig?
Je schrijft toch gewoon 0031384202277 en niet +31384202277
Ik denk dat meer mensen +31 invoeren dan 0031.quote:Op maandag 4 januari 2010 13:11 schreef Sitethief het volgende:
[..]
Waarom heb je dan een plus nodig?
Je schrijft toch gewoon 0031384202277 en niet +31384202277
Maar je weet niet waar iemand vandaan gaat bellen, en 00 is niet overal de code voor internationaal bellen. De + bij een telefoonnummer wordt wel algemeen herkend als "bel internationaal", waarbij de beller dan zelf kan uitzoeken wat de goede code is voor het land waar hij zich bevindt. Of dat 00, 011, 09, 9, 990 of nog iets anders is, is niet jouw probleem.quote:Op maandag 4 januari 2010 13:11 schreef Sitethief het volgende:
Waarom heb je dan een plus nodig?
Je schrijft toch gewoon 0031384202277 en niet +31384202277
Ik heb het nooit gebruiktquote:Op maandag 4 januari 2010 13:24 schreef Tijn het volgende:
[..]
Ik denk dat meer mensen +31 invoeren dan 0031.
Ik kan dus net zo goed die + in mijn database zetten.quote:Op maandag 4 januari 2010 13:27 schreef Light het volgende:
[..]
Maar je weet niet waar iemand vandaan gaat bellen, en 00 is niet overal de code voor internationaal bellen. De + bij een telefoonnummer wordt wel algemeen herkend als "bel internationaal", waarbij de beller dan zelf kan uitzoeken wat de goede code is voor het land waar hij zich bevindt. Of dat 00, 011, 09, 9, 990 of nog iets anders is, is niet jouw probleem.
1 |
1 |
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /* * Telephone number validate function * @param string with text * @return bool * @return string with validated & stripped digits */ public function validateTel(&$inputValidateTel) { //Strip $this->stripSingle($inputValidateTel); //Strip everything but digits, + and - $inputValidateTel = preg_replace('/[^0-9\+\-]/', '',$inputValidateTel); //Check if string contains only digits, + and -, if not return false return true; } ?> |
Kloptquote:Op maandag 4 januari 2010 15:15 schreef Tijn het volgende:
Ik zou de naam van de functie veranderen in "sanitize" in plaats van "validate". Als je alleen zou valideren, zou je alleen een true / false antwoord verwachten, maar in dit geval pas je de string ook echt aan.
quote:Op maandag 4 januari 2010 17:27 schreef Tegan het volgende:
Newb-vraag. Ik heb een array en een variabele, hoe kan ik checken of die variabele in de array voorkomt?
Bv.
$array = array(1, 3, 7);
$var = 1;
1 2 3 4 5 | if(in_array($var, $array)) { /* doe iets... */ } ?> |
Ik struikel er alleen vaak over dat op die website de voorbeelden altijd erg complex zijn en je dus moeilijk kunt achterhalen hoe je een function simpel kunt gebruiken. Zeker als je net begonnen bent met php. Verder worden veel dingen nogal summier uitgelegd.quote:Op maandag 4 januari 2010 17:35 schreef GlowMouse het volgende:
Die manual is trouwens wel handig, want links staan alle arrayfuncties. Om de zoveel tijd moet je die allemaal doorlopen om te kijken wat er allemaal mogelijk is.
Als je wat ervaring hebt, kun je de voorbeelden wel waarderen.quote:Op maandag 4 januari 2010 17:38 schreef Sitethief het volgende:
[..]
Ik struikel er alleen vaak over dat op die website de voorbeelden altijd erg complex zijn en je dus moeilijk kunt achterhalen hoe je een function simpel kunt gebruiken. Zeker als je net begonnen bent met php. Verder worden veel dingen nogal summier uitgelegd.
Agreed, die voorbeelden kunnen soms erg fijn zijn.quote:Op maandag 4 januari 2010 17:44 schreef GlowMouse het volgende:
[..]
Als je wat ervaring hebt, kun je de voorbeelden wel waarderen.
quote:Op dinsdag 5 januari 2010 11:22 schreef Sitethief het volgende:
Hoe kun je simpel in multidimensionale arrays zoeken?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | function array_twodimensional_search($needle, $haystack) { if(!is_array($haystack)) { return null; } foreach($haystack as $key => $array) { if(!is_array($array)) { continue; } $arrkey = array_search($needle, $array); if($arrkey !== false) { return array($key, $arrkey); } } return null; } ?> |
1 2 3 4 | $multi_array = array('test' => array(5, 3, 1), 'test2' => array(6, 4, 2), 'bla' => 5); print_r(array_twodimensional_search(5, $multi_array)); ?> |
1 2 3 4 5 | ( [0] => test [1] => 0 ) |
Ik zou zorgen dat je queries zoveel mogelijk outputten wat je hebben wil. Als je wil controleren of een password met een username matcht, kan dat prima met een SELECT en een WHERE. Dan hoef je niet later door je resultaten te gaan zitten graven, maar heb je gelijk wat je hebben wil.quote:Op dinsdag 5 januari 2010 14:32 schreef Sitethief het volgende:
Wat vinden jullie beter. Het checken van een wachtwoord bij het inloggen dmv WHERE statement in een query, of door een SELECT query te doen en dan het wachtwoord de controleren in die array.
De query methode is sneller en korter, maar levert gevaar op omdat je een query runt. De array methode is veiliger, maar langzamer en langer. Ook is het minder veilig om wachtwoorden heen en weer te sturen tussen classes waarin je de array afcheckt.
Ik zou de databaseconfig in een apart bestand zetten.quote:Op woensdag 6 januari 2010 10:48 schreef Sitethief het volgende:
http://pastebin.com/f212e15f4
Deze code werkt, maar zou het nog beter/anders kunnen en waarom? Ik ben net begonnen met leren over cookies en sessions.
Edit: de Secure class: http://pastebin.com/f327ce69e
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 | require('cfg/main.php'); require('cfg/database.php'); connect_naar_database(DB_HOST, DB_USER, DB_PASS, DB_NAME); $bla = get_iets(); $bla2 = get_iets_anders(); //---------------SCHEIDING-----------------------------------// ?> <html> <head> <title>Bla</title> </head> <body> <?php foreach($bla as $singlebla): ?> <?=$singlebla->naam?> <?php endforeach; ?> <br /> <hr /> <br /> <?php foreach($bla2 as $anotherbla): ?> <?=$anotherbla->description?> <?php endforeach; ?> </body> </html> |
Ja, heb volledige shell toegang als root dus dat is niet het probleemquote:Op donderdag 7 januari 2010 23:15 schreef Tuvai.net het volgende:
Voor herhalende / automatische handelingen, zou ik om te beginnen eens kijken naar cronjobs.En of je daar überhaupt de mogelijkheid voor hebt natuurlijk.
Ik heb ook zoiets gemaakt, daarbij zet ik de instellingen op de default waarde en geef ik een preview van het bestand na het inlezen. Als het niet goed is kan je de defaultinstellingen wijzigen en het nog een keer proberen...quote:Op donderdag 7 januari 2010 16:40 schreef Intrepidity het volgende:
Ik ben bezig met het schrijven van een kleine wrapperklasse om fgetcsv heen om makkelijk met csv bestanden om te gaan. Nou moet de fgetcsv functie o.a. weten wat het veldscheidingsteken is, of er aanhalingstekens e.d. om de waarden heenzitten en met welk karakter er ge-escaped wordt.
Is er ook een manier om dat handig zelf te analyseren? Het wordt gebruikt in een open webapplicatie waarbij helemaal niet zeker is in welke CSV-indeling mensen dingen gaan uploaden.
Inderdaad niet meer van een kwestie van je code in een cronjob zetten die om de zoveel tijd draait. Vrijwel hetzelfde als wat je in Windows doet met executables en geplande taken / scheduled tasks.quote:Op vrijdag 8 januari 2010 08:37 schreef Xcalibur het volgende:
Een cronjob maken die 1x per week of 1x per maand draait
En die dus de facturen maakt...
Met date('w') kun je achterhalen op welke dag van de week een datum valt. En met mktime() kun je een timestamp maken. Handig om te weten is dat de nulde dag van de maand eigenlijk de laatste dag van de voorgaande maand is. Met een beetje puzzelen zou het dan wel moeten lukken. Veel meer dan 10 regels code hoeft het niet te worden.quote:Op zaterdag 9 januari 2010 23:08 schreef Chandler het volgende:
Weet iemand hoe ik de laatste zaterdag van iedere maand kan achterhalen? zonder al te veel scripting te schijven?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function lastSaturday($month, $year) { // number of days in each month $days_in_month = array(1=>31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); // fix for leap year if(date('L', mktime(0,0,0,$month,1,$year)) > 0) $days_in_month[2] = 29; // go through days of the month, starting at the end for($day = $days_in_month[$month]; $day > 1; $day--) { // check if day is saturday if(date('l', mktime(0,0,0,$month,$day,$year)) == 'Saturday') { // yay *O* return $day; } } // boo ;( return false; } ?> |
Ik denk dat je date('t') bedoelt. Dat is inderdaad wel handig en maakt het stukje in mijn code waarin ik dat opzoek overbodigquote:Op zaterdag 9 januari 2010 23:50 schreef Intrepidity het volgende:
Dat truucje van de 0e dag kun je inderdaad toepassen, maar met date('n') kun je ook achterhalen hoeveel dagen er in de huidige maand zitten (=laatste dag van de maand)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | function lastSaturday($month, $year) { $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year)); // go through days of the month, starting at the end for($day = $days_in_month; $day > 1; $day--) { // check if day is saturday if(date('l', mktime(0,0,0,$month,$day,$year)) == 'Saturday') { // yay return $day; } } // boo return false; } ?> |
Hoe zou date('w') het korter maken dan wat hierboven staat?quote:Op zaterdag 9 januari 2010 23:58 schreef GlowMouse het volgende:
op basis van date('t') en date('w') moet het in veel minder regels kunnen
Omdat je op basis van het dagnummer van de laatste dag in een keer het juiste aantal dagen er vanaf kunt trekkenquote:Op zondag 10 januari 2010 00:01 schreef Tijn het volgende:
[..]
Hoe zou date('w') het korter maken dan wat hierboven staat?
Oh zo. Ja, dan zou je het met een simpel sommetje kunnen oplossen.quote:Op zondag 10 januari 2010 00:02 schreef Intrepidity het volgende:
[..]
Omdat je op basis van het dagnummer van de laatste dag in een keer het juiste aantal dagen er vanaf kunt trekkenDan heb je ook geen for-lus meer nodig.
1 2 3 4 5 6 7 | function lastSaturday($month, $year) { $daysInMonth = date('t', mktime(0,0,0,$month,1,$year)); $lastday = date('w', mktime(0,0,0,$month,$daysInMonth,$year)); return $daysInMonth - (($lastday+1)%7); } ?> |
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 | /** * @param <int> $weekday Dag van de week (0 .. 6 - Zondag .. Zaterdag) * @param <int> $month * @param <int> $year * @return <int> timestamp van de laatste ...dag van de maand */ function lastDayOfMonth($weekday, $month = null, $year = null) { if(is_null($year)) { $year = date('Y'); } if(is_null($month)) { $month = date('m') + 1; } else { $month++; } $dayOfMonth = 0; $dayOfWeek = date('w', mktime(0, 0, 0, $month, $dayOfMonth, $year)); $dayOfMonth = $weekday - $dayOfWeek; if($dayOfMonth > 0) { //Verkeerde maand $dayOfMonth -= 7; } return mktime(0, 0, 0, $month, $dayOfMonth, $year); } ?> |
Hier komt alleen niet het goede antwoord uitquote:Op zondag 10 januari 2010 00:07 schreef GlowMouse het volgende:
je krijgt dan zoiets
[ code verwijderd ]
Mooi, en netjes met params.quote:Op zondag 10 januari 2010 00:11 schreef Light het volgende:
Ik ben nog even verder gaan puzzelen en heb nu een oplossing die Chandler-proof is
[ code verwijderd ]
Werkt voor alle dagen van de week, gewoon met een parameter.
nu welquote:Op zondag 10 januari 2010 00:14 schreef Tijn het volgende:
[..]
Hier komt alleen niet het goede antwoord uit
Ieder z'n ding idd. Ik vind het zo'n verspilling van ruimte om voor iedere curly brace open weer een nieuwe regel te beginnen. De sluit-brace staat wel op z'n eigen regel (behalve bij een if als er een else volgt).quote:Op zondag 10 januari 2010 00:19 schreef Intrepidity het volgende:
Achja, ieder z'n eigen ding heIk kan er bijvoorbeeld niet tegen om de curly braces naast een klasse/functienaam te zetten
Braces staan bij mij altijd op een volgende regel
True, leesbaarheid is ook belangrijk. Maar 'k denk niet dat PHP je code zo verandert dat de berekening wordt geoptimaliseerd, dus een efficient algoritme verzinnen moet je wel zelf doen.quote:En inderdaad, alles zo compact mogelijk maken heeft nauwelijks zin meer. PHP compileert en optimaliseert zijn code netjes tegenwoordig.
Thanksquote:Op zondag 10 januari 2010 00:17 schreef Tuvai.net het volgende:
[..]
Mooi, en netjes met params. [ afbeelding ]
Eensquote:Ik prefereer leesbare, geïndente code over code die zo klein en compact mogelijk moet (tenzij het van belang is voor een merkbare performancewinst natuurlijk) zijn. Dat akelige Perl tijdperk waarin we zo absurd gelimiteerd waren zijn we inmiddels wel voorbij.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | { if( $expr2 ) { if( $expr3 ) { Klasje->Methode(); if( $expr4 ) { Klasje->EenMethode(); } else { Klasje->Meer(); Klasje->Code(); } } else { Klasje->Vaudje('omg'); } } else { Klasje->Vaudje('wtf'); } } else { Klasje->Vaudje('lol'); } |
quote:Op zaterdag 9 januari 2010 23:54 schreef Tuvai.net het volgende:
Wat gebruiken jullie eigenlijk om PDFs on the fly te genereren? Ik gebruik nu al heel lange tijd FPDF ( http://www.fpdf.org ) maar ik ben er elke keer érg lang mee bezig om dynamische documenten te maken, die gedeeltelijk uit variabele content en gedeeltelijk uit vaste content bestaan. Nou is PDF scripts maken sowieso al niet mijn meest favoriete bezigheid, maar in .NET gaat het me een stuk sneller af met de iText / iSharp of dbAutoTrack libraries.
Welke raden jullie aan?
Maar stel ik maak een factuur voor de klant aan, voeg ik dan 2 extra regels toe?quote:Op vrijdag 8 januari 2010 12:25 schreef Tuvai.net het volgende:
[..]
Inderdaad niet meer van een kwestie van je code in een cronjob zetten die om de zoveel tijd draait. Vrijwel hetzelfde als wat je in Windows doet met executables en geplande taken / scheduled tasks.
Ik zou zorgen dat je bij het aanmaken van een factuur de datum kunt opgeven waarop 'ie verzonden moet worden en dat geheel dan kunt opslaan in je database.quote:Op zondag 10 januari 2010 20:51 schreef wobbel het volgende:
[..]
Maar stel ik maak een factuur voor de klant aan, voeg ik dan 2 extra regels toe?
Veld "Periode" dus 14, 31, 365
Veld "Aantal" -1 is ongelimiteerd doorgaan, of 12 voor 12 maanden (als je voor 31 dagen hebt gekozen)
Of periode + aantal opgeven, en dan dmv een cronjob elke dag controleren of er een factuur gegenereerd moet worden. En dan als je maandelijks kiest dat hij het altijd op de 15e doet bijv.?
Tja, dat is natuurlijk een kwestie van je fantasie gebruiken, en volledig afhankelijk van je script en hetgeen je wilt doen.quote:Op zondag 10 januari 2010 20:51 schreef wobbel het volgende:
[..]
Maar stel ik maak een factuur voor de klant aan, voeg ik dan 2 extra regels toe?
Veld "Periode" dus 14, 31, 365
Veld "Aantal" -1 is ongelimiteerd doorgaan, of 12 voor 12 maanden (als je voor 31 dagen hebt gekozen)
Of periode + aantal opgeven, en dan dmv een cronjob elke dag controleren of er een factuur gegenereerd moet worden. En dan als je maandelijks kiest dat hij het altijd op de 15e doet bijv.?
Jewel, met FPDF vanwege gebrek aan beter, dus ik kan je niet verder helpenquote:Op zondag 10 januari 2010 22:01 schreef Tuvai.net het volgende:
Maare, niemand maakt hier dus dynamische PDFs in PHP?
Ook al FPDF dus.quote:Op zondag 10 januari 2010 22:16 schreef Intrepidity het volgende:
[..]
Jewel, met FPDF vanwege gebrek aan beter, dus ik kan je niet verder helpenJe kunt naar de PDF module van PHP zelf kijken (http://php.net/manual/en/book.pdf.php), maar ik zie niet 1,2,3 in hoe dat beter is als FPDF
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 | function confirm_order($ID) { $d=connectDB(); $r=runquery("SELECT * FROM orders WHERE order_id=".quote_smart($ID,$d),$d); if(mysql_num_rows($r)=='1'){ $row=mysql_fetch_array($r); if($row["order_status"]=='2'){ $echo= '<p>Je bestelling is al bevestigd, maar je krijgt nu het mailtje met de gegevens en verdere instructies nogmaals.</p>'; } else{ $r=runquery("UPDATE orders SET order_status='2' WHERE order_id=".quote_smart($ID,$d),$d); $echo= '<p>Je bestelling is bevestigd. Je krijgt nu een mailtje met de betaalgegevens en verdere instructies.</p>'; } $mail_to=$row["email_order"]; $mail_from='FROM: niet@relevant.nl'; $mail_subject='subject'; if($row["delivery_option"]=='sendoff'){ $mail_body='Beste '.$row["name_order"].', Bedankt voor het bevestigen van je bestelling. *nog wat tekst*'; } else{ $mail_body='Beste '.$row["name_order"].', Bedankt voor het bevestigen van je bestelling. *wat andere tekst dan die ander*'; } mail($mail_to,$mail_subject,$mail_body,$mail_from); return $echo; } else{ return '<p>Oeps! Je probeerde een bestelling te bevestigen die niet bestaat! Stuur even een mailtje, dan kunnen we zien wat er fout is gegaan.</p>'; } } ?> |
Als je met zoiets aan de slag gaat, kun je je dan niet beter storten op bv Zend Framework?quote:Op maandag 11 januari 2010 11:59 schreef Sitethief het volgende:
Iemand ervaring met MODx? Ik ben er nu een beetje mee aan het stoeien, maar het ziet er allemaal heel tof uit.
Opdracht van de baasquote:Op maandag 11 januari 2010 12:06 schreef Tijn het volgende:
[..]
Als je met zoiets aan de slag gaat, kun je je dan niet beter storten op bv Zend Framework?
1 2 3 4 5 6 | var_dump($aResult); if($aResult["numberOfTries"]<=3) return true; else return false; |
Iemand enig iedee hoe dat kan? :)quote:array(1) {
[0]=>
array(7) {
["id"]=>
NULL
["time"]=>
NULL
["ip"]=>
NULL
["email"]=>
NULL
["password"]=>
NULL
["success"]=>
NULL
["numberOfTries"]=>
string(1) "0"
}
}
Warning (8): LogLogintriesTable.php at 31 Undefined index: numberOfTries
1 2 3 4 5 | echo '<pre>'; var_dump($aResult); echo '</pre>'; ?> |
Kan ookquote:Op maandag 11 januari 2010 13:55 schreef Sitethief het volgende:
Wat is er mis met
[ code verwijderd ]
Dat ziet er wat leesbaarder uit vind ik altijd.
Helemaal als je ook iets van xdebug geinstalleerd hebt (op de server).quote:Op maandag 11 januari 2010 14:20 schreef hamkaastosti het volgende:
ik gebruik altijd var_dump want die geeft meer bruikbare informatie
Hier ook, verwerkt in een kleine functie dump, zodat ik niet elke keer dat moet tikken..quote:Op maandag 11 januari 2010 13:55 schreef Sitethief het volgende:
Wat is er mis met
[ code verwijderd ]
Dat ziet er wat leesbaarder uit vind ik altijd.
Nee, want als ik na of voor de mail() functie een echo doe om dat te testen, wordt dat maar een keer afgedrukt. En dan zou het altijd twee mailtjes moeten zijn, niet alleen de eerste keer dat je op de link in het mailtje klikt.quote:Op maandag 11 januari 2010 07:12 schreef Intrepidity het volgende:
Zo op het eerste gezicht lijkt die functie in orde. Ik vermoed dan ook dat die functie ergens 2 keer aangeroepen wordt..
Uhm, als de Functie 2x word aangeroepen, dan betekent dat niet dat de echo voor of na de functie 2x word aangeroepn, dus dat is geen handige manier om het te testen. Je zou dan de echo IN de functie moeten zetten.quote:Op maandag 11 januari 2010 18:42 schreef wonderer het volgende:
[..]
Nee, want als ik na of voor de mail() functie een echo doe om dat te testen, wordt dat maar een keer afgedrukt. En dan zou het altijd twee mailtjes moeten zijn, niet alleen de eerste keer dat je op de link in het mailtje klikt.
Heb je het nou over de hele functie (confirm_order()), of mail()? Waarom zou mail() binnen de functie in vredesnaam twee keer worden aangeroepen als het er maar een keer staat?quote:Op maandag 11 januari 2010 19:28 schreef ParvusM het volgende:
[..]
Uhm, als de Functie 2x word aangeroepen, dan betekent dat niet dat de echo voor of na de functie 2x word aangeroepn, dus dat is geen handige manier om het te testen. Je zou dan de echo IN de functie moeten zetten.
Met XDebug heb je ook geen <pre> nodig.quote:Op maandag 11 januari 2010 14:34 schreef Sitethief het volgende:
Ik bedoelde natuurlijk <pre>, niet print_r, wat je verder voor function of wat dan ook gebruikt was niet mijn punt.
1 2 3 4 | // 2e parameter is preserve_keys, oftewel, de keys worden hernummerd en alleen de waarden worden omgedraaid $array = array_reverse($array, false); ?> |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |