Echt, als het zo eenvoudig was had ik het gedaanquote:
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 | <?php define('TIMEDHASH_MAX_TIME_SECONDS', 1); define('TIMEDHASH_ALGORITHM', 'sha256'); function get_timedhash($str) { $start_time = microtime(true); $end_time = $start_time+TIMEDHASH_MAX_TIME_SECONDS; $a= 0; $new_str = $str; while(microtime(true) < $end_time) { $new_str = hash(TIMEDHASH_ALGORITHM, $new_str.$a); $a++; } return $new_str; } function match_timedhash($hash,$str) { $max_time_seconds = TIMEDHASH_MAX_TIME_SECONDS*1.5; $start_time = microtime(true); $end_time = $start_time+$max_time_seconds; $a= 0; $new_str = $str; while(microtime(true) < $end_time) { $new_str = hash(TIMEDHASH_ALGORITHM, $new_str.$a); if ($new_str == $hash) return true; $a++; } return false; } echo $hash = get_timedhash('test'); echo ' '; var_dump(match_timedhash($hash, 'test')); die(); ?> |
Nou dan heb je de juiste variabelen nodig lijkt mij als ik het zo 1-2-3 lees.quote:Op woensdag 14 december 2011 20:29 schreef Faux. het volgende:
Hoe kan ik met PHP bij een pagina komen die beveiligd is met HTTP 401?
Nee. Ik probeer nu een cURL-oplossing die ik ergens op internet gevonden heb. Even testenquote:Op woensdag 14 december 2011 20:54 schreef cablegunmaster het volgende:
[..]
Nou dan heb je de juiste variabelen nodig lijkt mij als ik het zo 1-2-3 lees.
Is de pagina van jezelf?
En anders kan het ook door een header mee te sturen, zie: http://www.electrictoolbo(...)g-username-password/quote:Op woensdag 14 december 2011 20:58 schreef Faux. het volgende:
[..]
Nee. Ik probeer nu een cURL-oplossing die ik ergens op internet gevonden heb. Even testen
Dank je voor je bijdrage, maar de cURL-oplossing werktequote:Op woensdag 14 december 2011 21:27 schreef The_Terminator het volgende:
[..]
En anders kan het ook door een header mee te sturen, zie: http://www.electrictoolbo(...)g-username-password/
Waarom gebruik je niet gewoon http://php.net/manual/en/function.crypt.php ? SHA-512 encryptie? In combinatie met afdwingen van lange wachtwoorden die sterk moeten zijn (meer dan acht symbolen lang en moet volgende bezitten: hoofdletters, kleine letters, cijfers en mogelijk symbolen) dan heb je redelijke garantie dat wanneer ze het wachtwoord hebben ze deze de eerste tijd niet zullen kraken.quote:Op woensdag 14 december 2011 01:30 schreef wipes66 het volgende:
Ik zocht een goede manier om wachtwoorden op te slaan. Van vinden jullie van deze methode? Hashen gebaseerd op tijd... md5 doet het 0,3 miljoen keer bij mij
[ code verwijderd ]
En zorg voor een goede, lange salt zodat je ook geen last hebt van rainbow table attacks. Want een wachtwoord als "Secret1234!" voldoet aan je eisen maar staat vast wel in wat rainbow tabellen.quote:Op donderdag 15 december 2011 08:20 schreef Pakspul het volgende:
[..]
Waarom gebruik je niet gewoon http://php.net/manual/en/function.crypt.php ? SHA-512 encryptie? In combinatie met afdwingen van lange wachtwoorden die sterk moeten zijn (meer dan acht symbolen lang en moet volgende bezitten: hoofdletters, kleine letters, cijfers en mogelijk symbolen) dan heb je redelijke garantie dat wanneer ze het wachtwoord hebben ze deze de eerste tijd niet zullen kraken.
Altijd met salts gaan werken.quote:Op woensdag 14 december 2011 01:30 schreef wipes66 het volgende:
Ik zocht een goede manier om wachtwoorden op te slaan. Van vinden jullie van deze methode? Hashen gebaseerd op tijd... md5 doet het 0,3 miljoen keer bij mij
[ code verwijderd ]
Dit werkt met wat aanpassingen perfect:quote:Op dinsdag 13 december 2011 21:37 schreef Pakspul het volgende:
[ code verwijderd ]
ZoietsHaalt alle product informatie op en geeft als extratje nog mee het aantal keren dat product is verkocht (voorkomt in order_content)
Je moet zelf evens in de WHERE de AND product.active = ja NOT NULL, weet niet precies hoe je het hebt.
1 2 3 4 5 6 | SELECT produkten.*, count(order_content.product_id) as productcount FROM produkten, order_content WHERE produkten.product_id = order_content.product_id AND produkten.product_menu IS NOT NULL AND produkten.product_menu<>0 GROUP BY produkten.product_id ORDER BY productcount DESC LIMIT 0, 10 |
1 2 | WHERE orders between order_date ('2010/01/01', 'yyyy/mm/dd') AND order_date ('2010/12/31', 'yyyy/mm/dd'); |
1 2 3 4 5 6 7 8 | SELECT produkten.*, count(order_content.product_id) as productcount FROM produkten, order_content WHERE produkten.product_id = order_content.product_id AND produkten.product_menu IS NOT NULL AND orders between order_date ('2010/01/01', 'yyyy/mm/dd') AND order_date ('2010/12/31', 'yyyy/mm/dd') AND produkten.product_menu<>0 GROUP BY produkten.product_id ORDER BY productcount DESC LIMIT 0, 10 |
Ik vind het altijd vervelend als een site mij afdwingt wat ik wel en niet in mijn wachtwoord mag hebben. Met een goede salt (en de eis dat het wachtwoord niet leeg mag zijn) moet je een heel eind kunnen komen. Je kunt de salt (of een deel van de salt) ook afhankelijk maken van het id van de user.quote:Op donderdag 15 december 2011 08:20 schreef Pakspul het volgende:
[..]
Waarom gebruik je niet gewoon http://php.net/manual/en/function.crypt.php ? SHA-512 encryptie? In combinatie met afdwingen van lange wachtwoorden die sterk moeten zijn (meer dan acht symbolen lang en moet volgende bezitten: hoofdletters, kleine letters, cijfers en mogelijk symbolen) dan heb je redelijke garantie dat wanneer ze het wachtwoord hebben ze deze de eerste tijd niet zullen kraken.
Klinkt alsof je een index moet toevoegen aan de tabel. Met EXPLAIN SELECT kun je zien hoe MySQL de query wil uitvoeren (en dat geeft ook informatie over waarom het zo lang duurt).quote:Op donderdag 15 december 2011 19:54 schreef Swetsenegger het volgende:
Met wat aanpassingen lijkt het te werken, alleen duurt de query 59 seconden
Ik ga even verder knutselen. Misschien is het handiger als ik met subqueries ga werken? Dat ik eerst alle ordercontent van 2011 eruit trek en met die resultset de count query doe.
quote:Op donderdag 15 december 2011 22:08 schreef Light het volgende:
[..]
Klinkt alsof je een index moet toevoegen aan de tabel. Met EXPLAIN SELECT kun je zien hoe MySQL de query wil uitvoeren (en dat geeft ook informatie over waarom het zo lang duurt).
Ik denk dat er geen index op orders.orderdate staat. Een index daar zal helpen. En verder wat GlowMouse zegt.quote:
ANSI ken ik alleen van BBS systemen, glowmouse ;-) Ik ga er mee aan de slag en hou jullie op de hoogte.quote:Op donderdag 15 december 2011 23:15 schreef GlowMouse het volgende:
Schrijf gewoon COUNT(*), zet een index op order_content.product_id en kijk naar ansi style joins
Dat is inderdaad een goede oplossingquote:Op woensdag 14 december 2011 10:13 schreef _Flash_ het volgende:
Ik vind het maar een riskante methode. Kom je niet in de problemen als er bijvoorbeeld meerdere mensen tegelijk willen inloggen, de processorkracht verdeeld wordt over die berekeningen en ze dus allemaal de juiste diepte niet halen? Soort van oplossing is natuurlijk wel om het aantal gebruikte loopjes ook in de tabel op te slaan, dan hoef je niet met die factor anderhalf te werken ;-)
Ik zit met de aanpassingen nog steeds op een query van 57 seconden. Ik heb alleen de ANSI join nog niet gedaanquote:Op vrijdag 16 december 2011 08:34 schreef Swetsenegger het volgende:
[..]
ANSI ken ik alleen van BBS systemen, glowmouse ;-) Ik ga er mee aan de slag en hou jullie op de hoogte.
order_content.product_id had ik ondertussen een index opgezet maar dat helpt niet echt.
Dat hij een manier zoekt om iedereen aan een andere willekeurige persoon te koppelen.quote:
Oh zo. Maak gewoon een resultset op basis van alle id`s van de gebruikers, minus je eigen, en laat hem daar 1tje van kiezen?quote:Op vrijdag 16 december 2011 20:56 schreef Pizzalucht het volgende:
[..]
Dat hij een manier zoekt om iedereen aan een andere willekeurige persoon te koppelen.
Je hebt 5 personen, en iedereen is aan iemand gekoppeld, maar niet aan zichzelf.
Hoe doe je dat het beste, proberen totdat je de goede combi hebt, of is daar een soort algoritme voor.
Dat is zijn vraag.
niet pas trekken als iemand de url aanroept, of bij het een na laatste loodje zorgen dat je niet in een foute situatie komtquote:Op vrijdag 16 december 2011 21:15 schreef das_phantom het volgende:
Ter info. Ik heb iedereen de url gegeven. Iedereen trekt het lootje wanneer diegene wil. De persoon selecteert zijn eigen naam en het systeem bekijkt dan in de database wie er nog in zit, en daaruit kiest hij de naam <> eigen naam. Als er nog maar een naam inzit en die is van diegene zelf, dan gaat het fout.
Wat nou als randomizen van personen dezelfde lijst oplevert als je lijst waar je aan gaat koppelen? Dan krijgt iedereen zichzelfquote:Op vrijdag 16 december 2011 23:33 schreef ErikNijland het volgende:
Oplossing voor dat lootjes trekken.
Zet de personen in een random volgorde. Bijvoorbeeld:
edacb
En elke persoon krijgt de volgende persoon in de array:
e krijgt d
d krijgt a
a krijgt c
c krijgt b
en bij b is er geen volgende daarom krijgt hij de eerste uit de array: e
zo; en nu weekend
Iemand nog een idee?quote:Op vrijdag 16 december 2011 17:47 schreef Swetsenegger het volgende:
[..]
Ik zit met de aanpassingen nog steeds op een query van 57 seconden. Ik heb alleen de ANSI join nog niet gedaan
Het is niet zo dat hij 2 lijsten gaat koppelen. Hij heeft 1 lijst met personen a,b,c,d en e.quote:Op zaterdag 17 december 2011 11:24 schreef Pakspul het volgende:
[..]
Wat nou als randomizen van personen dezelfde lijst oplevert als je lijst waar je aan gaat koppelen? Dan krijgt iedereen zichzelf
Ik zou een functie (class liever) maken die bijhoudt welke personen meedoen, random persoon toewijst aan iemand en daarbij rekening houdt dat het niet persoon is waar die aan toe wordt gewezen.
1 2 3 4 5 6 7 | SELECT produkten.*, count(*) as productcount FROM produkten, order_content JOIN orders on (orders.order_id=order_content.order_id) WHERE produkten.product_id = order_content.product_id AND produkten.product_menu IS NOT NULL AND produkten.product_menu<>0 AND orders.wishlist=0 AND orders.activated=1 AND orders.orderdate between ('2011-01-01 0:0:0') AND ('2012-01-01 0:0:0') GROUP BY produkten.product_id ORDER BY productcount DESC LIMIT 0, 5 |
quote:Op zaterdag 17 december 2011 19:13 schreef GlowMouse het volgende:
twee join stijlen door elkaar, lelijk hoor
1 2 3 4 5 6 7 8 | SELECT produkten.*, count(*) as productcount FROM order_content JOIN orders on (orders.order_id=order_content.order_id) JOIN produkten on (produkten.product_id=order_content.product_id) WHERE produkten.product_id = order_content.product_id AND produkten.product_menu IS NOT NULL AND produkten.product_menu<>0 AND orders.wishlist=0 AND orders.activated=1 AND orders.orderdate between ('2011-01-01 0:0:0') AND ('2012-01-01 0:0:0') GROUP BY produkten.product_id ORDER BY productcount DESC LIMIT 0, 5 |
Deze query draait in 37ms, mijn eerste zonder ANSI join in 57 seconden.quote:Op zaterdag 17 december 2011 19:34 schreef GlowMouse het volgende:
Je WHERE is nog te uitgebreid. Deze query zou ook niet sneller draaien dan de eerste.
1 2 3 4 5 6 7 8 | SELECT produkten.*, count(*) as productcount FROM order_content JOIN orders on (orders.order_id=order_content.order_id) JOIN produkten on (produkten.product_id=order_content.product_id) WHERE produkten.product_menu IS NOT NULL AND produkten.product_menu<>0 AND orders.wishlist=0 AND orders.activated=1 AND orders.orderdate between ('2011-01-01 0:0:0') AND ('2012-01-01 0:0:0') GROUP BY produkten.product_id ORDER BY productcount DESC LIMIT 0, 5 |
wat bedoel je? Dat de laatste query en de eerste query net zo snel zouden moeten zijn?quote:Op zaterdag 17 december 2011 20:20 schreef GlowMouse het volgende:
De joinvolgorde zal wel gewijzigd zijn, ANSI vs. theta-style heeft geen invloed.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |