FOK!forum / Digital Corner / [PHP/(My)SQL] voor dummies #96
Pakspulwoensdag 9 november 2011 @ 13:41
php.jpg


Als je vragen hebt over PHP/MySQL, dan zit je hier goed met een vaste kliek guru's en een groot aantal regelmatige bezoekers. Beperk je vragen niet tot "hij doet het niet" of "hij geeft een fout" - onze glazen bol is kapot en we willen graag van je weten wát er niet lukt en wélke foutmelding je precies krijgt :)

Zie ook:
PHP Dataverwerking
Officiële PHP website
PHP Documentatie
MySQL Reference Manual
Yet Another PHP Faq
PHP Cheat Sheet
PHP5 Power Programming - boek met uitleg over OOP, Pear, XML, etc

Tutorials:
W3Schools PHP
W3Schools SQL
Pakspulwoensdag 9 november 2011 @ 13:41
quote:
0s.gif Op woensdag 9 november 2011 13:36 schreef Scorpie het volgende:

[..]

Arrays & loops _O_
Concatenatie en empty() checks :(
Als je 10 velden maakt met name="veldnaam[]" en deze niet in vult zit hij nog steeds in de array, dus de empty check zit zowel bij de concatenatie als bij de array+loops, dus dan komt het aan op de array vs, concat waar laatste 1 berekening extra nodig is per iteratie om de veldnaam te berekenen.
Scorpiewoensdag 9 november 2011 @ 13:47
quote:
0s.gif Op woensdag 9 november 2011 13:41 schreef Pakspul het volgende:

[..]

Als je 10 velden maakt met name="veldnaam[]" en deze niet in vult zit hij nog steeds in de array, dus de empty check zit zowel bij de concatenatie als bij de array+loops, dus dan komt het aan op de array vs, concat waar laatste 1 berekening extra nodig is per iteratie om de veldnaam te berekenen.
Daarbij is het qua leesbaarheid een stuk minder netjes, is het werken in PHP met array`s een native werkwijze en werkt het qua onderhoud ook erg lekker.
Pakspulwoensdag 9 november 2011 @ 13:51
Ben ik het met je eens, maar je zit nog steeds met dat in beide gevallen je 10 velden hebt. Hiervoor kan de persoon met het probleem (naam even kwijt :P) beter gaan kijken of hij wat mooie trucks kan uithalen in HTML+JS om zo on-the-fly rijen toe te voegen en dan kan hij perfect met naam[] gaan werken.
remi1986woensdag 9 november 2011 @ 13:57
quote:
0s.gif Op woensdag 9 november 2011 13:51 schreef Pakspul het volgende:
Ben ik het met je eens, maar je zit nog steeds met dat in beide gevallen je 10 velden hebt. Hiervoor kan de persoon met het probleem (naam even kwijt :P) beter gaan kijken of hij wat mooie trucks kan uithalen in HTML+JS om zo on-the-fly rijen toe te voegen en dan kan hij perfect met naam[] gaan werken.
Ben ik het nog niet mee eens, want je kan een rij toevoegen met js, maar wie zegt dat deze is ingevuld?
Pakspulwoensdag 9 november 2011 @ 14:02
quote:
0s.gif Op woensdag 9 november 2011 13:57 schreef remi1986 het volgende:

[..]

Ben ik het nog niet mee eens, want je kan een rij toevoegen met js, maar wie zegt dat deze is ingevuld?
Het blijft verstandig om checks uit te blijven voeren, maar het scheelt sowieso een scherm waar de persoon moet opgeven hoeveel velden/rijen hij wil. Dat zal ten goede komen aan de gebruiksvriendelijkheid van de applicatie. Het scheelt je in omslachtige PHP constructies omdat het in JS erg makkelijk geregeld kan worden. En de persoon kan snel nog een regel toevoegen als hij er toch meer dan X wil hebben, anders moet hij terug en weer alles invullen.
remi1986woensdag 9 november 2011 @ 14:14
quote:
0s.gif Op woensdag 9 november 2011 14:02 schreef Pakspul het volgende:

[..]

Het blijft verstandig om checks uit te blijven voeren, maar het scheelt sowieso een scherm waar de persoon moet opgeven hoeveel velden/rijen hij wil. Dat zal ten goede komen aan de gebruiksvriendelijkheid van de applicatie. Het scheelt je in omslachtige PHP constructies omdat het in JS erg makkelijk geregeld kan worden. En de persoon kan snel nog een regel toevoegen als hij er toch meer dan X wil hebben, anders moet hij terug en weer alles invullen.
Dat ben ik dan wel weer met je eens ^O^

met jQuery heel goed te doen trouwens
http://charlie.griefer.co(...)dding-form-elements/

Demo:
http://charlie.griefer.co(...)dding-form-elements/


of http://sroucheray.org/blog/jquery-dynamic-form/

[ Bericht 10% gewijzigd door remi1986 op 09-11-2011 14:20:04 ]
Darkomendonderdag 10 november 2011 @ 08:28
Heren,

Ik heb een windows 2008 server staan met iis 6.0, helaas heb ik daar weinig ervaring mee en krijg ik erg weinig support en geen keuze voor iets anders.

Op dit moment krijg ik wachtwoord fouten als ik een scheduled task wil aanmaken ondanks dat ik een administrator account heb, dat probeer ik met server beheer op te lossen.

Ik ben op zoek naar een goed cronjob programma, deze moet gratis zijn.at bleek een demo te zijn,
Een tijdje terug had ik Z-cron geïnstalleerd maar dat bleek een demo te zijn.
Pizzaluchtdonderdag 10 november 2011 @ 08:32
Ik heb gisteren een enorme database omgezet naar InnoDB, en wat een verschil zeg, alles voelt veel sneller aan.

Trouwens de DB config van pastebin gebruikt :P
Scorpiedonderdag 10 november 2011 @ 08:38
quote:
0s.gif Op donderdag 10 november 2011 08:32 schreef Pizzalucht het volgende:
Ik heb gisteren een enorme database omgezet naar InnoDB, en wat een verschil zeg, alles voelt veel sneller aan.

Trouwens de DB config van pastebin gebruikt :P
Ik mag hopen dat het niet alleen zo voelt, maar ook zo is en je dat kan meten.
Pizzaluchtdonderdag 10 november 2011 @ 08:41
quote:
14s.gif Op donderdag 10 november 2011 08:38 schreef Scorpie het volgende:

[..]

Ik mag hopen dat het niet alleen zo voelt, maar ook zo is en je dat kan meten.
Het gaat om een forum, iedereen zegt dat hij veel sneller is, dus daar hoef ik het niet voor te meten ;)

EDIT: en ik heb ook geen metingen gedaan voor het omzetten ;)
Scorpiedonderdag 10 november 2011 @ 08:45
quote:
0s.gif Op donderdag 10 november 2011 08:41 schreef Pizzalucht het volgende:

[..]

Het gaat om een forum, iedereen zegt dat hij veel sneller is, dus daar hoef ik het niet voor te meten ;)
Hm, ik ben blij dat ik niet zo`n instelling op mijn werk laat zien.
Pizzaluchtdonderdag 10 november 2011 @ 08:48
quote:
15s.gif Op donderdag 10 november 2011 08:45 schreef Scorpie het volgende:

[..]

Hm, ik ben blij dat ik niet zo`n instelling op mijn werk laat zien.
Het lijkt wel alsof jij op dit forum zit om op iedereen te zeiken, is het ooit goed volgens jou?

Het was een weloverwogen actie, en we hadden veel onderzoek gedaan naar de oorzaak van de traagheid van de database.
Scorpiedonderdag 10 november 2011 @ 08:50
quote:
0s.gif Op donderdag 10 november 2011 08:48 schreef Pizzalucht het volgende:

[..]

Het lijkt wel alsof jij op dit forum zit om op iedereen te zeiken, is het ooit goed volgens jou?
Het is gewoon een les. Als ik onnodig dingen ga vervangen / omzetten / migreren op mijn werk dan word ik (terecht) teruggefloten en moet ik aantonen waarom ik iets doe. Het is een way of thinking; "waarom doe je iets, wat levert het op, en hoe kan het nog beter?"

Ze zien me al aan komen met 'zuh zegguh dat het snellur werrukt'.

quote:
Het was een weloverwogen actie, en we hadden veel onderzoek gedaan naar de oorzaak van de traagheid van de database.
Dus je hebt wel gemeten?
Pizzaluchtdonderdag 10 november 2011 @ 08:52
quote:
0s.gif Op donderdag 10 november 2011 08:50 schreef Scorpie het volgende:

[..]

Het is gewoon een les. Als ik onnodig dingen ga vervangen / omzetten / migreren op mijn werk dan word ik (terecht) teruggefloten en moet ik aantonen waarom ik iets doe. Het is een way of thinking; "waarom doe je iets, wat levert het op, en hoe kan het nog beter?"

Ze zien me al aan komen met 'zuh zegguh dat het snellur werrukt'.

[..]

Dus je hebt wel gemeten?
Ik heb gemeten op MyISAM ja, maar die resultaten heb ik niet meer.
Scorpiedonderdag 10 november 2011 @ 08:54
quote:
0s.gif Op donderdag 10 november 2011 08:52 schreef Pizzalucht het volgende:

[..]

Ik heb gemeten op MyISAM ja, maar die resultaten heb ik niet meer.
Dan hoef je je toch ook niet aangevallen te voelen? Je hebt een use case waarom je iets gedaan hebt, je hebt het weten te motiveren en vervolgens uitgevoerd.
Pizzaluchtdonderdag 10 november 2011 @ 08:57
quote:
14s.gif Op donderdag 10 november 2011 08:54 schreef Scorpie het volgende:

[..]

Dan hoef je je toch ook niet aangevallen te voelen? Je hebt een use case waarom je iets gedaan hebt, je hebt het weten te motiveren en vervolgens uitgevoerd.
Ja, maar geen resultaten om te vergelijken.

En sorry dan, het is vroeg :P
Scorpiedonderdag 10 november 2011 @ 09:07
quote:
0s.gif Op donderdag 10 november 2011 08:57 schreef Pizzalucht het volgende:

[..]

Ja, maar geen resultaten om te vergelijken.

En sorry dan, het is vroeg :P
:*
GlowMousedonderdag 10 november 2011 @ 11:18
InnoDB is heel vaak de betere keuze. De configuratie moet je dan wel op je data en op je hardware afstemmen, en niet zo van pastebin plukken.
Catbertdonderdag 10 november 2011 @ 12:16
quote:
0s.gif Op donderdag 10 november 2011 11:18 schreef GlowMouse het volgende:
InnoDB is heel vaak de betere keuze.
Als je veel updates doet, sure, maar als je vooral veel leest en geen transacties nodig hebt is MyISAM vaak sneller. Dus dat is nogal een broad sweeping statement. Hoe dan ook is het "meten is weten", dat soort dingen test je natuurlijk gewoon.
GlowMousedonderdag 10 november 2011 @ 12:22
quote:
0s.gif Op donderdag 10 november 2011 12:16 schreef Catbert het volgende:

[..]

Als je veel updates doet, sure, maar als je vooral veel leest en geen transacties nodig hebt is MyISAM vaak sneller.
Het verschil is slechts enkele procenten, niet de moeite waard tegenover de voordelen die InnoDB biedt.
Catbertdonderdag 10 november 2011 @ 12:40
quote:
0s.gif Op donderdag 10 november 2011 12:22 schreef GlowMouse het volgende:
Het verschil is slechts enkele procenten, niet de moeite waard tegenover de voordelen die InnoDB biedt.
InnoDB houdt toch geen rowcounts bij voor tabellen? Of doet 'ie dat wel tegenwoordig? Gebruik al jaren geen MySQL meer...
Thomassdonderdag 10 november 2011 @ 13:15
quote:
0s.gif Op donderdag 10 november 2011 11:18 schreef GlowMouse het volgende:
InnoDB is heel vaak de betere keuze. De configuratie moet je dan wel op je data en op je hardware afstemmen, en niet zo van pastebin plukken.
Met 256mb geheugen zit je helaas aan MyISAM vast.

of heb je nog een protip?
GlowMousedonderdag 10 november 2011 @ 13:40
quote:
0s.gif Op donderdag 10 november 2011 12:40 schreef Catbert het volgende:

[..]

InnoDB houdt toch geen rowcounts bij voor tabellen? Of doet 'ie dat wel tegenwoordig? Gebruik al jaren geen MySQL meer...
Je hebt nooit een rowcount nodig. Een rowcount bestaat ook helemaal niet.
quote:
0s.gif Op donderdag 10 november 2011 13:15 schreef Thomass het volgende:

[..]

Met 256mb geheugen zit je helaas aan MyISAM vast.

of heb je nog een protip?
256MB geheugen komt nergens voor. InnoDB kan er prima mee werken, maar verwacht net als bij MyISAM geen goede performance als je regelmatig data moet lezen die niet in je geheugen staat.
urseldonderdag 10 november 2011 @ 13:51
quote:
0s.gif Op donderdag 10 november 2011 11:18 schreef GlowMouse het volgende:
InnoDB is heel vaak de betere keuze. De configuratie moet je dan wel op je data en op je hardware afstemmen, en niet zo van pastebin plukken.
Heb je daar ook mooie tutorials voor qua settings? :7
GlowMousedonderdag 10 november 2011 @ 13:57
quote:
0s.gif Op donderdag 10 november 2011 13:51 schreef ursel het volgende:

[..]

Heb je daar ook mooie tutorials voor qua settings? :7
Er is heel veel leesvoer, maar let vooral op de bufferpoolgrootte, op innodb_flush_log_at_trx_commit =2 (tenzij je een raid controller met bbu hebt, dan 1), innodb_flush_method = O_DIRECT, innodb_file_per_table, en bij een ssd nog wat andere settings. Let ook op dat je minimaal 5.5 gebruikt, en bij voorkeur een Percona-build omdat je daarmee veel meer kunt meten. Al is dat laatste bij 256 MB wellicht niet echt wenselijk omdat al die metrics ook een klein beetje geheugen gebruiken.
Pizzaluchtdonderdag 10 november 2011 @ 14:04
quote:
0s.gif Op donderdag 10 november 2011 11:18 schreef GlowMouse het volgende:
InnoDB is heel vaak de betere keuze. De configuratie moet je dan wel op je data en op je hardware afstemmen, en niet zo van pastebin plukken.
Ik heb niet de config van pastebin geplukt, ik heb de config van de eigenaar van pastebin :*

En natuurlijk afgesteld op de beschikbare hardware(die kwam aardig overeen)
Catbertdonderdag 10 november 2011 @ 14:17
quote:
0s.gif Op donderdag 10 november 2011 13:40 schreef GlowMouse het volgende:
Je hebt nooit een rowcount nodig. Een rowcount bestaat ook helemaal niet.
MyISAM houdt gewoon bij hoeveel rows er in een table zitten. Een simpele SELECT COUNT(*) FROM table wordt dan uitgevoerd door uberhaupt niet naar de table te kijken maar gewoon die rowcount terug te geven. Natuurlijk een enorm simpele usecase die niet vaak voor zal komen, en ik geloof best dat InnoDB in veel gevallen de beste oplossing is (alleen al om de row-locking), maar ik vind het wat kort door de bocht om te stellen dat dat altijd zo is.
GlowMousedonderdag 10 november 2011 @ 14:22
quote:
0s.gif Op donderdag 10 november 2011 14:17 schreef Catbert het volgende:

[..]

MyISAM houdt gewoon bij hoeveel rows er in een table zitten. Een simpele SELECT COUNT(*) FROM table wordt dan uitgevoerd door uberhaupt niet naar de table te kijken maar gewoon die rowcount terug te geven.
je leest niet goed ;(
quote:
0s.gif Op donderdag 10 november 2011 14:04 schreef Pizzalucht het volgende:

[..]

Ik heb niet de config van pastebin geplukt, ik heb de config van de eigenaar van pastebin :*
groot verschil ;(
Thomassdonderdag 10 november 2011 @ 14:23
quote:
0s.gif Op donderdag 10 november 2011 13:40 schreef GlowMouse het volgende:

[..]

Je hebt nooit een rowcount nodig. Een rowcount bestaat ook helemaal niet.

[..]
quote:
256MB geheugen komt nergens voor. InnoDB kan er prima mee werken, maar verwacht net als bij MyISAM geen goede performance als je regelmatig data moet lezen die niet in je geheugen staat.
Op mijn vps wel :P

De memoryfootprint van innodb is veel hoger dan die van myisam, vandaar mijn vraag.
GlowMousedonderdag 10 november 2011 @ 14:29
met geheugentekort kan innodb juist heel goed presteren mbv page-compressie
boem-dikkiedonderdag 10 november 2011 @ 22:15
Ik kom ergens niet uit.

1
2
3
4
5
6
7
8
9
10
11
12
<?php
   $sql 
"SELECT 
                pagina.id AS paginaid, 
                pagina.title AS paginatitle, 
                pagina.link AS paginalink,
                buttons.button_id AS button_id,
                buttons.id AS id
            FROM 'pagina'
            JOIN  buttons
            ON pagina.id = buttons.id
            ORDER BY `paginatitle`  ASC;"
;
?>

Ik heb een tabel 'buttons' met button_id en id en een tabel 'pagina' met id, title en link.
Nu wil ik de buttons laten zien en dan uit de tabel 'pagina' de juiste title en link geven bij het id dat overeenkomt met die in de tabel 'buttons'.

Blijf een foutmelding krijgen. Het zit in de Query maar ik snap niet waar.
GlowMousedonderdag 10 november 2011 @ 22:19
FROM 'pagina'

zonder quotes.
boem-dikkiedonderdag 10 november 2011 @ 22:21
Helaas geen verandering. Ik ben echt een ramp met JOIN.
GlowMousedonderdag 10 november 2011 @ 22:23
wat is 'de foutmelding' dan?
boem-dikkiedonderdag 10 november 2011 @ 22:24
Hij laat mijn if(!$result){ echo "foutmelding" }; zien. Hij kan de query dus niet uitvoeren.
GlowMousedonderdag 10 november 2011 @ 22:26
zo debug je geen queries
boem-dikkiedonderdag 10 november 2011 @ 22:30
Als ik de query draai in mijn phpMyAdmin werkt het gewoon.
boem-dikkiedonderdag 10 november 2011 @ 22:33
Goedenavond, ik ben boem-dikkie de klapmongool en ik ga kappen voor vanavond. Ik had nog geen database verbinding op de pagina waar de output moest komen. :') !!!!
Chandlerdonderdag 10 november 2011 @ 22:34
:N en dat kan moderator zijn :N :P
boem-dikkiedonderdag 10 november 2011 @ 22:35
quote:
0s.gif Op donderdag 10 november 2011 22:34 schreef Chandler het volgende:
:N en dat kan moderator zijn :N :P
Ik moest voor ik moderator werd van B&H en GAM inderdaad eerst een PHP/mySQL toets afnemen en deze met minimaal 95% aan goede antwoorden behalen.
Pakspuldonderdag 10 november 2011 @ 22:37
quote:
9s.gif Op donderdag 10 november 2011 22:33 schreef boem-dikkie het volgende:
Goedenavond, ik ben boem-dikkie de klapmongool en ik ga kappen voor vanavond. Ik had nog geen database verbinding op de pagina waar de output moest komen. :') !!!!
keer tijd om je db class uit te breiden? Zodat hij dit soort dingen aangeeft.
boem-dikkiedonderdag 10 november 2011 @ 22:52
quote:
1s.gif Op donderdag 10 november 2011 22:37 schreef Pakspul het volgende:

[..]

keer tijd om je db class uit te breiden? Zodat hij dit soort dingen aangeeft.
Dat heeft niet perse zo veel zin want de hele database class stond nog niet op die pagina.
GlowMousedonderdag 10 november 2011 @ 23:00
quote:
14s.gif Op donderdag 10 november 2011 22:24 schreef boem-dikkie het volgende:
Hij laat mijn if(!$result){ echo "foutmelding" }; zien. Hij kan de query dus niet uitvoeren.
zulke dingen doe je ook in je db-class
Lightdonderdag 10 november 2011 @ 23:03
quote:
10s.gif Op donderdag 10 november 2011 22:52 schreef boem-dikkie het volgende:

[..]

Dat heeft niet perse zo veel zin want de hele database class stond nog niet op die pagina.
Je moet die db class dan ook gebruiken om queries uit te voeren, dan heb je nooit de kans om een query uit te voeren zonder dat de db class geladen is. :)
boem-dikkiedonderdag 10 november 2011 @ 23:11
Ah duidelijk. Toch maar eens naar kijken.
KomtTijd...vrijdag 11 november 2011 @ 19:32
1
2
3
4
5
SELECT
  TIME_FORMAT(TIMEDIFF(landingtime,starttime),"%k:%i") 
    AS flighttime
ORDER BY flighttime  <<<<<<---------------
LIMIT 0,10
Is dit een garantie voor een trage query of moet ik een andere oorzaak zoeken waarom mijn query 8 seconden nodig heeft?

(de echte query is wel wat langer maar dit is het enige verschil met een andere query die binnen 0,03 seconden klaar is)

-edit-
Als ik de TIME_FORMAT eruit haal laat hij geen significante verbetering zien. Als ik de ORDER BY eruit haal wel. Het ligt dus aan het sorteren na een TIMEDIFF, dat kost gewoon tijd.
Heeft iemand enig idee hoe ik dat kan verbeteren? Flighttime opslaan in een extra kolom kan natuurlijk, maar misschien is er een makkelijkere optie?

[ Bericht 10% gewijzigd door KomtTijd... op 11-11-2011 20:32:28 ]
GlowMousezaterdag 12 november 2011 @ 12:53
quote:
0s.gif Op vrijdag 11 november 2011 19:32 schreef KomtTijd... het volgende:

[ code verwijderd ]

Heeft iemand enig idee hoe ik dat kan verbeteren? Flighttime opslaan in een extra kolom kan natuurlijk
Dat moet, met een index erop. Je kunt het resultaat ook 1x/dag berekenen en ergens opslaan, zoveel nieuwe records (niet als in db-records maar als in langste vluchten) zullen er niet komen.
KomtTijd...zaterdag 12 november 2011 @ 18:43
Dan denk ik dat ik liever voor dat eerste gaat. Worden de andere query's waarschijnlijk ook weer een tikkeltje sneller van.
KomtTijd...zondag 13 november 2011 @ 15:24
Pfft ik ben een hele poos bezig geweest, wel een hoop geleerd over het gebruik van indexen (die index op (firstpilot,secondpilot) had ik veel eerder moeten doen) maar uiteindelijk niet het gewenste resultaat gehaald, de query duurde op zijn minst nog 7 seconden...
Uiteindelijk heb ik een andere optimalisatie gedaan: WHERE flighttime > '01:05:00'. Dat limiteert het aantal vluchten gigantisch aangezien we meestal een maximum vluchtduur van 1 uur aanhouden. De "rondje-om-de-kerk" vluchten komen op deze manier dus niet meer in de top 10, maargoed dat is ook niet zo boeiend.
GlowMousezondag 13 november 2011 @ 16:00
je kunt ook je query en je tabellen hier posten
KomtTijd...maandag 14 november 2011 @ 11:32
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
SELECT     
    floco_flight_id,         (int)
    airplane,                (varchar)
    firstpilot_feu_id,       (int)
    secondpilot_feu_id,      (int)
    starttime,               (datetime)
    landingtime,             (datetime)
    startmethod,             (varchar)
    flighttype,              (varchar)
    club,                    (boolean)
    own,                     (boolean)
    flighttime,              (time)
    DATE(starttime) 
        AS datum,
    feu1.data 
        AS firstpilot_name,
    feu2.data 
        AS secondpilot_name
FROM flightdb_flights
LEFT JOIN feusers_properties AS feu1
    ON (firstpilot_feu_id = feu1.userid)
        AND (feu1.title = 'realname')
LEFT JOIN feusers_properties AS feu2
    ON (secondpilot_feu_id = feu2.userid)
        AND (feu2.title = 'realname')
WHERE (YEAR(starttime) = '2011' 
    AND airplane IN ('PH454','PH974','PH1006','PH1210','PH1382','PH1417','PH1433')
    AND flighttime > '01:05:00')
ORDER BY flighttime desc
LIMIT 0,10
Dit is de query. De tabel flightdb_flights laat zich raden. Voor de duidelijkheid heb ik de datatypes er even achter gezet. Deze heeft nu een index op (firstpilot_feu_id, secondpilot_feu_id), op (flighttime) en op (starttime). Er zitten nu een goeie 10.000 records in, ik reken op ongeveer 5000 records per jaar.

feusers_properties had ik al eens gepost, deze heb ik een index gegeven op (userid,title):
1
2
3
4
5
userid | title | data
1      | name  | piet
2      | name  | jan
1      | adres | hoofdstraat 21
3      | name  | henk

-edit-
een andere query die veel vaker voorkomt is dezelfde, maar dan eindigend op:
1
2
3
WHERE (YEAR(starttime) = '2011' 
    AND (firstpilot_feu_id = '2' OR secondpilot_feu_id = '2'))
ORDER BY starttime
en ook:
1
2
WHERE (DATE(starttime) = '2011-10-30')
ORDER BY starttime
waarbij de datum en userid uiteraard kunnen verschillen. Deze query's zijn allebei wel snel.

[ Bericht 10% gewijzigd door KomtTijd... op 14-11-2011 11:57:07 ]
Catbertmaandag 14 november 2011 @ 11:56
Je berekent on the fly (huhu) waarden waarop je ordent, dat betekent min of meer dat er een volledige tijdelijke tabel opgebouwd moet worden (zou je waarschijnlijk ook zien in een query explain). Oftewel; bereken die flight-time voor en zet er een index op.
KomtTijd...maandag 14 november 2011 @ 12:00
quote:
0s.gif Op maandag 14 november 2011 11:56 schreef Catbert het volgende:
Je berekent on the fly (huhu) waarden waarop je ordent, dat betekent min of meer dat er een volledige tijdelijke tabel opgebouwd moet worden (zou je waarschijnlijk ook zien in een query explain). Oftewel; bereken die flight-time voor en zet er een index op.
Dat is juist wat ik gedaan heb. Flighttime is nu een eigen kolom met index, terwijl deze eerst met TIMEDIFF on the fly berekend werd. Het verschil in prestaties is alleen marginaal.

Ik heb ook geprobeerd wat het verschil is tussen WHERE YEAR(starttime) = '2011' en WHERE starttime BETWEEN 2011-01-01 AND 2011-12-31, maar dat is ook nihil/onmeetbaar.
Catbertmaandag 14 november 2011 @ 12:03
Doe eens een query explain?

Sowieso is een query op 10k records complete peanuts.
KomtTijd...maandag 14 november 2011 @ 12:20
quote:
0s.gif Op maandag 14 november 2011 12:03 schreef Catbert het volgende:
Doe eens een query explain?
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
pear_ResultSet Object
(
    [emptyTimeStamp] => &nbsp;
    [emptyDate] =>  &nbsp;
    [datetime] => 
    [connectionId] => Resource id #25
    [fields] => Array
        (
            [id] => 1
            [select_type] => SIMPLE
            [table] => flightdb_flights
            [type] => range
            [possible_keys] => flighttime,airplane
            [key] => flighttime
            [key_len] => 4
            [ref] => 
            [rows] => 466
            [Extra] => Using where; Using temporary; Using filesort
        )

    [resultId] => Resource id #248
    [_currentRow] => 0
    [_numOfRows] => 3
    [_numOfFields] => 10
    [fetchMode] => 1
    [EOF] => 
    [record] => Array
        (
        )

)
ik zit me nog even in te lezen hoe ik dit moet vertalen...

-edit- voor de scherpe lezers: in de testdatabase stond dus ook nog een index op airplane.
Ik heb een index gemaakt op (airplane,starttime,flighttime), dat kan maar dan gebruikt 'ie nog steeds liever de index op flighttime.

quote:
Sowieso is een query op 10k records complete peanuts.
Dat leek mij ook, daarom is het ook irritant dat het zo traag gaat.

[ Bericht 1% gewijzigd door KomtTijd... op 14-11-2011 12:37:58 ]
GlowMousemaandag 14 november 2011 @ 12:52
Waar is die explain van en kan je dat niet mooier weergeven?

>> De tabel flightdb_flights laat zich raden.
niet waar, bovendien zijn er meer tabellen

>> AND airplane IN ('PH454','PH974','PH1006','PH1210','PH1382','PH1417','PH1433')
hoe selectief is dat?
Catbertmaandag 14 november 2011 @ 13:01
Ik snap echt niet waarom MySQL een tijdelijke tabel nodig denkt te hebben hiervoor. Rare query explain trouwens, probeer eens "EXPLAIN EXTENDED"?

Ben wel blij dat we hier vooral met MSSQL werken zeg...

quote:
0s.gif Op maandag 14 november 2011 12:20 schreef KomtTijd... het volgende:
Dat leek mij ook, daarom is het ook irritant dat het zo traag gaat.
Nou waarom het zo traag gaat is wel duidelijk. De vraag is waarom hij voor dat execution plan kiest...
KomtTijd...maandag 14 november 2011 @ 13:15
Ah, ik heb gevonden wat het verschil maakt! De index op (userid,data) in de tabel feusers_properties! Dan valt ook ineens de "Using temporary; Using filesort" weg uit de explain.
Ik heb nu WHERE (flighttime > 01:05:00) weer uit de query gehaald, met index duurt de query nu rond de 0,006 seconden, zonder nog steeds 7-8 seconden.

Helaas probeer ik dat nu pas zónder die WHERE (flighttime > 01:05:00), waardoor het me nog niet opgevallen was. Ik was gisteren de boel al online aan het zetten (en had dus de benchmarks weggehaald).

quote:
0s.gif Op maandag 14 november 2011 12:52 schreef GlowMouse het volgende:
Waar is die explain van en kan je dat niet mooier weergeven?

>> De tabel flightdb_flights laat zich raden.
niet waar, bovendien zijn er meer tabellen

de explain is van de query exact zoals ik hierboven gepost heb (dus niet die twee varianten). Mooier weergeven zou kunnen maar ik wist/weet amper waar ik naar zit te kijken. Heb exlpain nog niet eerder gebruikt.
Wat zou je nog meer willen weten over flightdb_flights? En meer tabellen... Ja die zijn er, maar zitten niet in deze query. Moet ik dan mijn hele database posten? Lijkt me een beetje overdreven...
1
2
3
4
5
6
7
8
9
10
11
12
13
    1     floco_flight_id         bigint(19)
    2     airplane                 varchar(80)
    3     firstpilot_id             int(11)
    4     secondpilot_id             int(11)
    5     starttime                 datetime             
    6     landingtime             datetime 
    7     startmethod             varchar(20)
    8     flighttype                 varchar(20)
    9     club                     tinyint(1)
    10     own                     tinyint(1)
    11     firstpilot_feu_id         int(11)
    12     secondpilot_feu_id         int(11)
    13     flighttime                 time
dit is écht de hele tabel dan.
1
2
3
4
1     id     int(11)             
2     userid     int(11) 
3     title     varchar(100)     
4     data     longtext
En dit de hele tabel feusers_properties
quote:
>> AND airplane IN ('PH454','PH974','PH1006','PH1210','PH1382','PH1417','PH1433')
hoe selectief is dat?
Niet bepaald, denk dat je dan nog 90% over hebt.
KomtTijd...maandag 14 november 2011 @ 13:28
quote:
0s.gif Op maandag 14 november 2011 13:01 schreef Catbert het volgende:

[..]

Nou waarom het zo traag gaat is wel duidelijk. De vraag is waarom hij voor dat execution plan kiest...
Je hebt het hier dus over "using temporary", neem ik aan?
Dan weet ik dat ik dat voortaan in de gaten moet houden.
Catbertmaandag 14 november 2011 @ 13:31
quote:
3s.gif Op maandag 14 november 2011 13:28 schreef KomtTijd... het volgende:
Je hebt het hier dus over "using temporary", neem ik aan?
Dan weet ik dat ik dat voortaan in de gaten moet houden.
Using temporary en using filesort zijn beiden indicaties dat MySQL het niet op de indexen op heeft kunnen lossen en zijn flinke performance hits.

Voor de volgende keer: blijf testen met die simpele query een paar posts terug. Je zet ons ook op het verkeerde been door over te stappen op die grote join.
KomtTijd...maandag 14 november 2011 @ 13:35
Mja om het echt goed uit te zoeken had ik gewoon een testcase moeten maken inderdaad.
Zo zie je maar weer, systematisch aanpakken gaat toch altijd weer het snelst. :@
GlowMousemaandag 14 november 2011 @ 13:50
SHOW CREATE TABLE laat ook je indices zien.
Darkomendinsdag 15 november 2011 @ 09:05
Ik snap er echt geen donder van.

ik heb een script dat werk verdeeld, dit script include een rapportage script.
Wanneer het werk script word gedraaid schrijft het rapportage script netjes alle informatie weg in een log directory en zend een mail.
Savonds word ditzelfde script gestart door een scheduled task op een windows 2008 server....
Maar daar gaat het fout, deze geeft aan dat hij gedraaid heeft maar mn logs worden niet weggeschreven.
Start ik de task met de hand dan word alles netjes weggeschreven

Nu heb ik een kopie van de task gemaakt en een kopie van het rapportage script.
Enkel de log directory heb ik veranderd, deze zend netjes de mail uit en schrijft de logs weg?

Enige wat ik nog niet geprobeerd heb ik dezelfde logdir aanhouden, maar dat zou niet uit moeten maken aangezien sochtends alles wel word weg geschreven.

Ander leuk feit toen dit nog op een unix machine draaide was er geen enkel probleem.
:? :? :? :? :?
n8ndinsdag 15 november 2011 @ 09:23
db: naam, ww encrypted met md5. bij inloggen wordt het wachtwoord omgezet naar md5 voor naar de server gestuurd te worden. cookie met naam en md5-ww staat in cookie om ingelogd te blijven.

De vraag is of dit een veilige methode is, heb verder totaal geen ervaring met beveiliging/inloggen met php.

voordelen:
- ww staat niet open en bloot in cookie.
- ww wordt encrypted over het internet verstuurd
- bij serverhack staan user-ww'en niet openbaar

nadelen:
- cookies?
boem-dikkiedinsdag 15 november 2011 @ 09:25
quote:
7s.gif Op dinsdag 15 november 2011 09:23 schreef n8n het volgende:
db: naam, ww encrypted met md5. bij inloggen wordt het wachtwoord omgezet naar md5 voor naar de server gestuurd te worden. cookie met naam en md5-ww staat in cookie om ingelogd te blijven.

De vraag is of dit een veilige methode is, heb verder totaal geen ervaring met beveiliging/inloggen met php.

voordelen:
- ww staat niet open en bloot in cookie.
- ww wordt encrypted over het internet verstuurd
- bij serverhack staan user-ww'en niet openbaar

nadelen:
- cookies?
Je kunt ook gewoon bij het inloggen controleren of de opgegeven username en het wachtwoord overeen komen met een match in de database en met elkaar. Dan hoef je helemaal geen cookies te gebruiken. Weet overigens niet of dit beter is hoor.
mstxdinsdag 15 november 2011 @ 09:29
quote:
7s.gif Op dinsdag 15 november 2011 09:23 schreef n8n het volgende:
db: naam, ww encrypted met md5. bij inloggen wordt het wachtwoord omgezet naar md5 voor naar de server gestuurd te worden. cookie met naam en md5-ww staat in cookie om ingelogd te blijven.

De vraag is of dit een veilige methode is, heb verder totaal geen ervaring met beveiliging/inloggen met php.

voordelen:
- ww staat niet open en bloot in cookie.
- ww wordt encrypted over het internet verstuurd
- bij serverhack staan user-ww'en niet openbaar

nadelen:
- cookies?
MD5 is imo een beetje verouderd, simpele wachtwoorden zijn eenvoudig te achterhalen. Ik zou bijvoorbeeld SHA gebruiken.
Om ingelogd te blijven zou ik een random hash in een cookie zetten die je aan de user koppelt.
urseldinsdag 15 november 2011 @ 09:38
quote:
0s.gif Op dinsdag 15 november 2011 09:05 schreef Darkomen het volgende:
Ik snap er echt geen donder van.

ik heb een script dat werk verdeeld, dit script include een rapportage script.
Wanneer het werk script word gedraaid schrijft het rapportage script netjes alle informatie weg in een log directory en zend een mail.
Savonds word ditzelfde script gestart door een scheduled task op een windows 2008 server....
Maar daar gaat het fout, deze geeft aan dat hij gedraaid heeft maar mn logs worden niet weggeschreven.
Start ik de task met de hand dan word alles netjes weggeschreven

Nu heb ik een kopie van de task gemaakt en een kopie van het rapportage script.
Enkel de log directory heb ik veranderd, deze zend netjes de mail uit en schrijft de logs weg?

Enige wat ik nog niet geprobeerd heb ik dezelfde logdir aanhouden, maar dat zou niet uit moeten maken aangezien sochtends alles wel word weg geschreven.

Ander leuk feit toen dit nog op een unix machine draaide was er geen enkel probleem.
:? :? :? :? :?
Vanuit welke user stuur je hem handmatig aan en vanuit welke user via de scheduled task?
Darkomendinsdag 15 november 2011 @ 09:40
Zou beide de zelfde user moeten zijn, maar moet ook niet uitmaken, de 2de windows task draait namelijk wel.
Scorpiedinsdag 15 november 2011 @ 09:40
quote:
0s.gif Op dinsdag 15 november 2011 09:05 schreef Darkomen het volgende:
Ik snap er echt geen donder van.

ik heb een script dat werk verdeeld, dit script include een rapportage script.
Wanneer het werk script word gedraaid schrijft het rapportage script netjes alle informatie weg in een log directory en zend een mail.
Savonds word ditzelfde script gestart door een scheduled task op een windows 2008 server....
Maar daar gaat het fout, deze geeft aan dat hij gedraaid heeft maar mn logs worden niet weggeschreven.
Start ik de task met de hand dan word alles netjes weggeschreven

Nu heb ik een kopie van de task gemaakt en een kopie van het rapportage script.
Enkel de log directory heb ik veranderd, deze zend netjes de mail uit en schrijft de logs weg?

Enige wat ik nog niet geprobeerd heb ik dezelfde logdir aanhouden, maar dat zou niet uit moeten maken aangezien sochtends alles wel word weg geschreven.

Ander leuk feit toen dit nog op een unix machine draaide was er geen enkel probleem.
:? :? :? :? :?
Rechtenprobleem op de map ivm taak scheduler en account waaronder deze draait.
Darkomendinsdag 15 november 2011 @ 09:45
Hoe moet ik dat dan zien?
Via het script => http / iis user
Windows tasks => de ingelogde user

Als ik de rechten check hebben zowel de user als iis dezelfde rechten op de map.
Catbertdinsdag 15 november 2011 @ 10:04
quote:
7s.gif Op dinsdag 15 november 2011 09:23 schreef n8n het volgende:
db: naam, ww encrypted met md5. bij inloggen wordt het wachtwoord omgezet naar md5 voor naar de server gestuurd te worden. cookie met naam en md5-ww staat in cookie om ingelogd te blijven.

De vraag is of dit een veilige methode is, heb verder totaal geen ervaring met beveiliging/inloggen met php.

voordelen:
- ww staat niet open en bloot in cookie.
- ww wordt encrypted over het internet verstuurd
- bij serverhack staan user-ww'en niet openbaar

nadelen:
- cookies?
Je zet ten eerste nooit een PW uberhaupt in een cookie. Je onthoudt de sessie. Daarnaast is MD5 achterhaald. Tenslotte zie ik nergens salts genoemd en ik hoop niet dat je overweegt MD5 passwords unsalted in je DB op te slaan?
n8ndinsdag 15 november 2011 @ 10:06
Ok duidelijk, dan heb ik weer iets om me over in te lezen. bedankt
n8ndinsdag 15 november 2011 @ 10:07
quote:
14s.gif Op dinsdag 15 november 2011 09:25 schreef boem-dikkie het volgende:

[..]

Je kunt ook gewoon bij het inloggen controleren of de opgegeven username en het wachtwoord overeen komen met een match in de database en met elkaar. Dan hoef je helemaal geen cookies te gebruiken. Weet overigens niet of dit beter is hoor.
dat doe ik ook wel, had alleen geen idee hoe ik een sessie aan kon maken
cablegunmasterdinsdag 15 november 2011 @ 10:56
1/bin/sh: /home/frietkot/domains/naam.nl/public_html/includes/cronjobs/cronjob_aanmaningen.php: Permission denied
Eeuhm... :P Admin vragen op de server perhaps denk ik nu :D
The_Terminatordinsdag 15 november 2011 @ 10:59
quote:
0s.gif Op dinsdag 15 november 2011 10:56 schreef cablegunmaster het volgende:

[ code verwijderd ]

Eeuhm... :P Admin vragen op de server perhaps denk ik nu :D
Je moet 'cronjob_aanmaningen.php' zo chmodden dat je rechten hebt om het uit te voeren.
cablegunmasterdinsdag 15 november 2011 @ 11:00
quote:
0s.gif Op dinsdag 15 november 2011 10:59 schreef The_Terminator het volgende:

[..]

Je moet 'cronjob_aanmaningen.php' zo chmodden dat je rechten hebt om het uit te voeren.
Done :).
GlowMousedinsdag 15 november 2011 @ 11:27
executable maken is niet nodig, je moet het door php laten uitvoeren:

php /home/frietkot/domains/naam.nl/public_html/includes/cronjobs/cronjob_aanmaningen.php
cablegunmasterdinsdag 15 november 2011 @ 15:06
quote:
0s.gif Op dinsdag 15 november 2011 11:27 schreef GlowMouse het volgende:
executable maken is niet nodig, je moet het door php laten uitvoeren:

php /home/frietkot/domains/naam.nl/public_html/includes/cronjobs/cronjob_aanmaningen.php
Iets in die richting :). merkte al dat het script niks van me php snapte :). Dankje :D
Hopelijk werkt het nu :P Ik lees ook iets dat je eerst naar die directory moet browsen in je script is dat nodig of overbodig? Klinkt raar namelijk dacht dat hij het met deze regel uit moest voeren alsof hij daar staat. (2-3 includes staan erbij namelijk ).
cablegunmasterdinsdag 15 november 2011 @ 17:00
Alleen nog even een mental note voor iemand die dit ook volgt , includes moeten met een fysiek pad van de site komen dus niet een http:// url. maar ook iets in de richting van
"/home/frietkot/domains/naam.nl/public_html/includes/cronjobs/cronjob_aanmaningen.php"
enige fout waar ik nog mee zat met de includes :).
urselwoensdag 16 november 2011 @ 16:19
Wij zijn langzaam maar zeker onze ontwikkelstraat steeds meer aan het automatiseren en gestructueerder te laten verlopen.

Nu vroeg ik me eigenlijk af wat de beste methode is voor het bijhouden welke versie van de software op welke server aanwezig is. Uiteraard kan je dit per server zelf bekijken, maar een overzicht zal het geheel wel vergemakkelijken.

Een kleine indicatie van onze omgevingen. We hebben meerdere software pakketten. Elk software pakket kan soms per klant op een eigen server draaien.
Sitethiefdonderdag 17 november 2011 @ 08:18
Voor de weergave van tekst gebruik ik
1
2
3
<?php
htmlentities
($data[$key],ENT_COMPAT,"ISO-8859-1",false);
?>
Helaas heeft die niet alle characters (zie hier). UTF-8 is ook niet de oplossing...

quote:
“That’s a ‘magic’ sock.”
Wordt
quote:
�That’s a �magic� sock.�
zonder de juiste encodering.
(quotes hier zijn zg. oriented quotes, zie : http://www.typographyforlawyers.com/?page_id=1322 ).

Weet iemand welke encodering dit probleem op kan lossen zonder meer problemen te introduceren?
Pakspuldonderdag 17 november 2011 @ 08:31
UFT-8? ... ik lees dus niet goed.

Wat gebeurd er als je zonder dat invuld?
Sitethiefdonderdag 17 november 2011 @ 08:39
ISO-8859-1 is default in htmlentities, ik gebruik nu ISO-8859-15 vanwege "Western European, Latin-9. Adds the Euro sign, French and Finnish letters missing in Latin-1 (ISO-8859-1). ".
Met UTF-8 verdwijnen bijvoorbeeld teksten met een µ volledig.
Sitethiefdonderdag 17 november 2011 @ 08:52
Ik zou natuurlijk de tekens die htmlentities niet convert zelf kunnen omzetten naar bijvoorbeeld
1
Of
1
, maar het handige aan htmlentities is juist dat die voor jou de juist special entity codes zoekt bij je characters...
Sitethiefdonderdag 17 november 2011 @ 09:03
Dan maar zo.
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
<?php
 
/**
     * Converts smart quotes (&#8220;,&#8221;,&#8216;,&#8217;) and em-dash
     *
     * This function is needed because ISO-8859-1 (and by extend ISO-8859-15)
     * doesn't support these characters, so we need to convert them ourselves.
     *
     * @param string $text
     * @return string
     */
    
function CleanupSmartQuotes($text){
        
$badwordchars = array(
                            
chr(145),
                            
chr(146),
                            
chr(147),
                            
chr(148),
                            
chr(151)
                            );
        
$fixedwordchars = array(
                            
"'",
                            
"'",
                            
'&quot;',
                            
'&quot;',
                            
'&mdash;'
                            
);
        return 
str_replace($badwordchars,$fixedwordchars,$text);
    }
?>
GlowMousedonderdag 17 november 2011 @ 11:03
quote:
0s.gif Op donderdag 17 november 2011 08:39 schreef Sitethief het volgende:
ISO-8859-1 is default in htmlentities, ik gebruik nu ISO-8859-15 vanwege "Western European, Latin-9. Adds the Euro sign, French and Finnish letters missing in Latin-1 (ISO-8859-1). ".
Met UTF-8 verdwijnen bijvoorbeeld teksten met een µ volledig.
Stuur je pagina dan ook netjes als UTF-8 door.
Catbertdonderdag 17 november 2011 @ 11:06
quote:
0s.gif Op donderdag 17 november 2011 11:03 schreef GlowMouse het volgende:
Stuur je pagina dan ook netjes als UTF-8 door.
Dat, zelf zooi gaan replacen is gewoon dom.
Scorpiedonderdag 17 november 2011 @ 11:15
quote:
0s.gif Op donderdag 17 november 2011 11:06 schreef Catbert het volgende:

[..]

Dat, zelf zooi gaan replacen is gewoon dom.
Chandlerdonderdag 17 november 2011 @ 14:20
Ik heb ook weer wat!

Voor een website heb ik een aparte mediabase gebouwd waarin alle media bestanden worden opgeslagen, deze kunnen overal in de website gebruikt worden. Nu roep ik deze media base zo aan.

<img src="/mediabase/type/nummer">

zoals je ziet geef ik geen extensie, dat maakt op zich niets uit zolang de headers maar goed staan! Nou volgens mij wel.

269668.png

Met de volgende code zie ik geen afbeelding, haal ik de headers weg dan wel?

1
2
3
4
5
6
7
8
function feedToBrowser($file, $formatID)
{
    header("Content-type: " . toImageHeader($formatID));
    header("Content-length: " . filesize($file));
    header("Expires: Mon, 1 Jul 2027 05:00:00 GMT\n");     // doorsturen
    readfile($file);
    exit();
}
Waar ga ik de fout in?
Pizzaluchtdonderdag 17 november 2011 @ 14:45
Static files leveren vanuit PHP?
Mocht je het dan toch willen doen, dan zou ik zoiets aanraden:

http://codeutopia.net/blo(...)d_xsendfile-and-php/
Catbertdonderdag 17 november 2011 @ 14:57
Je headers spreken elkaar wel tegen trouwens. Je content expired niet maar je mag 't niet cachen.
Chandlerdonderdag 17 november 2011 @ 21:04
Ok, maar het zou toch moeten werken?
Pizzaluchtdonderdag 17 november 2011 @ 21:27
Weet je zeker dat je nergens output hebt? Ookal is het maar een spatie.
KomtTijd...donderdag 17 november 2011 @ 21:31
En ja, een enter voor- of na je <?php ?> tags is óók output!
Pizzaluchtdonderdag 17 november 2011 @ 21:32
quote:
14s.gif Op donderdag 17 november 2011 21:31 schreef KomtTijd... het volgende:
En ja, een enter voor- of na je <?php ?> tags is óók output!
Daar doelde ik (voornamelijk) op ja :9
Chandlerdonderdag 17 november 2011 @ 22:02
Klopt!!! grrrr..

Met ob_end_clean(); heb ik die opgeruimd en de headers werken weer naar behoren! :)
cablegunmastervrijdag 18 november 2011 @ 01:45
Ik hoop voor je dat je niet direct alle bestanden in de DB opslaat. :o .
Het kan maar is niet aan te raden.
Chandlervrijdag 18 november 2011 @ 08:26
LOL maar natuurlijk niet! :) daarvoor is een server toch? ;)
GlowMousevrijdag 18 november 2011 @ 10:12
quote:
0s.gif Op vrijdag 18 november 2011 01:45 schreef cablegunmaster het volgende:
Ik hoop voor je dat je niet direct alle bestanden in de DB opslaat. :o .
je ziet ''readfile' staan?
GSMboyvrijdag 18 november 2011 @ 21:05
1
2
3
4
5
<?php
$string 
"[onzin] [tk] Mooie auto!";
$parsed preg_replace("/\[(*+.)\]/","<span class='topictag'>\\1</span>",$string);
echo 
$parsed;
?>
Hoe zou dit moeten werken?

Compilation failed: nothing to repeat at offset 3 :P
KomtTijd...vrijdag 18 november 2011 @ 21:10
Wat moet (*+.) matchen? Bedoel je niet (.+) ofzo?
GlowMousevrijdag 18 november 2011 @ 21:13
En zoek op greediness.
GSMboyvrijdag 18 november 2011 @ 21:42
En hoe zou ik dat kunnen implementeren? Zoals ik al zei, ik ben geen held in regexjes. Heb al wel gekeken, maar geen idee van implementatie. :P Iets meer info mag wel... ;)

[ Bericht 38% gewijzigd door GSMboy op 18-11-2011 21:57:08 ]
KomtTijd...vrijdag 18 november 2011 @ 21:45
In dit specifieke geval? (^[\[\]]+)

kortom: match één of meer karakters (+), die niet (^) voorkomt in de lijst tussen [], kortom die niet [ of ] zijn.
cablegunmasterzaterdag 19 november 2011 @ 05:28
quote:
0s.gif Op vrijdag 18 november 2011 10:12 schreef GlowMouse het volgende:

[..]

je ziet ''readfile' staan?
Ik had een IT genoot en die besloot alle mini Avatars op te slaan in de DB in blobs van max 100kb. het leek me een beetje te absurd. en traagmakend.
Lightzaterdag 19 november 2011 @ 09:05
quote:
0s.gif Op zaterdag 19 november 2011 05:28 schreef cablegunmaster het volgende:

[..]

Ik had een IT genoot en die besloot alle mini Avatars op te slaan in de DB in blobs van max 100kb. het leek me een beetje te absurd. en traagmakend.
Zijn beide oplossingen toen getest en met elkaar vergeleken?
Lightzaterdag 19 november 2011 @ 09:14
quote:
3s.gif Op vrijdag 18 november 2011 21:45 schreef KomtTijd... het volgende:
In dit specifieke geval? (^[\[\]]+)

kortom: match één of meer karakters (+), die niet (^) voorkomt in de lijst tussen [], kortom die niet [ of ] zijn.
Een ^ aan het begin van een regex betekent iets anders dan een ^ als eerste teken tussen []. Bedoel je misschen
1([^\[\]]+)
GlowMousezaterdag 19 november 2011 @ 11:46
quote:
0s.gif Op zaterdag 19 november 2011 09:05 schreef Light het volgende:

[..]

Zijn beide oplossingen toen getest en met elkaar vergeleken?
dat hoeft niet, files van een harddisk kunnen door een webserver veel efficiënter geserveerd worden
KomtTijd...zaterdag 19 november 2011 @ 11:49
quote:
0s.gif Op zaterdag 19 november 2011 09:14 schreef Light het volgende:

[..]

Een ^ aan het begin van een regex betekent iets anders dan een ^ als eerste teken tussen []. Bedoel je misschen
[ code verwijderd ]

De regex begint al met een /, volgens mij match jij nu níét [ en wél ]. Niet getest overigens.
GlowMousezaterdag 19 november 2011 @ 12:32
jullie hebben het allebei fout

"/\\[[^\\]]/"

ongetest :P
mscholzaterdag 19 november 2011 @ 13:20
ik wil 2 tabellen vergelijken, en dan telkens meer kolommen selecteren.
dus b.v.:
ik selecteer rij 1 in tabel 1
vervolgens kijk ik of ik aan de hand van kolommen 1 en 2 een match kan vinden, lukt dit niet
dan doe ik kolom 3 erbij (en daarna kolom 4 erbij) en anders bestaat hij niet in de 2de tabel..
dit kan ik natuurlijk oplossen door een select query uit te voeren, en dan gaan loopen en weer query's uitvoeren dus: (voorbeeldcode, even aangepast)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$data_L 
mysql_query($query_L);

while(
$row mysql_fetch_assoc($data_L))
{
    
$query_R "SELECT * FROM `Rechts` WHERE 'Name'=".$row['Name']." AND 'Size'=".$row['Size'];
    
$data_R mysql_query($query_R);

    if(
mysql_num_rows($data_R) >= 1)
    {
        
//doe iets
    
}
    else
    {
        
$query_R "SELECT * FROM `Rechts` WHERE 'Name'=".$row['Name']." AND 'Size'=".$row['Size']." AND 'location=".$row['location'];
        
$data_R2 mysql_query($query_R2);
        if(...)
        
//enzovoort
    
}
}
?>
ik heb alleen het idee dat dit veel te inefficient is :+ en dat beter moet kunnen.. :P

iemand tips waar ik eventueel naar kan kijken/zoeken?
GlowMousezaterdag 19 november 2011 @ 13:34
je database-opzet lijkt me al fout
Arceezaterdag 19 november 2011 @ 13:37
quote:
0s.gif Op zaterdag 19 november 2011 13:20 schreef mschol het volgende:
ik selecteer rij 1 in tabel 1
vervolgens kijk ik of ik aan de hand van kolommen 1 en 2 een match kan vinden, lukt dit niet
dan doe ik kolom 3 erbij (en daarna kolom 4 erbij)
Als je op basis van 2 kolommen al geen match hebt zul je dat met een extra kolom al helemaal niet hebben (op basis van AND).

Je kunt bij een match wel steeds een kolom toevoegen en kijken of je dan nog steeds een match hebt, maar zoals jij doet is zinloos. Je moet die AND in een OR veranderen, op die manier vergroot je de matchkans (los van of het een zinvolle test is).

Dit even over de logica, niet over de efficiency.
mscholzaterdag 19 november 2011 @ 14:22
quote:
14s.gif Op zaterdag 19 november 2011 13:34 schreef GlowMouse het volgende:
je database-opzet lijkt me al fout
mwha. ik wil bestanden indexeren, daar sla ik een aantal properties van op (naam, grootte, checksum, locatie etc)
in dat opzicht is het redelijk normaal lijkt mij

ik maak eens in de zoveel tijd (zeg eens in de maand b.v.) nog een uitdraai maak en deze in een tijdelijke (2de) tabel zet, vervolgens wil ik de verplaatste, verwijderde, hernoemde bestanden en nieuwe bestanden te weten komen..
De audit functionaliteit van windows kan mij daar niet genoeg in helpen.. (iig niet op de manier hoe ik het wil hebben)

quote:
0s.gif Op zaterdag 19 november 2011 13:37 schreef Arcee het volgende:

[..]

Als je op basis van 2 kolommen al geen match hebt zul je dat met een extra kolom al helemaal niet hebben (op basis van AND).

Je kunt bij een match wel steeds een kolom toevoegen en kijken of je dan nog steeds een match hebt, maar zoals jij doet is zinloos. Je moet die AND in een OR veranderen, op die manier vergroot je de matchkans (los van of het een zinvolle test is).

Dit even over de logica, niet over de efficiency.
helemaal gelijk, het ging dan ook om een voorbeeld code, waar ik niet gelet heb op de logica, (ik hoopte dat het idee van wat ik wilde wel duidelijk was eigenlijk :@ )
het betreft overigens een hobby projectje en hoef dus totaal niet perfect te zijn...

[ Bericht 2% gewijzigd door mschol op 19-11-2011 14:57:39 ]
Dalandozaterdag 19 november 2011 @ 16:49
Heel simpel vraagje eigenlijk. Ik heb een string, en ik wil alle linkjes en plaatjes weghalen. Gewoon compleet weg. Hoe doe ik dat?

En alles wat je op Google vind is met eregi, en dat is deprecated.
YazooWzaterdag 19 november 2011 @ 16:54
Gewoon met str_replace?
Dalandozaterdag 19 november 2011 @ 16:54
quote:
0s.gif Op zaterdag 19 november 2011 16:54 schreef YazooW het volgende:
Gewoon met str_replace?
preg_ of str_ ja, maar hoe?
YazooWzaterdag 19 november 2011 @ 16:57
De replace value gewoon leeg laten lijkt mij.
Dalandozaterdag 19 november 2011 @ 16:58
quote:
0s.gif Op zaterdag 19 november 2011 16:57 schreef YazooW het volgende:
De replace value gewoon leeg laten lijkt mij.
No shit. En nu nog de reguliere expressie .

Ik kwam op dit:

1
2
3
<?php
$bericht 
preg_replace("/<a (.*)>(.*)<\/a>/iU"""$bericht);
?>

Maar hier kan nogsteeds iets doorheen komen.
GlowMousezaterdag 19 november 2011 @ 17:17
quote:
7s.gif Op zaterdag 19 november 2011 16:49 schreef Dalando het volgende:
Heel simpel vraagje eigenlijk. Ik heb een string, en ik wil alle linkjes en plaatjes weghalen. Gewoon compleet weg. Hoe doe ik dat?

En alles wat je op Google vind is met eregi, en dat is deprecated.
is het html? Strip_tags is wel handig.
Dalandozaterdag 19 november 2011 @ 19:49
quote:
0s.gif Op zaterdag 19 november 2011 17:17 schreef GlowMouse het volgende:

[..]

is het html? Strip_tags is wel handig.
Dat is precies wat ik zoek. Nooit van die functie gehoord :')

Bedankt GM _O_
Dalandozaterdag 19 november 2011 @ 19:58
Eigenlijk niet helemaal wat ik zoek, ik wil ook nog de HTML die er in zit nog verwijderen..
Pizzaluchtzaterdag 19 november 2011 @ 21:41
Doet hij ook toch?
Lightzaterdag 19 november 2011 @ 23:16
quote:
0s.gif Op zaterdag 19 november 2011 21:41 schreef Pizzalucht het volgende:
Doet hij ook toch?
Met strip_tags() maak je van
1foo <a href="bar">bar</a> baz
de gewone string "foo bar baz". Ik denk dat Dalando "foo baz" wil krijgen, en dan heb je weinig aan strip_tags.
GlowMousezaterdag 19 november 2011 @ 23:32
En dan krijg op een dag xhtml-input. Als hij dat wil, kun je beter een domtree parser gebruiken.
Lightzondag 20 november 2011 @ 00:10
DOMDocument moet goed genoeg zijn. Die heeft gewoon een getElementsByTagName method.
Dalandozondag 20 november 2011 @ 14:15
Maar hoe gebruik ik die?
YazooWmaandag 21 november 2011 @ 16:14
Bij het importeren van een gezipt .sql file in phpmyadmin krijg ik na een tijdje de volgende melding: De maximale uitvoertijd is verstreken, indien u de import wil afmaken kunt u het bestand opnieuw invoeren.

Dit slaat denk ik dan op de max_execution_time in de php.ini, alleen staat die bij mij ingesteld op 999999999999...

Iemand suggesties?
GlowMousemaandag 21 november 2011 @ 16:18
importeer via de command line
YazooWmaandag 21 november 2011 @ 16:48
En hoe doe ik dat dan? Heb daar totaal geen ervaring mee.
Ik run mijn MySQL/PHP trouwens via Xampp.
remi1986maandag 21 november 2011 @ 16:49
Je kan ook bigdump gebruiken

http://www.ozerov.de/bigdump/
KomtTijd...maandag 21 november 2011 @ 16:50
Of gewoon het vinkje aanzetten bij "Sta het onderbreken van de import toe wanneer het script herkent dat de tijdslimiet nadert."
YazooWmaandag 21 november 2011 @ 16:52
quote:
14s.gif Op maandag 21 november 2011 16:50 schreef KomtTijd... het volgende:
Of gewoon het vinkje aanzetten bij "Sta het onderbreken van de import toe wanneer het script herkent dat de tijdslimiet nadert."
Alle keren dat ik het heb geprobeerd stond die optie aangevinkt.
Ben het nu aan het proberen met die "bigdump" die hierboven gepost is.
YazooWmaandag 21 november 2011 @ 17:00
Wazig, bij Phpmyadmin kreeg ik dus elke keer na zo'n 5 minuten die time-out, in die 5 minuten had hij zo'n 90.000 regels geschreven.
Die Bigdump knalt op zijn beurt 822.000 regels weg in 3 minuten.

Het is dus gelukt nu *O*
remi1986dinsdag 22 november 2011 @ 09:19
quote:
0s.gif Op maandag 21 november 2011 17:00 schreef YazooW het volgende:
Wazig, bij Phpmyadmin kreeg ik dus elke keer na zo'n 5 minuten die time-out, in die 5 minuten had hij zo'n 90.000 regels geschreven.
Die Bigdump knalt op zijn beurt 822.000 regels weg in 3 minuten.

Het is dus gelukt nu *O*
phpMyAdmin is sowieso voor dit soort dingen niet echt super. Gebruik voor de servers hier altijd de Linux console om dumps te maken en te importeren.

Maar mooi dat het is gelukt! ^O^
Pakspuldinsdag 22 november 2011 @ 09:27
quote:
0s.gif Op dinsdag 22 november 2011 09:19 schreef remi1986 het volgende:

[..]

phpMyAdmin is sowieso voor dit soort dingen niet echt super. Gebruik voor de servers hier altijd de Linux console om dumps te maken en te importeren.

Maar mooi dat het is gelukt! ^O^
Dat of een echt DB programma die niet vastloopt op een timeout, maar gewoon zijn werk doet en aangeeft hoelang het gaat duren als het aardig wat records zijn :P
GlowMousedinsdag 22 november 2011 @ 11:03
quote:
0s.gif Op dinsdag 22 november 2011 09:27 schreef Pakspul het volgende:

[..]

Dat of een echt DB programma die niet vastloopt op een timeout, maar gewoon zijn werk doet en aangeeft hoelang het gaat duren als het aardig wat records zijn :P
Dat laatste kan soberzo niet.
remi1986dinsdag 22 november 2011 @ 11:04
En met de Linux terminal gaat het sowieso supersnel dat het vaak niet eens nodig is :)
wobbeldinsdag 22 november 2011 @ 22:44
Kan het volgende met PHP/MySQL in één enkele query?

tabelA:
idA
idUser
idAuteur
titel

tabelB:
IdUser
naam

Nu kan ik met een innerjoin heel gemakkelijk de naam erbij zoeken van idUser, maar is het ook mogelijk om idAuteur ook meteen op te zoeken in tabelB?

Ik wil van IdUser en IdAuteur allebei de naam krijgen uit tabel B
GlowMousedinsdag 22 november 2011 @ 22:45
Dat kan, dan moet je 2x joinen en een alias gebruiken voor tabel B en voor naam uit tabel B.
KomtTijd...dinsdag 22 november 2011 @ 23:38
Dat lijkt wel verrot veel op wat ik de laatste tijd mee bezig ben geweest! Voorbeeldje van wat glowmouse bedoelt:

1
2
3
4
5
6
    SELECT     *
        FROM flightdb_flights
        LEFT JOIN feusers_properties AS feu1
            ON (firstpilot_feu_id = feu1.userid)
        LEFT JOIN feusers_properties AS feu2
            ON (secondpilot_feu_id = feu2.userid)
GlowMousedinsdag 22 november 2011 @ 23:39
quote:
0s.gif Op dinsdag 22 november 2011 22:45 schreef GlowMouse het volgende:
Dat kan, dan moet je 2x joinen en een alias gebruiken voor tabel B en voor naam uit tabel B.
Dalandozaterdag 26 november 2011 @ 20:06
GM, als ik vragen mag, hoe ziet de opzet van het FOK!forum eruit? En dan niet de database kant, maar de opzet kwa auto-updates. Hoe zit dat in elkaar?
GlowMousezaterdag 26 november 2011 @ 20:09
Momenteel loopt dat via php, maar er zijn experimenten met node.js.
wobbelzondag 27 november 2011 @ 11:19
Tsenk joe for joellie help!!
Dalandozondag 27 november 2011 @ 15:25
quote:
0s.gif Op zaterdag 26 november 2011 20:09 schreef GlowMouse het volgende:
Momenteel loopt dat via php, maar er zijn experimenten met node.js.
Ja scriptingtaal kon ik zelf wel uitvogelen :') Maar hoe, dat je niet het hele topic laad maar alleen de nieuwe posts enzo, hoe gebeurd dat?
RPGzondag 27 november 2011 @ 15:32
Wat zou de makkelijkste oplossing zijn om dit te doen:

Hieruit:
<field name="willekeurige name" value="willekeurige value"/>

Wil ik eigenlijk de waardes "willekeurige name" en "willekeurige value" los krijgen. In het document staat nog veel meer tekst. Ik wil dus eigenlijk dat als hij de regel tegenkomt met <field name..../> dat hij die 2 strings eruit kan halen en in een variable wegschrijft.

Zouden jullie mij kunnen vertellen welke richting ik op zou moeten zoeken want volgens mij is het veel simpeler te doen dan ik het probeer te doen.
Dalandozondag 27 november 2011 @ 15:33
quote:
0s.gif Op zondag 27 november 2011 15:32 schreef RPG het volgende:
Wat zou de makkelijkste oplossing zijn om dit te doen:

Hieruit:
<field name="willekeurige name" value="willekeurige value"/>

Wil ik eigenlijk de waardes "willekeurige name" en "willekeurige value" los krijgen. In het document staat nog veel meer tekst. Ik wil dus eigenlijk dat als hij de regel tegenkomt met <field name..../> dat hij die 2 strings eruit kan halen en in een variable wegschrijft.

Zouden jullie mij kunnen vertellen welke richting ik op zou moeten zoeken want volgens mij is het veel simpeler te doen dan ik het probeer te doen.
Dus je hebt een html pagina waar je bepaalde elementen vanaf wilt krijgen?
RPGzondag 27 november 2011 @ 15:39
quote:
7s.gif Op zondag 27 november 2011 15:33 schreef Dalando het volgende:

[..]

Dus je hebt een html pagina waar je bepaalde elementen vanaf wilt krijgen?
Het is eigenlijk een xml waar die data vandaan komt. Via php pas ik de xml aan zodat ze aan een bepaalde standaard voldoen zodat ze makkelijk in te lezen zijn.

Nu is er een partij die velden aanlevert als:
<field name="willekeurige name" value="willekeurige value"/>
inplaats van
<field name="willekeurige name">willekeurige value</field>

Dus vandaar dat ik die 2 veldnamen wil hebben zodat ik het wel kloppend kan maken. (makkelijkste zou zijn als leverancier het aan zou passen maar dat is niet mogelijk)

Misschien doe ik gewoon heel moeilijk nu en is er zelfs nog betere oplossing :P
Cue_dinsdag 29 november 2011 @ 10:30
Even een array vraagje

Ik heb een array met de gegevens ($data)
1
2
3
4
5
6
7
8
Array
(
    [27-11-2011] => 392.97
    [26-11-2011] => 385.71
    [24-11-2011] => 516.98
    [23-11-2011] => 513.14
    [22-11-2011] => 516.01
)

Nu moet ik een grafiek vullen, alleen is het mogelijk dat in bovenstaande een bepaalde dag niet voorkomt.. bv de 25e. maar die moet hij natuurlijk wel tonen in de grafiek.

Ik heb daarvoor een nieuwe array $xas en $yas.
De $xas wordt gevuld met alle dagen van de selectie, dus ook de ontbrekende datums. (momenteel nog in array ($datums)

Nu wil ik dat ik per $datums gaan kijken of de key exists in $data en als deze bestaat wil ik de betreffende waarde hebben die er bij staat. en anders moet de waarde 0 worden.

Nu weet ik alleen niet hoe ik dat in code eruit krijg om die betreffende waarde te krijgen.
Jullie tips?
mstxdinsdag 29 november 2011 @ 10:38
1
2
3
4
5
6
7
8
9
10
11
<?php
$datums 
= array('22-11-2011''23-11-2011''24-11-2011''25-11-2011''26-11-2011''27-11-2011');
$xas=array();
foreach ( 
$datums as $v ) {
 if ( isset(
$data[$v]) ) {
  
$xas[$v] = $data[$v];
 } else {
  
$xas[$v] = 0;
 }
}
?>
Zoiets?
Cue_dinsdag 29 november 2011 @ 10:49
:D idd O+

Dit er van gemaakt uiteindelijk:
1
2
3
4
5
6
7
8
9
10
foreach ( $d as $v) {
 if ( isset($data[$v]) ) {
 array_push($yas,$data[$v]);

 } else {
   array_push($yas, 0);
 }
 array_push($xas,substr($v,0,5));
;
}
The_Terminatordinsdag 29 november 2011 @ 11:37
quote:
0s.gif Op dinsdag 29 november 2011 10:38 schreef mstx het volgende:

[ code verwijderd ]

Zoiets?
Ik zou het zo doen:

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
<?php
$data 
= array('27-11-2011' => 392.97'26-11-2011' => 385.71'24-11-2011' => 516.98'23-11-2011' => 513.14'22-11-2011' => 516.01);

$data_full = array();

$data_dates array_keys($data);
$date_start strtotime(implode('-'array_reverse(explode('-'end($data_dates)))));
$date_end strtotime(implode('-'array_reverse(explode('-'reset($data_dates)))));

$data_full[date('d-m-Y'$date_start)] = $data[date('d-m-Y'$date_start)];

while(
$date_start $date_end) {
    
$date_start += 86400;
    
    if(!isset(
$data[date('d-m-Y'$date_start)])) {
        
$data_full[date('d-m-Y'$date_start)] = 0;
    }else{
        
$data_full[date('d-m-Y'$date_start)] = $data[date('d-m-Y'$date_start)];
    }
}

$data_full array_reverse($data_full);

print_r($data_full);
?>
Cue_dinsdag 29 november 2011 @ 12:15
Even een totaal ander vraagje:

een vriend van mij wil graag een website maken, iets in de trant van linkje voorbeeld

Nu natuurlijk is dit altijd wel te maken met bv php. Maar zijn er ook gratis pakketten waar je zoiets mee kan maken (dreamweaver of weet ik veel wat)? Want daar ben ik totaal niet in thuis en ben benieuwd of jullie er tips voor hebben.
Scorpiedinsdag 29 november 2011 @ 12:16
quote:
0s.gif Op dinsdag 29 november 2011 12:15 schreef Cue_ het volgende:
Even een totaal ander vraagje:

een vriend van mij wil graag een website maken, iets in de trant van linkje voorbeeld

Nu natuurlijk is dit altijd wel te maken met bv php. Maar zijn er ook gratis pakketten waar je zoiets mee kan maken (dreamweaver of weet ik veel wat)? Want daar ben ik totaal niet in thuis en ben benieuwd of jullie er tips voor hebben.
Dreamweaver is een ontwikkeltool en geen pakket. En voor zo`n foto gallery kan je kijken naar coppermine.
Cue_dinsdag 29 november 2011 @ 12:23
quote:
0s.gif Op dinsdag 29 november 2011 12:16 schreef Scorpie het volgende:
Dreamweaver is een ontwikkeltool en geen pakket. En voor zo`n foto gallery kan je kijken naar coppermine.
Doel ook meer op ontwikkeltools. Want het liefst zou ie het zelf maken (evt met hulp van mij).
RPGdinsdag 29 november 2011 @ 12:50
quote:
0s.gif Op zondag 27 november 2011 15:39 schreef RPG het volgende:

[..]

Het is eigenlijk een xml waar die data vandaan komt. Via php pas ik de xml aan zodat ze aan een bepaalde standaard voldoen zodat ze makkelijk in te lezen zijn.

Nu is er een partij die velden aanlevert als:
<field name="willekeurige name" value="willekeurige value"/>
inplaats van
<field name="willekeurige name">willekeurige value</field>

Dus vandaar dat ik die 2 veldnamen wil hebben zodat ik het wel kloppend kan maken. (makkelijkste zou zijn als leverancier het aan zou passen maar dat is niet mogelijk)

Misschien doe ik gewoon heel moeilijk nu en is er zelfs nog betere oplossing :P
Iemand die me op weg kan helpen?
remi1986dinsdag 29 november 2011 @ 12:55
quote:
1s.gif Op dinsdag 29 november 2011 12:50 schreef RPG het volgende:

[..]

Iemand die me op weg kan helpen?
snap het probleem niet? voor de naam lees je het attribuut "name" uit. Dan kan je dat toch ook doen voor value?

Gebruik je SimpleXML?
RPGdinsdag 29 november 2011 @ 14:29
Op dit moment gebeurt het volgende:

Er is een xml file die door andere partij aangeleverd wordt. Omdat bestand soms 10mb is en soms 100+mb maak ik er kleine xml files van.

Hier lees ik ze dus niet als xml maar gewoon als plain tekst en maak er kleinere xml files van die voldoen aan de standaard inleesmethode. En in deze stap wil ik dus die tekst eruit filteren, aanpassen en in de kleinere xml op juiste manier wegschrijven. Vandaar dat ik wil weten hoe ik beide velden er uit kan halen. Ik denk zelf met een regexp maar voor ik dat helemaal ga bestuderen hoopte ik dat jullie misshien een methode wisten zodat ik niet blind aan het zoeken ben.
YazooWdinsdag 29 november 2011 @ 20:56
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$i
=0;
$pix=1;
$divId=1;
$posLeft=0;
$posTop=0;

$var="px";
while(
$i<=800)
  {
  echo 
"<div id=\"$divId\" style=\"position:absolute; height:$pix$var; width:$pix$var; background:#000000; top:$posTop$var; left:$posLeft$var;\"></div>";

  
$divId++;
  
$posLeft++;
  
$i++;
  }
?>

Door middel van deze code maak ik 800 divjes, alle divjes zijn 1px bij 1px groot. Het eerste divje begint bij top:0 en left:0. Elk nieuw divje wat gemaakt wordt staat 1px verder naar rechts dan de vorige div.

Als resultaat krijg ik dus een zwarte streep van 800px breed helemaal bovenaan mijn scherm. Wat ik nu wil is dat ik ook nog van boven naar beneden 600 lijnen aanmaak van 800divs(px's) groot. Als eindresultaat wil ik dus 800x600 pixels hebben, elke pixel wordt aangestuurd door zijn eigen divje. De oplossing van dit moet niet al te ingewikkeld zijn lijkt mij, maar toch kom ik er zelf niet uit ;(

Verder nog een klein vraagje over de variabelen die ik in de div plaats. Het lukt mij namelijk niet om bijvoorbeeld $var precies voor px te plaatsen, zet ik ze uit elkaar dan kom er dus een spatie in de broncode waardoor de divjes niet goed weergeven worden, zet ik ze aan elkaar dan wordt px aan het einde van de variabele geplakt zeg maar. Dit heb ik nu tijdelijk opgelost door het volgende te doen: $pix$var, waarbij de waarde van $var "px" is, how to fix this?
U.N.K.L.E.dinsdag 29 november 2011 @ 20:59
quote:
0s.gif Op dinsdag 29 november 2011 20:56 schreef YazooW het volgende:

[ code verwijderd ]

Door middel van deze code maak ik 800 divjes, alle divjes zijn 1px bij 1px groot. Het eerste divje begint bij top:0 en left:0. Elk nieuw divje wat gemaakt wordt staat 1px verder naar rechts dan de vorige div.

Als resultaat krijg ik dus een zwarte streep van 800px breed helemaal bovenaan mijn scherm. Wat ik nu wil is dat ik ook nog van boven naar beneden 600 lijnen aanmaak van 800divs(px's) groot. Als eindresultaat wil ik dus 800x600 pixels hebben, elke pixel wordt aangestuurd door zijn eigen divje. De oplossing van dit moet niet al te ingewikkeld zijn lijkt mij, maar toch kom ik er zelf niet uit ;(

Verder nog een klein vraagje over de variabelen die ik in de div plaats. Het lukt mij namelijk niet om bijvoorbeeld $var precies voor px te plaatsen, zet ik ze uit elkaar dan kom er dus een spatie in de broncode waardoor de divjes niet goed weergeven worden, zet ik ze aan elkaar dan wordt px aan het einde van de variabele geplakt zeg maar. Dit heb ik nu tijdelijk opgelost door het volgende te doen: $pix$var, waarbij de waarde van $var "px" is, how to fix this?
Dan maak je dus nog een while loop over de huidige 800x loop. De nieuwe loop runt 600x. De enige actie die de 600x loop uitvoert is de reeds bestaande loop, en een break na de laatste div.
GlowMousedinsdag 29 november 2011 @ 21:00
of beter, een for-loop
1
2
3
4
5
6
7
<?php
for($i=0$i<800$i++) {
  for(
$j=0$j<800$j++) {
    
// maak hier je div met coördinaten (i,j)
  
}
}
?>
U.N.K.L.E.dinsdag 29 november 2011 @ 21:00
Liever nog een for loop idd. Maar dan met de eerste uiteraard <600 (zal typfoutje zijn)
YazooWdinsdag 29 november 2011 @ 21:08
Thanks, het is gelukt!
Lijkt nu trouwens wel een beetje op een slideIn van jQuery hoe mijn browser nu die divjes opbouwt _O-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$pix
=1;
$divId=1;

$var="px";

for(
$i=0$i<600$i++) {
  for(
$j=0$j<800$j++) {
    echo 
"<div id=\"$divId\" style=\"position:absolute; height:$pix$var; width:$pix$var; background:#000000; top:$j$var; left:$i$var;\"></div>";

  
$divId++;
  
  }
}
?>

Nu zit ik alleen nog met het gedeelte van die variabelen in de div.
Even een voorbeeld hoe ik de top invul:
1top:$j$var
Op dit moment werkt het zo wel, maar dit kan ook anders volgens mij, om de een of andere manier lijkt mij dat dit niet de juiste manier is.
U.N.K.L.E.dinsdag 29 november 2011 @ 21:12
quote:
0s.gif Op dinsdag 29 november 2011 21:08 schreef YazooW het volgende:
Thanks, het is gelukt!
Lijkt nu trouwens wel een beetje op een slideIn van jQuery hoe mijn browser nu die divjes opbouwt _O-
[ code verwijderd ]

Nu zit ik alleen nog met het gedeelte van die variabelen in de div.
Even een voorbeeld hoe ik de top invul:
[ code verwijderd ]

Op dit moment werkt het zo wel, maar dit kan ook anders volgens mij, om de een of andere manier lijkt mij dat dit niet de juiste manier is.
Waarom hoog je de top steeds op? Die hoort toch constant te zijn, aangezien het een rij betreft?
YazooWdinsdag 29 november 2011 @ 21:14
quote:
0s.gif Op dinsdag 29 november 2011 21:12 schreef U.N.K.L.E. het volgende:

[..]

Waarom hoog je de top steeds op? Die hoort toch constant te zijn, aangezien het een rij betreft?
Ik heb eerlijk gezegd geen idee, ben al blij dat ik het nu werkend heb gekregen.
Nadat er elke keer 800 divjes van links naar rechts geschreven zijn moet de top met 1 verhoogd worden zodat er aan de volgende lijn met divjes begonnen kan worden.
U.N.K.L.E.dinsdag 29 november 2011 @ 21:15
quote:
0s.gif Op dinsdag 29 november 2011 21:14 schreef YazooW het volgende:

[..]

Ik heb eerlijk gezegd geen idee, ben al blij dat ik het nu werkend heb gekregen.
Nadat er elke keer 800 divjes van links naar rechts geschreven zijn moet de top met 1 verhoogd worden zodat er aan de volgende lijn met divjes begonnen kan worden.
Maar dat is niet wat nu gebeurd. Bij elk nieuw divje wordt de top 1px groter. En dat is niet de bedoeling natuurlijk ;) De top is constant voor 1 hele rij. Daarna kan hij veranderen.
U.N.K.L.E.dinsdag 29 november 2011 @ 21:15
De $j wordt steeds verhoogt (tot hij 800 bereikt). Je top loopt dus op van 0 tot 800px. Dat kan nooit de bedoeling zijn.
U.N.K.L.E.dinsdag 29 november 2011 @ 21:16
[div style="top:0px"] .. [div style="top:800px"] krijg e je nu
YazooWdinsdag 29 november 2011 @ 21:22
$i en $j bij top en left omgedraaid.
U.N.K.L.E.dinsdag 29 november 2011 @ 21:24
Een div komt al automatisch naast elkaar te staan.

geef gewoon als style steeds op:

"float:left;"

En bij de eerste als extra: "clear:left"

Dan hoef je verder niet met pixels te werken.
YazooWdinsdag 29 november 2011 @ 21:25
Ik wil juist met pixels werken omdat ik alle pixels individueel wil gaan aansturen.
ralfiedinsdag 29 november 2011 @ 21:26
quote:
0s.gif Op dinsdag 29 november 2011 21:25 schreef YazooW het volgende:
Ik wil juist met pixels werken omdat ik alle pixels individueel wil gaan aansturen.
Geen idee wat je opzet wordt (een gigantische hoeveelheid data in ieder geval), maar kun je afhankelijk van je data niet beter een html5 canvas gebruiken met javascript?
YazooWdinsdag 29 november 2011 @ 21:28
Dit is het uiteindelijke doel: http://www.flickr.com/photos/walkingsf/sets/72157627140310742/

Elke pixel representeert een bepaald gebied (gps coordinaten), aan de hand van het aantal foto's per gebied op bijvoorbeeld flickr wordt de kleur van de pixel bepaald.
YazooWdinsdag 29 november 2011 @ 21:34
Reden waarom ik dit maak is trouwens puur en alleen om te oefenen hoe API's in elkaar zitten; wat de mogelijkheden zijn, hoe snel het is, etc etc.
Laser.woensdag 30 november 2011 @ 12:22
Hoe kan ik met preg_match checken of een veld:

1) Alleen letters en punten bevat

2) Alleen letters en spaties

Ik kom er maar niet uit.
GlowMousewoensdag 30 november 2011 @ 12:31
wat heb je al?
Laser.woensdag 30 november 2011 @ 12:35
Momenteel dit:

1
2
3
if(preg_match('/\PL/', $_POST['veld'])){
     print 'error veld';
}

Ik heb dus een check nodig voor initialen, dat hij alleen letters en punten accepteerd. En de ander is voor letters en spaties. De bovenstaande accepteert geen spaties.

EDIT: volgens mij werkt deze al voor de initialen:

1
2
3
        if(!preg_match('#^[a-z. ]+$#i', $_POST['initialen'])){
            print 'error initialen';
        }


[ Bericht 35% gewijzigd door Laser. op 30-11-2011 12:41:01 ]
GlowMousewoensdag 30 november 2011 @ 12:42
\PL zijn letters. Je moet nog zorgen dat hij iets zonder letters niet matcht, want nu matcht hij met de letters die erin voorkomen, ook als er verder rare tekens in staan. Daarvoor moet je je regexp beginnen met ^ en eindigen met $.
McCandlesswoensdag 30 november 2011 @ 17:12
Ik heb even een vraag voor de experts. We hebben op dit moment een webshop met een front- en backoffice dat volledig door één bedrijf zelf ontwikkeld is en volledig voor ons op maat. Nu willen we over naar een OS zoals Magento.

De vraag is nu welke info hebben (Magento) programmeurs in ieder geval nodig voor ze een uitspraak kunnen doen hoeveel werk er in gaat zitten om onze huidige webshop na te bouwen?
GlowMousewoensdag 30 november 2011 @ 17:13
Je database lay-out.
McCandlesswoensdag 30 november 2011 @ 17:16
quote:
0s.gif Op woensdag 30 november 2011 17:13 schreef GlowMouse het volgende:
Je database lay-out.
Ja, dat is een vrij geavanceerd Excel-bestand. Alle functionaliteiten die daarin zitten en die door de site uitgelezen worden moeten we dus gaan benoemen?
GlowMousewoensdag 30 november 2011 @ 17:22
Al je data staat in Excel?
GlowMousewoensdag 30 november 2011 @ 17:24
Eigenlijk gaat het om drie dingen:
- hoe ziet je webshop eruit (kunnen ze zo zien door erop te surfen)
- hoe wil je gegevens invoeren (dat moet je zelf beschrijven, misschien via een exportbestand van een ander systeem van jullie)
- wil je huidige data overzetten (hiervoor is dat Excel-bestand belangrijk)
Pizzaluchtwoensdag 30 november 2011 @ 17:26
Een Excel bestand gebruiken als database voor je webshop?
Diaboxwoensdag 30 november 2011 @ 17:31
quote:
5s.gif Op woensdag 30 november 2011 17:12 schreef McCandless het volgende:
Ik heb even een vraag voor de experts. We hebben op dit moment een webshop met een front- en backoffice dat volledig door één bedrijf zelf ontwikkeld is en volledig voor ons op maat. Nu willen we over naar een OS zoals Magento.

De vraag is nu welke info hebben (Magento) programmeurs in ieder geval nodig voor ze een uitspraak kunnen doen hoeveel werk er in gaat zitten om onze huidige webshop na te bouwen?
Ik heb momenteel 3 webshops met Magento afgeleverd, en des te meer ik met Magento werk, des te meer begin ik het te haten. Beroerde documentatie en een vrij 'slechte' gebruikerscommunity, zitten er wel tussen met verstand hoor, maar de meeste tutorials en posts met 'oplossingen' die je voorbij ziet komen zijn meestal van die hacks en vage trucjes om iets voor elkaar te krijgen. En dan nog het geneuk dat 'n miljard dingen die wel werkte in voorgaande versies, niet meer werken in de nieuwste Magento versie. Ook moet je voor sommige basis functionaliteit die je als developer gewoon in de admin interface verwacht in de files zelf knoeien (denk hierbij aan producten op nieuwste eerst sorteren, of het uitschakelen van 'Add to wishlist', terwijl je 'Add to compare' bijv. wel weer kan uitschakelen via de admin interface). Maar goed dat is allemaal niet jouw probleem hehe.

Wat wel jouw probleem is, is dat het gigantisch uitgebreid is, en als je 'n leek bent dat je 'verdwaald' kan raken in de admin, als je geen computer leek bent is het wel easy uiteraard.

Verder zorgen voor goeie hosting, Magento is erg resource intensief en op normale shared hosting rete traag. Zelf ben ik te spreken over de Magento hosting die skyberate.net biedt.

Voor 'n developer gewoon je huidige webshop laten zien en je eisen geven qua functionaliteit.
McCandlesswoensdag 30 november 2011 @ 17:33
Tja, we werkten al met een Excel-bestand toen ik hier kwam werken. We werken met meer dan 20 leveranciers die hun producten-informatie ook in Excel aanleveren. Helaas is hier niet de kennis om dat gemakkelijk en snel om te zetten in een database. Dat Excel-bestand wordt geëxporteerd naar csv, waarna we dat uploaden.

Misschien is het dus wel eerst zaak voor ons om dit eerst te wijzigen? Wat zijn de voordelen en hoe geef ik input aan zo'n database (automatisch koppelen met de productinformatie van de leveranciers zal niet mogelijk zijn?), want ik ben hier eerlijk gezegd totaal onbekend mee. :).
Diaboxdonderdag 1 december 2011 @ 03:04
Hoe krijg ik de dagen van een specifieke week uit 'n jaar? Ik heb momenteel:
1
2
3
4
5
<?php
    
for($day 1$day <= 7$day++) {
        
$days[] = date('m/d/Y'strtotime($year"W" $week_number $day)) . "\n";
    }
?>
Deze werkt bij sommige weeknummers wel, maar bijv. als het jaar 2011 is, en het week nummer 1, dan krijg ik de volgende array:
1array(7) { [0]=> string(11) "03/14/2011 " [1]=> string(11) "03/21/2011 " [2]=> string(11) "03/28/2011 " [3]=> string(11) "04/04/2011 " [4]=> string(11) "04/11/2011 " [5]=> string(11) "04/18/2011 " [6]=> string(11) "04/25/2011 " } 


[ Bericht 0% gewijzigd door Diabox op 01-12-2011 03:18:18 ]
Lightdonderdag 1 december 2011 @ 07:44
Waarschijnlijk is niet duidelijk welke string er precies in strtotime wordt gebruikt, of de string is niet eenduidig om te zetten naar een timestamp.
1
2
3
4
5
6
<?php
for($day 1$day <= 7$day++) {
    
$formatted sprintf('%4d-W%d-%d'$year$week_number$day);
    
$days[] = date('m/d/Y'strtotime($formatted)) . "\n";
}
?>
En waarom voeg je een \n toe achter die datum? Dat kan bij het weergeven ook nog wel. (Ik zou denk ik ook gewoon kiezen om timestamps (of DateTime objecten) door te geven en de exacte notatie op het scherm pas bij daadwerkelijke weergave bepalen.)
The_Terminatordonderdag 1 december 2011 @ 10:20
quote:
2s.gif Op woensdag 30 november 2011 17:33 schreef McCandless het volgende:
Tja, we werkten al met een Excel-bestand toen ik hier kwam werken. We werken met meer dan 20 leveranciers die hun producten-informatie ook in Excel aanleveren. Helaas is hier niet de kennis om dat gemakkelijk en snel om te zetten in een database. Dat Excel-bestand wordt geëxporteerd naar csv, waarna we dat uploaden.
Wat gebeurd er met het CSV bestand nadat het is geupload? Ik werk zelf ook veel met CSV bestanden uit verschillende bronnen, ik importeer de data die daarin staat naar een database dmv de standaard CSV functies die PHP biedt, zie http://php.net/manual/en/function.fgetcsv.php voor voorbeelden.

Mocht je momenteel werken met een 'flat-file' dan heeft een database erg veel voordelen tov eerdergenoemde. Een database is sneller en stukken makkelijker te onderhouden.

quote:
Misschien is het dus wel eerst zaak voor ons om dit eerst te wijzigen? Wat zijn de voordelen en hoe geef ik input aan zo'n database (automatisch koppelen met de productinformatie van de leveranciers zal niet mogelijk zijn?), want ik ben hier eerlijk gezegd totaal onbekend mee. :).
Het lijkt mij inderdaad handig om dat eerst te wijzigen. En waarom zou dat koppelen niet mogelijk zijn? Je werkt immers met dezelfde data als je het in een DB zet.
Diaboxdonderdag 1 december 2011 @ 14:15
quote:
0s.gif Op donderdag 1 december 2011 07:44 schreef Light het volgende:
Waarschijnlijk is niet duidelijk welke string er precies in strtotime wordt gebruikt, of de string is niet eenduidig om te zetten naar een timestamp.
[ code verwijderd ]

En waarom voeg je een \n toe achter die datum? Dat kan bij het weergeven ook nog wel. (Ik zou denk ik ook gewoon kiezen om timestamps (of DateTime objecten) door te geven en de exacte notatie op het scherm pas bij daadwerkelijke weergave bepalen.)
Kan idd bij het weergeven ook nog wel.

Heb nu die van jou in gebruik genomen, met year en week nummer op respectievelijk 2011 en 1 en krijg:
1array(7) { [0]=> string(11) "01/01/1970 " [1]=> string(11) "01/01/1970 " [2]=> string(11) "01/01/1970 " [3]=> string(11) "01/01/1970 " [4]=> string(11) "01/01/1970 " [5]=> string(11) "01/01/1970 " [6]=> string(11) "01/01/1970 " }

SPOILER
Even hardcoded het jaar en weeknummer:
1
2
3
4
5
6
7
8
9
<?php
    $year 
2011;
    
$week_number 1;
    for(
$day 1$day <= 7$day++) {
        
$formatted sprintf('%4d-W%d-%d'$year$week_number$day);
        
$days[] = date('m/d/Y'strtotime($formatted)) . "\n";
    }
    
var_dump($days);
?>
Laser.donderdag 1 december 2011 @ 16:51
-edit-
opgelost!

[ Bericht 99% gewijzigd door Laser. op 01-12-2011 17:26:55 ]
Luchtkokerdonderdag 1 december 2011 @ 20:54
quote:
0s.gif Op donderdag 1 december 2011 03:04 schreef Diabox het volgende:
Hoe krijg ik de dagen van een specifieke week uit 'n jaar? Ik heb momenteel:
[ code verwijderd ]

Deze werkt bij sommige weeknummers wel, maar bijv. als het jaar 2011 is, en het week nummer 1, dan krijg ik de volgende array:
[ code verwijderd ]

$week_number moet met een 0 beginnen indien hij <2 digits is. bij week 01 werkt het dus gewoon, of week 10. etc.
Diaboxdonderdag 1 december 2011 @ 21:06
quote:
2s.gif Op donderdag 1 december 2011 20:54 schreef Luchtkoker het volgende:

[..]

$week_number moet met een 0 beginnen indien hij <2 digits is. bij week 01 werkt het dus gewoon, of week 10. etc.
Thanks, voeg nu 'n 0 toe als <2 digits. Was me niet opgevallen dat ie het wel deed bij weken bestaande uit 2 digits :')
Lightvrijdag 2 december 2011 @ 00:36
quote:
0s.gif Op donderdag 1 december 2011 21:06 schreef Diabox het volgende:

[..]

Thanks, voeg nu 'n 0 toe als <2 digits. Was me niet opgevallen dat ie het wel deed bij weken bestaande uit 2 digits :')
Gewoon W%d vervangen door W%02d is dan de makkelijkste oplossing. :)
Diaboxvrijdag 2 december 2011 @ 05:07
quote:
0s.gif Op vrijdag 2 december 2011 00:36 schreef Light het volgende:

[..]

Gewoon W%d vervangen door W%02d is dan de makkelijkste oplossing. :)
^O^
cablegunmastervrijdag 2 december 2011 @ 17:52
quote:
15s.gif Op woensdag 30 november 2011 17:26 schreef Pizzalucht het volgende:
Een Excel bestand gebruiken als database voor je webshop?
Je kan een excel bestand makkelijk gebruiken om een CSV te maken en deze in je DB te stoppen :). Je kan het als basis gebruiken daarvanuit normaliseren. (velden en tabellen op een goede manier organiseren ). Vervolgens kun je hieruit weer een DB maken en zoals eerder werd gezegt een Excel bestand is een soort van DB en kan als DB gebruikt worden. Of dit nou zo optimaal is is een ander verhaal.

maar volgens mij post ik dubbel op -_-;; , teveel warme lucht van de douche.

quote:
0s.gif Op woensdag 30 november 2011 17:31 schreef Diabox het volgende:

[..]

Ik heb momenteel 3 webshops met Magento afgeleverd, en des te meer ik met Magento werk, des te meer begin ik het te haten. Beroerde documentatie en een vrij 'slechte' gebruikerscommunity, zitten er wel tussen met verstand hoor, maar de meeste tutorials en posts met 'oplossingen' die je voorbij ziet komen zijn meestal van die hacks en vage trucjes om iets voor elkaar te krijgen. En dan nog het geneuk dat 'n miljard dingen die wel werkte in voorgaande versies, niet meer werken in de nieuwste Magento versie. Ook moet je voor sommige basis functionaliteit die je als developer gewoon in de admin interface verwacht in de files zelf knoeien (denk hierbij aan producten op nieuwste eerst sorteren, of het uitschakelen van 'Add to wishlist', terwijl je 'Add to compare' bijv. wel weer kan uitschakelen via de admin interface). Maar goed dat is allemaal niet jouw probleem hehe.

Wat wel jouw probleem is, is dat het gigantisch uitgebreid is, en als je 'n leek bent dat je 'verdwaald' kan raken in de admin, als je geen computer leek bent is het wel easy uiteraard.

Verder zorgen voor goeie hosting, Magento is erg resource intensief en op normale shared hosting rete traag. Zelf ben ik te spreken over de Magento hosting die skyberate.net biedt.

Voor 'n developer gewoon je huidige webshop laten zien en je eisen geven qua functionaliteit.
Zelfde idee, hiero zelfs al ben je wat verder met magento heb je een te beroerde documentatie.
niet iets simpels als de Java documentatie die heel mooi voor elke variabele aangeeft van hoe en wat je ermee kan. Zonde van magento imho. Voor de rest. Om die reden moest ik een eigen soort van CMS maken. Deze is in ontwikkeling en is gebasseerd zoveel mogelijk op jquery css en mogelijk binnen kort object oriented.

Al zit ik wel met de vraag hoe ik dat aan moet pakken.
Een DB klasse snap ik nog wel.
maar om voor elke klasse een apart Object aan te maken. zit ik nog een beetje in het gewisse.

Laat ik het zo zeggen; Ik snap hoe ik functies moet maken en net hoe ik een DB klasse moet aanroepen aanmaken. maar om er zelf 1 in elkaar te zetten ben ik een beetje in het gewisse.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
class Klant{

function 
insertKlant($data){
//functie
 
global $db;
}

function 
deleteKlant($id){
//functie
return true;
}
}
?>

Is het niet meer dan dit of mis ik nog iets :)? (eerste keer dat ik in classes ga werken ).
bvb kan ik die global $db in de klasse zetten? en dat alle functies er gebruik van kunnen maken.

[ Bericht 15% gewijzigd door cablegunmaster op 02-12-2011 18:00:13 ]
Diaboxvrijdag 2 december 2011 @ 18:32
Ik zou je klant klasse letterlijk als 'n klant zien, en wat je ermee wilt kunnen doen. Je wilt bijv. op kunnen vragen wat z'n naam is, z'n adres, z'n bestellingsgeschiedenis, etc. Het invoegen en verwijderen van klanten zou ik niet binnen de klant klasse definieren. Je wilt tenslotte 'n klant object aanmaken, het managen zou ik in een andere klasse doen. Maar letterlijk 'kenmerken' van 'n klant dus daar in stoppen.

Overigens misschien 'n idee om het niet in het NederEngels te doen (insertKlant :P), maar gewoon volledig Engels. En schrijf vanaf het begin af aan gewoon goede documentatie bij je code.
cablegunmasterzaterdag 3 december 2011 @ 13:14
ok ik zal het eens anders proberen te verwoorden:
Ik heb nu heel veel functies gemaakt in php. en ik wou ze onder klasses categoriseren zodat ze makkelijker vindbaar waren of makkelijker bruikbaar. Nu was de vraag als ik alle functies bijvoorbeeld in klasses stop. zou dit beter helpen of hoe zou ik dit moeten doen. :)
en kan ik session variabele vullen met objecten? :P

[ Bericht 15% gewijzigd door cablegunmaster op 03-12-2011 13:34:10 ]
Lightzaterdag 3 december 2011 @ 16:23
Een class is (als het goed is) meer dan een verzameling bijeengeraapte functies. Het is een abstractie van een ding uit de echte wereld, en je wilt dan ook de relevante eigenschappen meenemen. Zo heeft een klant een naam en een adres. En vast nog meer dingen (het totaal uitgegeven bedrag bijvoorbeeld.) Maar misschien wil je een klant wel modelleren als een persoon met wat extra gegevens.

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
<?php
class Customer {
    private 
$name;
    public function 
getName() { return $this->name; }
    public function 
setName($name) { $this->name $name; }

    private 
$address;
    public function 
getAddress() { return $this->address; }
    public function 
setAddress($address) { $this->address $address; }
    
// More properties ... :)

    
public function __construct($name ''$address '')
    {
        
$this->setName($name);
        
$this->setAddress($address);
    }

    public function 
save()
    {
        
// save logic here
    
}

    public function 
delete()
    {
        
// delete logic here
    
}
}
?>

En ja, je kunt objecten in een sessie opslaan. Dan moet je ze serializen.
_superboer_dinsdag 6 december 2011 @ 13:05
Ik ben bezig met het laten zien van een kaart op een dynamische pagina van een restaurant. (zie bijv: http://www.japansesushi.nl/restaurants/kimono). Iemand een idee waarom lat en long hier geen waarde krijgen, waardoor de kaart dus niet zichtbaar is?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$adres 
strip_tagsget_the_term_list($post->ID'adres') );
$postcode strip_tagsget_the_term_list($post->ID'postcode') );  
$httpadres "http://maps.google.com/maps/api/geocode/json?address=";
$httpadres .= str_replace(" ""+"$adres);
$httpadres .= "+";
$httpadres .= str_replace(" ""+"$postcode);
$httpadres .= "&sensor=false";

$geocode=file_get_contents($httpadres);

$outputjson_decode($geocode);

$lat $output->results[0]->geometry->location->lat;
$long $output->results[0]->geometry->location->lng;
?>

Ik echo nu ook $httpadres, dat blijkt gewoon een correcte link te zijn.

edit: gister werkte de code nog wel
mstxdinsdag 6 december 2011 @ 13:15
quote:
0s.gif Op dinsdag 6 december 2011 13:05 schreef _superboer_ het volgende:
edit: gister werkte de code nog wel
Teveel requests gedaan?
_superboer_dinsdag 6 december 2011 @ 13:18
quote:
0s.gif Op dinsdag 6 december 2011 13:15 schreef mstx het volgende:

[..]

Teveel requests gedaan?
Hoe worden requests geteld? Gaat het om dan om het aantal requests vanaf de domein japansesushi.nl of vanaf mijn ip-adres?
mstxdinsdag 6 december 2011 @ 13:21
quote:
0s.gif Op dinsdag 6 december 2011 13:18 schreef _superboer_ het volgende:

[..]

Hoe worden requests geteld? Gaat het om dan om het aantal requests vanaf de domein japansesushi.nl of vanaf mijn ip-adres?
https://code.google.com/i(...)on/geocoding/#Limits
Ik neem aan dat hij het aantal requests per IP telt. Als je fiile_get_contents doet stuurt hij volgens mij sowieso geen domeinnaam mee dus die kan google niet achterhalen.
_superboer_dinsdag 6 december 2011 @ 13:22
quote:
0s.gif Op dinsdag 6 december 2011 13:21 schreef mstx het volgende:

[..]

https://code.google.com/i(...)on/geocoding/#Limits
Ik neem aan dat hij het aantal requests per IP telt. Als je fiile_get_contents doet stuurt hij volgens mij sowieso geen domeinnaam mee dus die kan google niet achterhalen.
Als ik vanaf een ander device probeer werkt het ook niet, terwijl als ik zelf in m'n browser naar de api-url surf ik wel iets terug krijg.
GlowMousedinsdag 6 december 2011 @ 15:26
quote:
0s.gif Op dinsdag 6 december 2011 13:18 schreef _superboer_ het volgende:

[..]

Hoe worden requests geteld?
Wie doet de request bij Google?
Pizzaluchtdinsdag 6 december 2011 @ 15:42
Hij(met php op de server) doet de requests, met file_get_contents. Ik zou even iets van caching doen op het resultaat ;)
ViPeRIIdinsdag 6 december 2011 @ 20:06
Hi,

Mijn query geeft een probleem, alleen kan ik door de bomen het bos even niet zien, en ik hoop dat jullie mij kunnen helpen.

Ik krijg de foutmelding: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 32

Dat gebeurd (vermoedelijk) bij de volgende query:

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
<?php
mysql_query('INSERT INTO toll_free_cross_corporation 
            (`LINE_NO`, 
             `CORPORATION_ID`,
             `BILL_PLAYER_ID`,
             `NODE_NO`,
             `ACCOUNT_NO`,
             `PAGE_NO`,
             `INVOICE_NO`,
             `INVOICE_DATE`,
             `ACCOUNTING_CODE`,
             `ACCOUNTING_DESCRIPTION`,
             `ACCOUNTING_ID_DESCRIPTION`,
             `NUMBER_CALLED_FROM`,
             `DATE_CALLED`,
             `TIME_CALLED`,
             `CALLER_NUMBER`,
             `PLACE_CALLED_FROM`,
             `MINUTES_CALLED`,
             `ROUTED_FROM_NETWORK`,
             `ROUTED_FROM_NCP`,
             `ROUTED_FROM_RATE`,
             `ROUTED_FROM_TYPE`,
             `USAGE`,
             `PAYPHONE_USE_CHARGE`,
             `SURCHARGE`,
             `TOTAL`,
             `END_TIME`,
             `CALCULATED_RATE`,
             `MINUTES_TRANSLATED_TO_SECONDS`,
             `START_DATE_TIME_TIMESTAMP`,
             `END_DATE_TIME_TIMESTAMP`
        ) VALUES '.implode(',', $sql)) or die (mysql_errno() . ": ". mysql_error());
?>
Lijn 31 is volgens mij
) VALUES '.implode(',', $sql)) or die (mysql_errno() . ": ". mysql_error());

En die kan deze fout volgens mij niet echt opleveren.

De inhoud van $sql wordt als volgt gevuld:

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
<?php
    foreach( $toll_free_cross_corporation_data_array as $row ) 
    {
            $sql[] = '("'.mysql_real_escape_string($row['LINE_NO']).'", 
                   "'.mysql_real_escape_string($row['CORPORATION_ID']).'",
                       "'.mysql_real_escape_string($row['BILL_PLAYER_ID']).'",
                   "'.mysql_real_escape_string($row['NODE_NO']).'",
                   "'.mysql_real_escape_string($row['ACCOUNT_NO']).'",
                   "'.mysql_real_escape_string($row['PAGE_NO']).'",
                               "'.mysql_real_escape_string($row['INVOICE_NO']).'",
                        "'.mysql_real_escape_string($row['INVOICE_DATE']).'",
                   "'.mysql_real_escape_string($row['ACCOUNTING_CODE']).'",
                   "'.mysql_real_escape_string($row['ACCOUNTING_DESCRIPTION']).'",
                   "'.mysql_real_escape_string($row['ACCOUNTING_ID_DESCRIPTION']).'",
                   "'.mysql_real_escape_string($row['NUMBER_CALLED_FROM']).'",
                   "'.mysql_real_escape_string($row['DATE_CALLED']).'",
                   "'.mysql_real_escape_string($row['TIME_CALLED']).'",
                   "'.mysql_real_escape_string($row['CALLER_NUMBER']).'",
                   "'.mysql_real_escape_string($row['PLACE_CALLED_FROM']).'",
                   "'.mysql_real_escape_string($row['MINUTES_CALLED']).'",
                   "'.mysql_real_escape_string($row['ROUTED_FROM_NETWORK']).'",
                   "'.mysql_real_escape_string($row['ROUTED_FROM_NCP']).'",
                   "'.mysql_real_escape_string($row['ROUTED_FROM_RATE']).'",
                   "'.mysql_real_escape_string($row['ROUTED_FROM_TYPE']).'",
                   "'.mysql_real_escape_string($row['USAGE']).'",
                   "'.mysql_real_escape_string($row['PAYPHONE_USE_CHARGE']).'",
                   "'.mysql_real_escape_string($row['SURCHARGE']).'",
                   "'.mysql_real_escape_string($row['TOTAL']).'",
                   "'.mysql_real_escape_string($row['END_TIME']).'",
                   "'.mysql_real_escape_string($row['CALCULATED_RATE']).'",
                   "'.mysql_real_escape_string($row['MINUTES_TRANSLATED_TO_SECONDS']).'",
                   "'.mysql_real_escape_string($row['START_DATE_TIME_TIMESTAMP']).'",
                   "'.mysql_real_escape_string($row['END_DATE_TIME_TIMESTAMP']).'"
                 )';
            }

?>

En de database is opgebouwd met de volgende gegevens:
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
CREATE TABLE IF NOT EXISTS `toll_free_cross_corporation` 
(
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `LINE_NO` text NOT NULL,
  `PAGE_NO` int(11) NOT NULL,
  `CORPORATION_ID` text NOT NULL,
  `BILL_PLAYER_ID` text NOT NULL,
  `NODE_NO` text NOT NULL,
  `ACCOUNT_NO` text NOT NULL,
  `INVOICE_NO` text NOT NULL,
  `INVOICE_DATE` date NOT NULL,
  `ACCOUNTING_CODE` text NOT NULL,
  `ACCOUNTING_DESCRIPTION` text NOT NULL,
  `ACCOUNTING_ID_DESCRIPTION` text NOT NULL,
  `NUMBER_CALLED_FROM` text NOT NULL,
  `DATE_CALLED` date NOT NULL,
  `TIME_CALLED` time NOT NULL,
  `CALLER_NUMBER` text NOT NULL,
  `PLACE_CALLED_FROM` text NOT NULL,
  `MINUTES_CALLED` decimal(6,2) NOT NULL,
  `ROUTED_FROM_NETWORK` varchar(1) NOT NULL,
  `ROUTED_FROM_NCP` varchar(1) NOT NULL,
  `ROUTED_FROM_RATE` varchar(1) NOT NULL,
  `ROUTED_FROM_TYPE` varchar(2) NOT NULL,
  `USAGE` decimal(6,2) NOT NULL,
  `PAYPHONE_USE_CHARGE` decimal(6,2) NOT NULL,
  `SURCHARGE` decimal(6,2) NOT NULL,
  `TOTAL` decimal(6,2) NOT NULL,
  `END_TIME` time NOT NULL,
  `CALCULATED_RATE` decimal(4,4) NOT NULL,
  `MINUTES_TRANSLATED_TO_SECONDS` int(11) NOT NULL,
  `START_DATE_TIME_TIMESTAMP` text NOT NULL,
  `END_DATE_TIME_TIMESTAMP` text NOT NULL,
  PRIMARY KEY (`ID`)    
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1";

Kan het zijn dat ik een type invoer wat niet overeenkomt met het soort veld? En zo ja, hoe achterhaal ik dan welke veld dat dit is?

Ik heb her en der al wat gelezen over deze error, en ik zie ook dat ik "DEFAULT CHARSET=latin1" zou kunnen weghalen, wat misschien het probleem oplost, maar mijn inziens staat dat er niet voor niets, en wil ik ook graag weten wat de impact hiervan in.

Ook zie ik wat staan over de reserved words van mysql maar dan zie ik het over het hoofd, want die heb ik volgens mij niet gebruikt.
GlowMousedinsdag 6 december 2011 @ 20:46
verander mysql_query in echo en kijk wat eruit komt

let ook op je datatypes, text om een datum op te slaan is raar
ViPeRIIdinsdag 6 december 2011 @ 20:54
quote:
14s.gif Op dinsdag 6 december 2011 20:46 schreef GlowMouse het volgende:
verander mysql_query in echo en kijk wat eruit komt

let ook op je datatypes, text om een datum op te slaan is raar
Zit wat in, zou ook een varchar moeten zijn eigenlijk.
De datums zijn qua inhoud echter niet gelijk, en er wordt wat mee gerekend, en dit doe ik voor dat de gegevens weer geexporteerd worden naar bv excel, vandaar dat de datum er als datum en als stamp in staan, en dat had inderdaad anders kunnen zijn als een text veld..

Als ik m echo komt er niets te staan, dat helpt me helaas ook niet...
GlowMousedinsdag 6 december 2011 @ 20:55
MySQL heeft ook een datumtype.
ViPeRIIdinsdag 6 december 2011 @ 21:15
Die gebruik ik ook ;)
Teenowoensdag 7 december 2011 @ 01:33
--edit
opgelost so far

[ Bericht 48% gewijzigd door Teeno op 07-12-2011 01:53:37 ]
Lightwoensdag 7 december 2011 @ 07:34
quote:
0s.gif Op dinsdag 6 december 2011 21:15 schreef ViPeRII het volgende:
Die gebruik ik ook ;)
Daar is anders niets van te zien in het create-statement van toll_free_cross_corporation.
Teenowoensdag 7 december 2011 @ 14:00
Ik vraag het toch hier maar even..

Sinds gisteren wat met OpenCart gaan stoeien, en besloten om even een lokale kopie te trekken van de files en database.

de shop zelf werkt gewoon, alleen kom ik niet in de admin.

db.php
1
2
3
4
5
if (file_exists(DIR_DATABASE . $driver . '.php')) {
            require_once(DIR_DATABASE . $driver . '.php');
        } else {
            exit('Error: Could not find database file ' . DIR_DATABASE . $driver . '.php!');
        }
Geeft het volgende terug;
Error: Could not find database file system/database/mysql.php!

Dat terwijl dezelfde db.php ook via de normale index wordt aangeroepen en hier wel alles werkt?

Dus in een notendop
bron admin/index.php kan database file niet vinden.
bron index.php werkt wel.

De admin dir heeft een eigen config.php, maar deze is identiek aan die van de root dir.
GlowMousewoensdag 7 december 2011 @ 14:06
Zoek op cwd of stel een absoluut pad in.
Teenowoensdag 7 december 2011 @ 14:14
quote:
0s.gif Op woensdag 7 december 2011 14:06 schreef GlowMouse het volgende:
Zoek op cwd of stel een absoluut pad in.
Het moet em ergens in de includes zitten, want als ik het volgende aanpas
1
2
// define('DIR_DATABASE', DIR_SYSTEM.'database/');
define('DIR_DATABASE', $_SERVER['DOCUMENT_ROOT'].'/OpenCart/system/database');
Loopt ie weer vast op de volgende
Notice: Error: Could not load language dutch! in I:\Webserver\root\OpenCart\system\library\language.php on line 26
Warning: fopen(system/logs/error.txt) [function.fopen]: failed to open stream: No such file or directory in I:\Webserver\root\OpenCart\system\library\log.php on line 12

Stukje uit config.php
1
2
3
4
5
6
// DIR
define('INCLUDE_PATH', $_SERVER['DOCUMENT_ROOT'].'/OpenCart');

define('DIR_CATALOG', 'catalog/');
define('DIR_APPLICATION', DIR_CATALOG);
define('DIR_SYSTEM', 'system/');

Het setten van de INCLUDE_PATH in index.php gebeurt na de require_once('config.php');
1
2
// Set Include Path
ini_set('include_path', INCLUDE_PATH);

Wat zie ik over het hoofd :)
GlowMousewoensdag 7 december 2011 @ 14:28
Ook de map voor je language file absoluut instellen dan maar. Of stel DIR_SYSTEM absoluut in.
Teenowoensdag 7 december 2011 @ 14:31
quote:
0s.gif Op woensdag 7 december 2011 14:28 schreef GlowMouse het volgende:
Ook de map voor je language file absoluut instellen dan maar. Of stel DIR_SYSTEM absoluut in.
Die zag ik aankomen idd en had ik al gedaan, zit nu weer met een nieuwe error dus ga weer even debuggen :)

Voor het gemak toch maar een verse install uitgevoerd, ging iets minder tijd in zitten :)

[ Bericht 12% gewijzigd door Teeno op 07-12-2011 14:40:08 ]
cablegunmasterwoensdag 7 december 2011 @ 15:37
URL: /producten/303/45/
Resultaat: index.php?page=producten&gid=303&product=45
RewriteRule ^/?producten/(.*)/?(.*)/$ /index\.php?page=producten&gid=$1&product=$2 [L]

Alleen klopt dit niet, en ik zie niet wat. ik heb geprobeerd met een regex pattern checker:
Te kijken of de regex overeen kwam met de url: http://regexpal.com/
maar hij wil de URL niet in Resultaat veranderen.
mstxwoensdag 7 december 2011 @ 15:40
quote:
0s.gif Op woensdag 7 december 2011 15:37 schreef cablegunmaster het volgende:
URL: /producten/303/45/
Resultaat: index.php?page=producten&gid=303&product=45
RewriteRule ^/?producten/(.*)/?(.*)/$ /index\.php?page=producten&gid=$1&product=$2 [L]

Alleen klopt dit niet, en ik zie niet wat. ik heb geprobeerd met een regex pattern checker:
Te kijken of de regex overeen kwam met de url: http://regexpal.com/
maar hij wil de URL niet in Resultaat veranderen.
Verander /index\.php eens naar /index.php

Of probeer het anders eens zo:
1RewriteRule ^producten/(.*)/(.*)/$ /index.php?page=producten&gid=$1&product=$2 [L]
GlowMousewoensdag 7 december 2011 @ 15:42
^/?producten/(.*)/?(.*)/$
Die eerste .* kan nu 303/45 matchen
cablegunmasterwoensdag 7 december 2011 @ 15:43
quote:
0s.gif Op woensdag 7 december 2011 15:42 schreef GlowMouse het volgende:
^/?producten/(.*)/?(.*)/$
Die eerste .* kan nu 303/45 matchen
Dat zal hem wel zijn. hoe kan ik dat voorkomen?
vraagteken weghalen :P

Solved :)

quote:
0s.gif Op woensdag 7 december 2011 15:40 schreef mstx het volgende:

[..]

Verander /index\.php eens naar /index.php

Of probeer het anders eens zo:
[ code verwijderd ]

Dankje :). zag hem net staan en had het ook net zo gedaan en dat werkte O+
Diaboxdonderdag 8 december 2011 @ 02:20
Weet iemand of het volgende al bestaat:

Ik zoek iets waarmee ik heel simpel 'n video bestand kan embedden op 'n pagina, dat ik het als volgt ongeveer kan aanroepen:

1
2
3
4
5
6
<?php
$videoplayer
->setSource('http://blabla.mpg');
$videoplayer->setDimensions($x$y);
$videoplayer->etc;
$videoplayer->start(); 
?>

Oid. Wil geen poespas admin panel of wat dan ook erbij. Wil puur en alleen in m'n php bestand alles kunnen setten, en dat ie vervolgens het embed in m'n div :)

In welk topic hoort dit precies thuis?
Luchtkokerdonderdag 8 december 2011 @ 02:23
quote:
0s.gif Op donderdag 8 december 2011 02:20 schreef Diabox het volgende:
Weet iemand of het volgende al bestaat:

Ik zoek iets waarmee ik heel simpel 'n video bestand kan embedden op 'n pagina, dat ik het als volgt ongeveer kan aanroepen:
[ code verwijderd ]

Oid. Wil geen poespas admin panel of wat dan ook erbij. Wil puur en alleen in m'n php bestand alles kunnen setten, en dat ie vervolgens het embed in m'n div :)

In welk topic hoort dit precies thuis?
Heeft vrij weinig met PHP te maken gezien dit uiteindelijk met HTML moet worden opgelost, PHP is slechts een serverside taal, die kan zoiets niet. Dit zou dan een soort wrapper worden die uiteindelijk ook een HTML oplossing moet gebruiken.
Diaboxdonderdag 8 december 2011 @ 02:24
quote:
2s.gif Op donderdag 8 december 2011 02:23 schreef Luchtkoker het volgende:

[..]

Heeft vrij weinig met PHP te maken gezien dit uiteindelijk met HTML moet worden opgelost, PHP is slechts een serverside taal, die kan zoiets niet. Dit zou dan een soort wrapper worden die uiteindelijk ook een HTML oplossing moet gebruiken.
Ik weet wat PHP is ik zit bij je in de klas remember :) :) :) :) :)

Maar goed, op aanraden van jou ff JW player gecheckt, is zo te zien precies wat ik zoek. ^O^
remi1986donderdag 8 december 2011 @ 11:51
Hallo mede PHP-ers,

zit met een (raar) probleem. Ik ben bezig om een functie te schrijven die een IBAN rekeningnummer berekent aan de hand van rekeningnummer en banknaam. Dit moet kunnen volgens http://nl.wikipedia.org/w(...)Number#Samenstelling en http://www.ibannl.org/iban_nummer_uitleg.php.

Daarvoor moet het controlegetal berekent worden met de uitleg die daar staat.

Met het voorbeeld op de wikipedia site met bankrekening nummer 1234567 komt daar op gegeven moment 182316110001234567232100 uit en als je de rest neemt van de deling door 97 komt daar 78 uit. Je moet dan 98 - 78 doen en dan is het controlegetal 20. Dat klopt.

Echter als ik mijn eigen rekeningnummer gebruik in mijn functie kom ik op gegeven moment op
10112310549223002232100 / 97 en dan is de uitkomt van de rest ook 78, terwijl dit 82 moet zijn. Het controlegetal moet 16 zijn volgens meerdere IBAN checkers (bijv. http://www.ibannl.org/iban_check.php)

Ook als ik andere rekeningnummers gebruik, dan komt er altijd 78 uit als rest. Doe ik iets fout?

De code

1
2
3
4
<?php
$controlegetal 
10112310549223002232100;
$controlegetal 98 - ($controlegetal 97);     //een echo hierna geeft 20
?>
Pizzaluchtdonderdag 8 december 2011 @ 11:56
http://code.google.com/p/php-iban/

Volgende vond ik op php.net:

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
<?php
function controleer_iban($iban) {
    $iban = str_replace(array(" ", "  ", "   ", "\t"), "", $iban);
    $iban = strtoupper(str_replace(" ", "", $iban));
    if(strlen($iban)>34)
        return false;
    $acceptabel = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0";
    $acceptabel = explode(" ", $acceptabel);
    for($i = 0; $i<strlen($iban); $i++) {
        if(in_array(substr($iban, $i, 1), $acceptabel) === false)
            return false;
    }
    $alfa = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z";
    $alfa = explode(" ", $alfa);
    for($i = 1; $i<27; $i++) {
        $alfa_replace[] = $i+9;
    }
    $controlegetal = str_replace($alfa, $alfa_replace, substr($iban, 4, strlen($iban)-4).substr($iban, 0, 2)."00");
    $controlegetal = 98 - (int)bcmod($controlegetal,97);
    if((int)$controlegetal === (int)substr($iban, 2, 2))
        return true;
    else
        return false;   
}
?>
remi1986donderdag 8 december 2011 @ 12:05
Dank Pizzalucht, echter die php-iban heeft functies voor als je het IBAN al hebt. Ik ben bezig om een conversie te maken van "gewone" bankrekeningnummers naar IBAN nummers voor SEPA betalingen.

In de functie die je eronder post wordt er gebruik gemaakt van bcmod. Echter geeft die bij mij een undefined function error. Volgens de documentatie van PHP zou het gewoon een functie moeten zijn in PHP5. Zal even kijken of ik hier wat over kan vinden, misschien moet er een extensie geinstalleerd worden.
GlowMousedonderdag 8 december 2011 @ 12:14
Het probleem is dat als jij 182316110001234567232100 invoert, er niet als 182316110001234567232100 mee wordt gerekend. Doe dit maar eens:
1
2
3
4
<?php
$a 
182316110001234567232100;
var_dump($a);
?>
Wat je kunt doen zonder bcmod, is het getal als string opslaan en dan zelf een staartdeling uitvoeren.
remi1986donderdag 8 december 2011 @ 12:20
quote:
0s.gif Op donderdag 8 december 2011 12:14 schreef GlowMouse het volgende:
Het probleem is dat als jij 182316110001234567232100 invoert, er niet als 182316110001234567232100 mee wordt gerekend. Doe dit maar eens:
[ code verwijderd ]

Wat je kunt doen zonder bcmod, is het getal als string opslaan en dan zelf een staartdeling uitvoeren.
Ik krijg inderdaad

1
2
3
<?php
string
(24"101123100549223002232100"
?>

Als ik vervolgens dat deel door 97 (dat bedoel je met staartdeling toch?) dan krijg ik

1
2
3
<?php
9.5086309658297E+16
?>

Hoe krijg ik hier dan de rest van?
Ik weet inmiddels wat je bedoeld met staartdeling, maar ga dan liever even kijken of ik die extensie kan installeren :P
GlowMousedonderdag 8 december 2011 @ 12:23
Mensen die bang zijn van een staartdeling.
remi1986donderdag 8 december 2011 @ 12:30
quote:
9s.gif Op donderdag 8 december 2011 12:23 schreef GlowMouse het volgende:
Mensen die bang zijn van een staartdeling.
Het is niet dat ik er bang voor ben, maar dit is dan veel makkelijker

quote:
These functions are only available if PHP was configured with --enable-bcmath
Faux.donderdag 8 december 2011 @ 18:26
mail() en imap_mail(); doen het bij mij niet. Ik roep het script aan via de terminal en hij geeft geen errors aan. Als ik het script upload op een web server dan blijft de pagina maar laden als ik het probeer te bereiken. Heeft iemand enig idee waar ik moet kijken om de oplossing te vinden?
Pakspuldonderdag 8 december 2011 @ 18:38
quote:
0s.gif Op donderdag 8 december 2011 12:14 schreef GlowMouse het volgende:
Het probleem is dat als jij 182316110001234567232100 invoert, er niet als 182316110001234567232100 mee wordt gerekend. Doe dit maar eens:
[ code verwijderd ]

Wat je kunt doen zonder bcmod, is het getal als string opslaan en dan zelf een staartdeling uitvoeren.
Ik krijg trouwens als type float terug, ligt dat aan het feit dat ik 64bit OS heb ?
Lightdonderdag 8 december 2011 @ 19:06
quote:
0s.gif Op donderdag 8 december 2011 18:38 schreef Pakspul het volgende:

[..]

Ik krijg trouwens als type float terug, ligt dat aan het feit dat ik 64bit OS heb ?
Nee, dat komt omdat het getal groter is dan PHP_INT_MAX.
remi1986vrijdag 9 december 2011 @ 09:50
quote:
0s.gif Op donderdag 8 december 2011 19:06 schreef Light het volgende:

[..]

Nee, dat komt omdat het getal groter is dan PHP_INT_MAX.
Anyway het is "opgelost". In ieder geval de functie werkt. PHP is opnieuw compiled met bc_math support :P
Cue_vrijdag 9 december 2011 @ 14:30
Jullie kunnen me vast wel even op weg helpen met een sql query

Ik heb een tabel order_match met daarin de volgende gegevens
- (1) act_starttime
- (2) act_id
- (3) act_nextid
- (4) act_activityid

nou wil ik dat ik bovenstaande gegevens krijg van een bepaalde klant (geen probleem)
plus diezelfde gegevens waar next_id = act_id

Dus ik wil op 1 regel eigenlijk de gegevens
1,2,3,4 .. met daarachter de gegevens van eig de volgende regel (nextid = actid)
Cue_vrijdag 9 december 2011 @ 14:33
laat maar denk ik :)
ViPeRIIzondag 11 december 2011 @ 11:24
Hulp gezocht met een query!

Ik heb mijn gegevens in 1 tabel zitten, en daar wil ik een vergelijking op loslaten.

Tabel: Card
Velden: N_ID, CALLING_CARD_NO, CALLED_FROM, START_TIMESTAMP, END_TIMESTAMP

nu wil ik een selectie maken, waarbij ik per CALLING_CARD kijk, of de CALLED_FROM veranderd is, binnen een bepaalde tijd (zeg 2 uur). Maar ik kom totaal niet uit mijn query :P
Hij moet dus zichzelf gaan itereren, maar als ik dat doe, krijg ik meer resultaten terug dan dat er rijen in mijn tabel zitten.
1
2
3
4
5
6
N_ID    |   CALLING_CARD_NO    |    CALLED_FROM   | START_TIMESTAMP   | END_TIMESTAMP
1       |     0123             |    BOSTON        | 1230000           | 1230020
2       |     0123             |    BOSTON        | 1230040           | 1230060
3       |     0123             |    CHINA         | 1230080           | 1230100
4       |     0123             |    NETHERLANDS   | 1245000           | 1245010
5       |     0124             |    TAIWAN        | 1230000           | 1230100
Waarbij dan dus rij 2 + 3 geselecteerd zouden moeten worden, maar niet 4 omdat die dan buitend mijn zoekgebied valt (buiten de 2 uur), en 2 + 3 eigenlijk om dat ik de resultaten meteen wil hebben, maar als ik het ID bijvoorbeeld heb van 3 omdat die foutief is, denk ik dat ik er ook nog wel uit kan komen. Wie kan mij helpen?

Ik was begonnen met:
SELECT n1.*, n2.* FROM card n1 JOIN card n2 ON n1.CALLING_CARD_NO = n2.CALLING_CARD_NO WHERE n1.N_ID <> n2.N_ID AND n1.CALLED_FROM <> n2.CALLED_FROM

Maar ook dat levert al meer resultaten op dan dat er rijen in mijn tabel zitten :S
cablegunmastermaandag 12 december 2011 @ 11:43
SQL-query:

ALTER TABLE `accounts` ADD FOREIGN KEY ( `id` ) REFERENCES `DB_NAME`.`users` (
`acc_id`
) ON DELETE CASCADE ON UPDATE RESTRICT ;

MySQL retourneerde: Documentatie
#1452 - Cannot add or update a child row: a foreign key constraint fails (`DB_NAME`.<result 2 when explaining filename '#sql-419_1bae51'>, CONSTRAINT `#sql-419_1bae51_ibfk_1` FOREIGN KEY (`id`) REFERENCES `users` (`acc_id`) ON DELETE CASCADE)

Hoe kan ik dit oplossen? :P
Wat ik wou doen was een Foreign key op een acc_id uit users zetten. en op Accounts als ik daar 1 verwijderde dat uit accounts een corresponderend ID verdween. Alleen krijg ik opeens deze melding. Uit google wordt ik niet veel wijzer. beide tabellen hebben een InnoDB engine.
Lightmaandag 12 december 2011 @ 21:46
quote:
0s.gif Op maandag 12 december 2011 11:43 schreef cablegunmaster het volgende:
SQL-query:

ALTER TABLE `accounts` ADD FOREIGN KEY ( `id` ) REFERENCES `DB_NAME`.`users` (
`acc_id`
) ON DELETE CASCADE ON UPDATE RESTRICT ;

MySQL retourneerde: Documentatie
#1452 - Cannot add or update a child row: a foreign key constraint fails (`DB_NAME`.<result 2 when explaining filename '#sql-419_1bae51'>, CONSTRAINT `#sql-419_1bae51_ibfk_1` FOREIGN KEY (`id`) REFERENCES `users` (`acc_id`) ON DELETE CASCADE)

Hoe kan ik dit oplossen? :P
Wat ik wou doen was een Foreign key op een acc_id uit users zetten. en op Accounts als ik daar 1 verwijderde dat uit accounts een corresponderend ID verdween. Alleen krijg ik opeens deze melding. Uit google wordt ik niet veel wijzer. beide tabellen hebben een InnoDB engine.
Als er een foreign key op acc_id moet, moet je de tabel users wijzigen.
1
2
ALTER TABLE `users` ADD FOREIGN KEY (`acc_id`) REFERENCES `accounts` (`id`)
    ON DELETE CASCADE ON UPDATE RESTRICT;
Lightmaandag 12 december 2011 @ 22:06
quote:
0s.gif Op zondag 11 december 2011 11:24 schreef ViPeRII het volgende:
Hulp gezocht met een query!

Ik heb mijn gegevens in 1 tabel zitten, en daar wil ik een vergelijking op loslaten.

Tabel: Card
Velden: N_ID, CALLING_CARD_NO, CALLED_FROM, START_TIMESTAMP, END_TIMESTAMP

nu wil ik een selectie maken, waarbij ik per CALLING_CARD kijk, of de CALLED_FROM veranderd is, binnen een bepaalde tijd (zeg 2 uur). Maar ik kom totaal niet uit mijn query :P
Hij moet dus zichzelf gaan itereren, maar als ik dat doe, krijg ik meer resultaten terug dan dat er rijen in mijn tabel zitten.
[ code verwijderd ]

Waarbij dan dus rij 2 + 3 geselecteerd zouden moeten worden, maar niet 4 omdat die dan buitend mijn zoekgebied valt (buiten de 2 uur), en 2 + 3 eigenlijk om dat ik de resultaten meteen wil hebben, maar als ik het ID bijvoorbeeld heb van 3 omdat die foutief is, denk ik dat ik er ook nog wel uit kan komen. Wie kan mij helpen?

Ik was begonnen met:
SELECT n1.*, n2.* FROM card n1 JOIN card n2 ON n1.CALLING_CARD_NO = n2.CALLING_CARD_NO WHERE n1.N_ID <> n2.N_ID AND n1.CALLED_FROM <> n2.CALLED_FROM

Maar ook dat levert al meer resultaten op dan dat er rijen in mijn tabel zitten :S
Zoiets, denk ik.
1
2
3
4
5
6
7
8
9
10
SELECT n1 . * , n2 . *
FROM card n1
INNER JOIN card n2 ON n1.calling_card_no = n2.calling_card_no
WHERE n1.called_from <> n2.called_from
AND n2.id = (
    SELECT min( id )
    FROM card n
    WHERE n.id > n1.id
    AND n.calling_card_no = n1.calling_card_no
)
cablegunmasterdinsdag 13 december 2011 @ 01:15
quote:
0s.gif Op maandag 12 december 2011 21:46 schreef Light het volgende:

[..]

Als er een foreign key op acc_id moet, moet je de tabel users wijzigen.
[ code verwijderd ]
Ik krijg dezelfde foutmelding met jou query , ik probeer dit simpelweg met phpmyadmin uit te voeren en ik word er niet wijzer van. na 3 pagina's google doorzoeken op deze melding.
Lightdinsdag 13 december 2011 @ 07:40
quote:
0s.gif Op dinsdag 13 december 2011 01:15 schreef cablegunmaster het volgende:

[..]

Ik krijg dezelfde foutmelding met jou query , ik probeer dit simpelweg met phpmyadmin uit te voeren en ik word er niet wijzer van. na 3 pagina's google doorzoeken op deze melding.
Bevatten de tabellen al data? En zijn de kolommen wel gelijk?

Wat levert dit op?
1
2
3
4
5
6
7
8
9
10
11
12
SELECT table_schema, table_name, column_name, column_type
FROM information_schema.columns
WHERE table_schema='db_name'
AND (
  (
    table_name = 'users' AND column_name = 'acc_id'
  )
  OR
  (
    table_name =  'accounts' AND column_name = 'id'
  )
)
Swetseneggerdinsdag 13 december 2011 @ 21:22
Simpele vraag, ik een tabel (order_content) waar in elke row, naast andere gegevens, een product ID staat. En dit is een gekocht produkt.

In een andere tabel (products) staat of een product actief is (NOT NULL or <>0)

Nu wil ik een top 10 van de meest verkochte produkten die nog actief zijn. Kan iemand me even op weg helpen met de query(ies)?
Pakspuldinsdag 13 december 2011 @ 21:37
1
2
3
4
5
6
SELECT product.*, count(order_content.ProductID) as productcount
FROM product, order_content
WHERE product.ID = order_content.ProductID
GROUP BY product.ID
ORDER BY productcount
LIMIT 0, 10

Zoiets :? Haalt 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.
Lightdinsdag 13 december 2011 @ 21:41
quote:
5s.gif Op dinsdag 13 december 2011 21:22 schreef Swetsenegger het volgende:
Simpele vraag, ik een tabel (order_content) waar in elke row, naast andere gegevens, een product ID staat. En dit is een gekocht produkt.

In een andere tabel (products) staat of een product actief is (NOT NULL or <>0)

Nu wil ik een top 10 van de meest verkochte produkten die nog actief zijn. Kan iemand me even op weg helpen met de query(ies)?
Gebruik je in products zowel NULL als 0 om aan te geven dat een product niet actief is? Is het niet handiger om daar 1 oplossing voor te kiezen, altijd 0 bij inactief en 1 bij actief?
Pakspuldinsdag 13 december 2011 @ 21:43
quote:
0s.gif Op dinsdag 13 december 2011 21:41 schreef Light het volgende:

[..]

Gebruik je in products zowel NULL als 0 om aan te geven dat een product niet actief is? Is het niet handiger om daar 1 oplossing voor te kiezen, altijd 0 bij inactief en 1 bij actief?
idd, gebruik Tinyant(1) als boolean.
Lightdinsdag 13 december 2011 @ 21:44
quote:
0s.gif Op dinsdag 13 december 2011 21:43 schreef Pakspul het volgende:

[..]

idd, gebruik Tinyant(1) als boolean.
Kleine mier? ;)
Pakspuldinsdag 13 december 2011 @ 21:49
quote:
0s.gif Op dinsdag 13 december 2011 21:44 schreef Light het volgende:

[..]

Kleine mier? ;)
ja, is de opvolger van een int :P
Swetseneggerdinsdag 13 december 2011 @ 21:51
quote:
0s.gif Op dinsdag 13 december 2011 21:41 schreef Light het volgende:

[..]

Gebruik je in products zowel NULL als 0 om aan te geven dat een product niet actief is? Is het niet handiger om daar 1 oplossing voor te kiezen, altijd 0 bij inactief en 1 bij actief?
Het heeft een geschiedenis :)
Pakspuldinsdag 13 december 2011 @ 21:55
quote:
0s.gif Op dinsdag 13 december 2011 21:51 schreef Swetsenegger het volgende:

[..]

Het heeft een geschiedenis :)
Had je wat aan de query?
Swetseneggerdinsdag 13 december 2011 @ 22:09
quote:
0s.gif Op dinsdag 13 december 2011 21:55 schreef Pakspul het volgende:

[..]

Had je wat aan de query?
Yep! Met wat kleine aanpassingen.
Lightdinsdag 13 december 2011 @ 22:11
quote:
0s.gif Op dinsdag 13 december 2011 21:51 schreef Swetsenegger het volgende:

[..]

Het heeft een geschiedenis :)
Alter Table ook ;)
Swetseneggerdinsdag 13 december 2011 @ 22:41
quote:
0s.gif Op dinsdag 13 december 2011 22:11 schreef Light het volgende:

[..]

Alter Table ook ;)
Echt, als het zo eenvoudig was had ik het gedaan :). De table aanpassen is het minste van mijn zorg. Het cms aanpassen om die wijziging door te voeren is een groter probleem.
wipes66woensdag 14 december 2011 @ 01:30
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 :P

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;
        
$a0;
        
$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;
                
        
$a0;
        
$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();
?>
_Flash_woensdag 14 december 2011 @ 10:13
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 ;-)
Catbertwoensdag 14 december 2011 @ 10:50
Een busy-wait van een seconde lang, nee dat is fijn...
Faux.woensdag 14 december 2011 @ 20:29
Hoe kan ik met PHP bij een pagina komen die beveiligd is met HTTP 401?
cablegunmasterwoensdag 14 december 2011 @ 20:54
quote:
7s.gif 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?
Nou dan heb je de juiste variabelen nodig lijkt mij als ik het zo 1-2-3 lees.
Is de pagina van jezelf?
Faux.woensdag 14 december 2011 @ 20:58
quote:
0s.gif 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?
Nee. Ik probeer nu een cURL-oplossing die ik ergens op internet gevonden heb. Even testen :)
The_Terminatorwoensdag 14 december 2011 @ 21:27
quote:
7s.gif 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 :)
En anders kan het ook door een header mee te sturen, zie: http://www.electrictoolbo(...)g-username-password/
Faux.woensdag 14 december 2011 @ 21:28
quote:
0s.gif 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/
Dank je voor je bijdrage, maar de cURL-oplossing werkte :)
Pakspuldonderdag 15 december 2011 @ 08:20
quote:
0s.gif 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 :P
[ code verwijderd ]

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.
Farenjidonderdag 15 december 2011 @ 09:40
quote:
0s.gif 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.
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.
Scorpiedonderdag 15 december 2011 @ 10:31
quote:
0s.gif 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 :P
[ code verwijderd ]

Altijd met salts gaan werken.
Swetseneggerdonderdag 15 december 2011 @ 19:22
quote:
0s.gif Op dinsdag 13 december 2011 21:37 schreef Pakspul het volgende:

[ code verwijderd ]

Zoiets :? Haalt 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.
Dit werkt met wat aanpassingen perfect:

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

Maar nu... wil ik eigenlijk alleen de top tien van afgelopen jaar. De oder_date staat in de tabel 'orders' en je begrijpt het al, de order_id gebruik ik in de tabel order_content, waar ik dus voor elke product in die order een record schrijf.

Dit betekent dus dat je voor elke row in de tabel order_content moet controleren of die hoort bij een order in orders met een orderdate in 2011. order_date is een datetime.

Hier kom ik echt ff niet meer uit :{
Pakspuldonderdag 15 december 2011 @ 19:37
Volgens mij werkt het onderstaande gewoon met een datetime field
1
2
WHERE orders between order_date ('2010/01/01', 'yyyy/mm/dd')
AND order_date ('2010/12/31', 'yyyy/mm/dd');

Wat zou betekenen dat je query er als volgt uit komt te zien:

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
Swetseneggerdonderdag 15 december 2011 @ 19:54
Met wat aanpassingen lijkt het te werken, alleen duurt de query 59 seconden :P

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.
Lightdonderdag 15 december 2011 @ 22:06
quote:
0s.gif 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.
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.
Lightdonderdag 15 december 2011 @ 22:08
quote:
14s.gif Op donderdag 15 december 2011 19:54 schreef Swetsenegger het volgende:
Met wat aanpassingen lijkt het te werken, alleen duurt de query 59 seconden :P

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.
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).
Swetseneggerdonderdag 15 december 2011 @ 22:45
quote:
0s.gif 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).
Schermafbeelding2011-12-15om224308.png
GlowMousedonderdag 15 december 2011 @ 23:15
Schrijf gewoon COUNT(*), zet een index op order_content.product_id en kijk naar ansi style joins
Lightdonderdag 15 december 2011 @ 23:24
quote:
Ik denk dat er geen index op orders.orderdate staat. Een index daar zal helpen. En verder wat GlowMouse zegt.
Swetseneggervrijdag 16 december 2011 @ 08:34
quote:
0s.gif 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
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.
wipes66vrijdag 16 december 2011 @ 11:28
quote:
0s.gif 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 ;-)
Dat is inderdaad een goede oplossing :P Je zou het ook clientside kunnen doen via javascript. Als je wilt inloggen vul je eerst het email adres in. Dat wordt het aantal loops opgehaald dat bij het email adres hoort en vervolgens wordt de boel (e-mail + ww) x aantal keer gehashed en naar de server verstuurd. via deze manier is een challenge response systeem ook mogelijk :7
Swetseneggervrijdag 16 december 2011 @ 17:47
quote:
0s.gif 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.
Ik zit met de aanpassingen nog steeds op een query van 57 seconden. Ik heb alleen de ANSI join nog niet gedaan
das_phantomvrijdag 16 december 2011 @ 20:33
Misschien meer een logica vraag dan php, maar goed:

Ik heb gister met php en mysql een systeem gebouwd om lootjes te trekken. We hebben 5 personen in de database en bij elk lootje dat getrokken wordt, wordt die naam verwijderd.
Uiteraard zorg ik ervoor met code dat niemand zichzelf kan trekken. Echter een probleem weet ik niet zo snel op te lossen.

A trekt B
B trekt A
C trekt D
D trekt C

Persoon E kan dus niemand trekken. Nu kunnen we het net zo lang proberen dat het wel goed gaat, maar vind het mooier om zoiets te voorkomen met code. Iemand een suggestie?
Scorpievrijdag 16 december 2011 @ 20:55
Ik snap het probleem niet helemaal.
Pizzaluchtvrijdag 16 december 2011 @ 20:56
quote:
0s.gif Op vrijdag 16 december 2011 20:55 schreef Scorpie het volgende:
Ik snap het probleem niet helemaal.
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.
das_phantomvrijdag 16 december 2011 @ 20:59
Klopt helemaal
Scorpievrijdag 16 december 2011 @ 21:05
quote:
0s.gif 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.
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?
das_phantomvrijdag 16 december 2011 @ 21:15
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.
Scorpievrijdag 16 december 2011 @ 21:21
A heeft als optie B,C,D,E
B heeft als optie A,C,D,E
C heeft als optie A,B,D,E
D heeft als optie A,B,C,E
E heeft als optie A,B,C,D

Hoe kan hij zichzelf kiezen dan?
das_phantomvrijdag 16 december 2011 @ 23:02
Het gaat mis omdat als E aan de beurt is mogelijk alle opties al vergeven zijn.

Het kan zo verlopen:

A trekt B
B trekt A
C trekt D
D trekt C

E trekt?
GlowMousevrijdag 16 december 2011 @ 23:32
quote:
0s.gif 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.
niet pas trekken als iemand de url aanroept, of bij het een na laatste loodje zorgen dat je niet in een foute situatie komt
ErikNijlandvrijdag 16 december 2011 @ 23:33
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
das_phantomzaterdag 17 december 2011 @ 02:26
Goede suggesties. Ik ga er mee aan de slag!
mscholzaterdag 17 december 2011 @ 10:47
bij lootjestrekken.nl moet iedereen eerst "deelnemen" (+verlanglijstje invullen kan ook), daarna regelt de site het lootjes trekken en stuurt iedereen een link
is dat niet waar je naar opzoek bent?
Pakspulzaterdag 17 december 2011 @ 11:24
quote:
0s.gif 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
Wat nou als randomizen van personen dezelfde lijst oplevert als je lijst waar je aan gaat koppelen? Dan krijgt iedereen zichzelf :P

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.
Swetseneggerzaterdag 17 december 2011 @ 15:31
quote:
0s.gif 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
Iemand nog een idee?
YazooWzaterdag 17 december 2011 @ 15:50
quote:
0s.gif 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 :P

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.
Het is niet zo dat hij 2 lijsten gaat koppelen. Hij heeft 1 lijst met personen a,b,c,d en e.
Die lijst randomized hij, dus abcde wordt bijvoorbeeld bdcae. Vervolgens wordt de eerste letter gekoppeld aan de tweede, de tweede aan de derde, de derde aan de vierde, etc etc. Dus ongeacht of het randomizen iets heeft opgeleverd kan je nooit jezelf loten.
Swetseneggerzaterdag 17 december 2011 @ 16:01
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

Deze lijkt m'n probleem op te lossen :)
GlowMousezaterdag 17 december 2011 @ 19:13
twee join stijlen door elkaar, lelijk hoor
Swetseneggerzaterdag 17 december 2011 @ 19:19
quote:
0s.gif Op zaterdag 17 december 2011 19:13 schreef GlowMouse het volgende:
twee join stijlen door elkaar, lelijk hoor
:D jajaja

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

Zo dan.
GlowMousezaterdag 17 december 2011 @ 19:34
Je WHERE is nog te uitgebreid. Deze query zou ook niet sneller draaien dan de eerste.
Swetseneggerzaterdag 17 december 2011 @ 19:46
quote:
0s.gif 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.
Deze query draait in 37ms, mijn eerste zonder ANSI join in 57 seconden.

Of bedoel je dat deze tov de vorige niet sneller draait? Dat klopt. Maar hoe kan ik de where clausule korter maken? Dit zijn de voorwaarden.

-edit-

duh

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
GlowMousezaterdag 17 december 2011 @ 20:20
De joinvolgorde zal wel gewijzigd zijn, ANSI vs. theta-style heeft geen invloed.
Swetseneggerzaterdag 17 december 2011 @ 20:28
quote:
0s.gif Op zaterdag 17 december 2011 20:20 schreef GlowMouse het volgende:
De joinvolgorde zal wel gewijzigd zijn, ANSI vs. theta-style heeft geen invloed.
wat bedoel je? Dat de laatste query en de eerste query net zo snel zouden moeten zijn?