DateTime gaat dat gewoon snappen, daar hoef je niets moeilijks voor te doen.quote:Op vrijdag 18 mei 2012 06:50 schreef xaban06 het volgende:
Hoi
Ik heb een datum + tijd formaat, een voorbeeld is: 2012-05-02T21:00:00 (2 mei 2012, 21:00). Welk functie kan ik het beste gebruiken om hiermee te werken? Volgens mij is het geen standaard format?
Is dat niet vanaf PHP 5.3.0? Tenminste een boel functies ervan. Ik draai 5.2.xquote:Op vrijdag 18 mei 2012 12:48 schreef Light het volgende:
[..]
DateTime gaat dat gewoon snappen, daar hoef je niets moeilijks voor te doen.
Bijna alles werkt vanaf 5.2.0, volgens mij alleen DateTime::diff() niet. Maar die heb je niet nodig in dit gevalquote:Op vrijdag 18 mei 2012 13:50 schreef xaban06 het volgende:
[..]
Is dat niet vanaf PHP 5.3.0? Tenminste een boel functies ervan. Ik draai 5.2.x
1 | $now = strtotime("now"); |
1 2 3 | $date = new DateTime('2012-05-19T07:56:00'); $date2 = $date->format('Y-m-d H:i:s'); $date3 = strtotime($date2); |
1 | $future = strtotime("+30 minutes"); |
1 | if ($date3 > $now && $date3 < $future) { echo "date3 binnen 30 min"; } else { echo "niet binnen 30 min"; } |
Je kunt ook DateTime objecten met elkaar vergelijkenquote:Op zaterdag 19 mei 2012 08:16 schreef xaban06 het volgende:
Cool!
[ code verwijderd ]
[ code verwijderd ]
Dit weergeeft de tijd terug in unixtime.
Unixtime 'nu+30 minuten' doe ik met:
[ code verwijderd ]
Vervolgens vergelijk ik of $date3 valt tussen $now en $future:
[ code verwijderd ]
Ik ben totaal noob met tijd/data. Dus het zal vast wel makkelijk/sneller/beter kunnen. Of doe ik het toch correct?
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php date_default_timezone_set('Europe/Amsterdam'); // Voor het geval er geen tijdzone is ingesteld $now = new DateTime(); // of met 'now' als parameter $future = new DateTime('+30 minutes'); $date = new DateTime('2012-05-19T07:56:00'); if($now < $date && $date < $future) { echo '$date ligt in de aankomende 30 minuten.'; } else { echo '$date ligt niet in de aankomende 30 minuten.'; } ?> |
Ik zie dat dat ook werkt, thanks! had je ook eerder mee kunnen komen, had ik het gelijk alquote:Op zaterdag 19 mei 2012 09:02 schreef Light het volgende:
[..]
Je kunt ook DateTime objecten met elkaar vergelijken
[ code verwijderd ]
Ik heb hier geen PHP 5.2 om te testen of het daar ook werkt. Ik vermoed van wel
1 2 | $exp_time = '2012-05-23T02:00:00'; $tstamp = new DateTime($exp_time); |
1 | Catchable fatal error: Object of class DateTime could not be converted to string in.. |
Jouw code werkt bij mij gewoon:quote:Op zaterdag 19 mei 2012 18:05 schreef xaban06 het volgende:
Het volgende werkt niet:
[ code verwijderd ]
Foutmelding:
[ code verwijderd ]
Hoe moet het wel?
1 2 3 4 5 | <?php $exp_time = '2012-05-23T02:00:00'; $tstamp = new DateTime($exp_time); debug($tstamp); ?> |
1 2 3 4 5 6 7 8 | <?php DateTime Object ( [date] => 2012-05-23 02:00:00 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) ?> |
Pff, wat doe ik dan verkeerdquote:Op zaterdag 19 mei 2012 20:02 schreef Scorpie het volgende:
[..]
Jouw code werkt bij mij gewoon:
[ code verwijderd ]
Geeft als output:
[ code verwijderd ]
1 2 3 | <?php echo $exp_time2[0]; ?> |
1 | 2012-05-23T02:00:00 |
1 2 3 4 | <?php $tstamp = new DateTime($exp_time2[0]); echo $tstamp; ?> |
1 | Catchable fatal error: Object of class DateTime could not be converted to string in... |
Probeer eens print_r() in plaats van echo().quote:Op zaterdag 19 mei 2012 21:39 schreef xaban06 het volgende:
[..]
Pff, wat doe ik dan verkeerd
[ code verwijderd ]
output:
[ code verwijderd ]
[ code verwijderd ]
output:
[ code verwijderd ]
1 2 3 4 5 6 7 | <?php $tijd[] = '2012-05-23T02:00:00'; $date = new DateTime($tijd[0]); echo $date; ?> |
1 2 3 | # php time3.php Catchable fatal error: Object of class DateTime could not be converted to string in /root/time3.php on line 8 |
Je kan niet de class weergeven, je moet aangeven dat je het wil weergeven in de class, en in DateTime is dat format:quote:Op zondag 20 mei 2012 14:44 schreef xaban06 het volgende:
[ code verwijderd ]
output:
[ code verwijderd ]
Ik moet het volgens mij dus omzetten naar een string, echter is dat wel mogelijk en is dat wel juist?
1 2 3 4 5 6 7 | <?php $tijd[] = '2012-05-23T02:00:00'; $date = new DateTime($tijd[0]); echo $date->format('d-m-Y H:i:s'); ?> |
Klopt, had het al opgelost, thanks voor je post!quote:Op zondag 20 mei 2012 16:41 schreef Dalando het volgende:
[..]
Je kan niet de class weergeven, je moet aangeven dat je het wil weergeven in de class, en in DateTime is dat format:
[ code verwijderd ]
Ja kan, net als elke keer een nieuwe virtualhost toevoegen, maar het wordt al snel vervelend om dat bij elk project te doen.. en bij een format ben je weer al je instellingen kwijt.. nu werkt het automatisch zonder nadenken, ik creeer een app of ik doe een git clone, en gelijk doet ie het onder z'n eigen subdomeinquote:Op zondag 20 mei 2012 21:39 schreef boem-dikkie het volgende:
Kun je die files niet aanpassen met Windows? Heb op OSX gewoon een paar regeltjes toegevoegd en website.dev e.d. werkt nu prima.
Is makkelijk zelf te maken, probleem is een upload/progress bar. Heb jij misschien tips voor kant en klare systemen? Hoeft geen multiple files te ondersteunen.quote:Op maandag 21 mei 2012 11:08 schreef boem-dikkie het volgende:
Hebben jullie tips voor een multiple file upload? Script van Uploadify werkt bijzonder brak.
Ik wil eigenlijk dat de gebruiker met 1 uploadvenster meerdere files kan selecteren en dat deze in een /uploads/ map komen en met hun naam in de database.
plupload.comquote:Op maandag 21 mei 2012 11:33 schreef xaban06 het volgende:
[..]
Is makkelijk zelf te maken, probleem is een upload/progress bar. Heb jij misschien tips voor kant en klare systemen? Hoeft geen multiple files te ondersteunen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public function actionHandleUpload() { header("Content-type: text/html"); $output_filename = "src-" . uniqid() . ".jpg"; $output_file = Yii::getPathOfAlias('webroot') . '/var/tmp/' . $output_filename; if (isset($_FILES['qqfile'])) { move_uploaded_file($_FILES['qqfile']['tmp_name'], $output_file); } else { $input = fopen("php://input", "r"); $temp = tmpfile(); $realSize = stream_copy_to_stream($input, $temp); fclose($input); if ($realSize != $this->getSize()) return false; $target = fopen($output_file, "w"); fseek($temp, 0, SEEK_SET); stream_copy_to_stream($temp, $target); fclose($target); } echo "{success:false}"; return true; } |
LETTERLIJK de eerste hint bij google "SQL substring":quote:Op woensdag 23 mei 2012 10:46 schreef Cue_ het volgende:
Ik wil in een SQL query een select doen van een veld, maar daarvan wil ik de laatste teken weghalen. Wat in PHP dus een substr($veld, 0,-1) zou zijn, werkt niet in SQL.
De waardes in de kolom hebben ook geen vaste lengte, dus daar kan ik ook niets mee doen.
Iemand een idee?
via SUBSTR(quote:Op woensdag 23 mei 2012 10:46 schreef Cue_ het volgende:
Ik wil in een SQL query een select doen van een veld, maar daarvan wil ik de laatste teken weghalen. Wat in PHP dus een substr($veld, 0,-1) zou zijn, werkt niet in SQL.
De waardes in de kolom hebben ook geen vaste lengte, dus daar kan ik ook niets mee doen.
Iemand een idee?
Die had ik gezien jahquote:Op woensdag 23 mei 2012 10:47 schreef Scorpie het volgende:
[..]
LETTERLIJK de eerste hint bij google "SQL substring":
http://www.1keydata.com/sql/sql-substring.html
daar is ook een functie voor om die op te vragen.quote:Op woensdag 23 mei 2012 10:50 schreef Cue_ het volgende:
[..]
Die had ik gezien jah
Maar dan zit ik dus met het feit dat een -1 niet werkt om de laatste cijfer weg te halen
En ik niet kan opgeven wat de lengte is. omdat deze variabel is
Dan haal je het resultaat op en haal je er met substr() in PHP 1 vanaf? Waarom wil je dat uberhaupt in SQL oplossen? Klinkt alsof je weer zit te kloten met je datamodel meid.quote:Op woensdag 23 mei 2012 10:50 schreef Cue_ het volgende:
[..]
Die had ik gezien jah
Maar dan zit ik dus met het feit dat een -1 niet werkt om de laatste cijfer weg te halen
En ik niet kan opgeven wat de lengte is. omdat deze variabel is
Omdat ik even wat moet opschonen, een import functie van mij was wat verkeerd.quote:Op woensdag 23 mei 2012 10:52 schreef Scorpie het volgende:
Dan haal je het resultaat op en haal je er met substr() in PHP 1 vanaf? Waarom wil je dat uberhaupt in SQL oplossen? Klinkt alsof je weer zit te kloten met je datamodel meid.
en dit. Zoiets doe je normaal niet via SQL.quote:Op woensdag 23 mei 2012 10:52 schreef Scorpie het volgende:
[..]
Dan haal je het resultaat op en haal je er met substr() in PHP 1 vanaf? Waarom wil je dat uberhaupt in SQL oplossen? Klinkt alsof je weer zit te kloten met je datamodel meid.
Wil je toch doorgaan dan kan je http://www.1keydata.com/sql/sql-length.html gebruiken.
ah dan is het een ander verhaalquote:Op woensdag 23 mei 2012 10:54 schreef Cue_ het volgende:
[..]
Omdat ik even wat moet opschonen, een import functie van mij was wat verkeerd.
Hoeveel records moet je opschonen?quote:Op woensdag 23 mei 2012 10:54 schreef Cue_ het volgende:
[..]
Omdat ik even wat moet opschonen, een import functie van mij was wat verkeerd.
Uhm er zitten nu bijna 3000 records in, maar denk een kwart ervan.quote:Op woensdag 23 mei 2012 10:57 schreef Scorpie het volgende:
Hoeveel records moet je opschonen?
Laat me raden, er staat een spatie teveel achter elk ID?
En daarom is het principe OTAP uitgevonden.quote:Op woensdag 23 mei 2012 11:00 schreef Cue_ het volgende:
[..]
Uhm er zitten nu bijna 3000 records in, maar denk een kwart ervan.
Heb dubbele records met een ander id (laatste getal anders). Dus moet het even opschonen die nog niet zijn gekoppeld met andere data maar wel dubbel zijn.
En even importfunctie veranderen natuurlijk
Zeg maar van die leuke beginners importfoutjes.
Het is ook niet goed genoeg getest.quote:Op woensdag 23 mei 2012 11:02 schreef Scorpie het volgende:
En daarom is het principe OTAP uitgevonden.
Lekker dan, zit je met je zooitje.quote:
Ook eigen schuld. Maar daar leren we vanquote:
Wacht even, je test je eigen werk?quote:Op woensdag 23 mei 2012 11:05 schreef Cue_ het volgende:
[..]
Ook eigen schuld. Maar daar leren we van
Je test je werk tijdens het maken natuurlijk ook. En daar zitten wat verbeterpuntjes voor mij in.quote:
Kloptquote:Op woensdag 23 mei 2012 11:06 schreef Catch22- het volgende:
je hebt je tabel ook niet goed ingericht als zulke fouten kunnen ontstaan.
Ja leuk, maar daarna moet het getest worden door een collega, en als je een OTAP straat hebt ook nog eens door een tester, en dan nog een keer op Acceptatie, voordat het uberhaupt op Productie komt.quote:Op woensdag 23 mei 2012 11:07 schreef Cue_ het volgende:
[..]
Je test je werk tijdens het maken natuurlijk ook. En daar zitten wat verbeterpuntjes voor mij in.
OTAP hebben we niet. Wel een collega die het vervolgens test. Maar hebben daar geen hele procedures voor ofzo. Tja en daar is dit niet in opgevallen. Zoals ik zeg, letten we de volgende keer weer op.quote:Op woensdag 23 mei 2012 11:08 schreef Scorpie het volgende:
Ja leuk, maar daarna moet het getest worden door een collega, en als je een OTAP straat hebt ook nog eens door een tester, en dan nog een keer op Acceptatie, voordat het uberhaupt op Productie komt.
Zo kan je toch niet werken meid?quote:Op woensdag 23 mei 2012 11:10 schreef Cue_ het volgende:
[..]
OTAP hebben we niet. Wel een collega die het vervolgens test. Maar hebben daar geen hele procedures voor ofzo. Tja en daar is dit niet in opgevallen. Zoals ik zeg, letten we de volgende keer weer op.
Nee, tis m'n werk, en ik probeer wel te verbeteren. Ben hier binnengekomen zonder gedegen kennis. En de begeleiding is altijd geweest van 'probeer maar wat uit', 'knip en plakwerk'.. En daar kan je mee redden, maar is niet wat ik wil.quote:Op woensdag 23 mei 2012 11:09 schreef Catch22- het volgende:
ben jij net als RenRen- zo'n pruster die iets moet doen voor haar opleiding en er verder nooit wat mee gaat doen?
Loop anders maar even een maand of twee met mij mee.quote:Op woensdag 23 mei 2012 11:12 schreef Cue_ het volgende:
[..]
Nee, tis m'n werk, en ik probeer wel te verbeteren. Ben hier binnengekomen zonder gedegen kennis. En de begeleiding is altijd geweest van 'probeer maar wat uit', 'knip en plakwerk'.. En daar kan je mee redden, maar is niet wat ik wil.
Dus begin binnenkort een cursus webdevolopment om op dat gebied wat meer basisstructuur op te doen. En mbt databases zal er ook zeker wel wat komen.
Klopt, ik moet ook meer structuur erin krijgen en gewoon eens wat beter nadenken ipv gewoon doen en maar zien. Dat leer ik juist van dit soort fouten.quote:Op woensdag 23 mei 2012 11:14 schreef Catch22- het volgende:
Ja dat snap ik wel, ik ben ook onopgeleid begonnen, dus je gaat mijn pad bewandelen. Alleen moet je gewoon duidelijk beredeneren wat je doet en wat er mis zou kunnen gaan.
En een import doe je niet met 3000 tegelijk testen, je doet 1 of 10 rijen en dan kijk je of het goed gaat.
1 | geknipte data |
Heb je een puntquote:Op woensdag 23 mei 2012 11:44 schreef ursel het volgende:
Daarnaast zou ik ook niet dit soort "persoonlijke" zaken op een forum zetten.
quote:
Ik zal hier eens induiken.quote:Op woensdag 23 mei 2012 11:42 schreef Scorpie het volgende:
Als ik dit soort zaken moet berekenen werk ik meestal met hash vergelijkingen. Dat wil zeggen; hash een record voordat je hem opslaat, sla de hash apart op en elke nieuwe record vergelijk je met de hashes die je apart hebt opgeslagen. Hash bestaat al? Record is duplicaat -> niks doen.
Maar de kolommen zelf zijn dus samengevoegd niet uniekquote:Op woensdag 23 mei 2012 12:11 schreef Pizzalucht het volgende:
Inderdaad gewoon de kolommen die samen uniek moeten zijn combineren tot een hash en dan vergelijken.
md5( $naam . '.' . $telefoonnummer )
Simpel zat, en het werkt
Hm?quote:Op woensdag 23 mei 2012 12:13 schreef Cue_ het volgende:
[..]
Maar de kolommen zelf zijn dus samengevoegd niet uniek
Er kunnen twee/drie identieke regels in het bestand staan (ja snap ook niet waarom) . En moet ze dan ook alle twee hebben. Maar bij de volgende import, het aangevulde bestand, kom ik ze dus weer tegen, maar dan wil ik ze niet.quote:
Waarom parse je dat csv bestand dan niet eerst met PHP om dubbele regels eruit te halen?quote:Op woensdag 23 mei 2012 12:39 schreef Cue_ het volgende:
Ik heb een CSV bestand met data die ik van een bedrijf krijg. In dat bestand komt het voor dat er identieke regels in staan.
Dus bijvoorbeeld
regel 1: ab ; 43 ; ds ; 565
regel 2: ab ; 43 ; ds ; 565
regel 3: sz ; 43 ; ss ; 454
Hoe je de gegevens ook samenvoegt, je krijgt dus geen unieke ID
Deze regels importeer ik in een tabel. alle drie de regels dus.
een paar dagen later krijgen we een nieuw CSV bestand die bovenstaande drie regels bevat + extra data:
Dus regel 1,2,3 + regel 4,5,6
De vraag is nu. Als ik dus dat CSV bestand, die t/m regel 6 bevat, importeer, ik zie dat regel 1 /tm 3 reeds aanwezig zijn in de tabel en dat ik dus alleen regel 4 t/m 6 daadwerkelijk naar de tabel moet schrijven.
Omdat ik die dubbele regels wel moet hebben. Dus in mijn voorbeeld heb ik regel 1 en 2 ook echt nodig.quote:Op woensdag 23 mei 2012 12:53 schreef stefanhaan het volgende:
Waarom parse je dat csv bestand dan niet eerst met PHP om dubbele regels eruit te halen?
/Gebruik gewoon een programma om beide CSV files naast elkaar te zetten om de verschillen te zien, dan kun je de oude data uit het nieuwe CSV bestand halen.quote:Op woensdag 23 mei 2012 12:53 schreef Cue_ het volgende:
[..]
Omdat ik die dubbele regels wel moet hebben. Dus in mijn voorbeeld heb ik regel 1 en 2 ook echt nodig.
Dergelijke imports zal 2x in de week gedaan worden door computerleken. Die gaan dat soort dingen nog niet echt ernaast doen.quote:Op woensdag 23 mei 2012 12:55 schreef stefanhaan het volgende:
/Gebruik gewoon een programma om beide CSV files naast elkaar te zetten om de verschillen te zien, dan kun je de oude data uit het nieuwe CSV bestand halen.
Zo moeilijk is het niet
Dan parse je eerst de oude CSV samen met de nieuwe en strip je die data uit de nieuwe CSV en dat doe je dan importen.quote:Op woensdag 23 mei 2012 12:57 schreef Cue_ het volgende:
[..]
Dergelijke imports zal 2x in de week gedaan worden door computerleken. Die gaan dat soort dingen nog niet echt ernaast doen.
De data van regel 1 en regel 2 zijn identiek. Er is dus geen enkele reden om mijn oplossing niet te gebruiken.quote:Op woensdag 23 mei 2012 12:39 schreef Cue_ het volgende:
Ik heb een CSV bestand met data die ik van een bedrijf krijg. In dat bestand komt het voor dat er identieke regels in staan.
Dus bijvoorbeeld
regel 1: ab ; 43 ; ds ; 565
regel 2: ab ; 43 ; ds ; 565
regel 3: sz ; 43 ; ss ; 454
Hoe je de gegevens ook samenvoegt, je krijgt dus geen unieke ID
Deze regels importeer ik in een tabel. alle drie de regels dus.
een paar dagen later krijgen we een nieuw CSV bestand die bovenstaande drie regels bevat + extra data:
Dus regel 1,2,3 + regel 4,5,6
De vraag is nu. Als ik dus dat CSV bestand, die t/m regel 6 bevat, importeer, ik zie dat regel 1 /tm 3 reeds aanwezig zijn in de tabel en dat ik dus alleen regel 4 t/m 6 daadwerkelijk naar de tabel moet schrijven.
Tis dat mijn internet hier op school zo kut is. Ben een voorbeeld aant maken.quote:
tnxquote:Op woensdag 23 mei 2012 13:13 schreef stefanhaan het volgende:
Tis dat mijn internet hier op school zo kut is. Ben een voorbeeld aant maken.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $old = file_get_contents("csvold.csv"); $new = file_get_contents("csvnew.csv"); echo "Old:<br/>".$old."<br/><br/>New:<br/>".$new; echo "<br/><br/>Old csv parsed:<br/>"; if (($handle = fopen("csvold.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); for ($c=0; $c < $num; $c++) { echo $data[$c] . "<br/>"; $new = str_replace($data[$c], "", $new); } } fclose($handle); } echo "<br/><br/>Combined new + old:<br/>".preg_replace("/\s+/", "<br/>",$new); |
Whoops die hoorde er niet bijquote:
Daar snijd je een punt aan.quote:Op woensdag 23 mei 2012 11:09 schreef Catch22- het volgende:
ben jij net als RenRen- zo'n pruster die iets moet doen voor haar opleiding en er verder nooit wat mee gaat doen?
Geef ze aan zou ik zeggen.quote:Op woensdag 23 mei 2012 13:21 schreef stefanhaan het volgende:
Mijn internet is hier zo waardeloos dat ik niks kan uploaden naar mijn server via FTP
Klote nerds die aant gamen zijn
Webdevelopment kan je ook applicaties maken zoals een eigen CMS of een uitgebreide webapplicatie. Hierin kan je zo klein / groot bezig gaan als je wil . Statisch of Dynamisch.quote:Op donderdag 24 mei 2012 15:12 schreef Ofyles2 het volgende:
[..]
Daar snijd je een punt aan.
Ik beschouw webdevelopment net als radio-DJ worden. Het komt aan op fingerspitzengefühl en liefde voor het vak. Het maakt niet uit of je kan programmeren vanaf je 6e of 18e.
Daarvoor zou je de functie getUrl() aan kunnen passen en zorgen dat je altijd de hoofdcategorie gebruikt. Mage_Catalog_Model_Product extenden en daarin de functie getUrl() plaatsen en dan de originele waarde manipuleren.quote:Op donderdag 24 mei 2012 12:23 schreef Schepseltje het volgende:
Zijn hier nog Magento gurus? Ik probeer het volgende te bereiken, stel ik heb een product "Adidas Sneaker", deze staat zowel onder de categorie "Sale" als de categorie "Sneakers". Als je vanuit de categorie Sneakers op de schoen klikt wordt de url /sneakers/adidas-sneaker.html en als je vanuit Sale op de schoen klikt wordt de URL /sale/adidas-sneaker.html. (verder is de schoen altijd ook nog bereikbaar via /adidas-sneaker.html)
Wat is de netste manier om Magento te vertellen dat elk product één hoofdcategorie heeft die moet terugkomen in de URL en breadcrumbs?
Ik weet dat er zoiets bestaat als canonical URL, maar daarmee los je alleen het SEO-aspect op, de gebruiker ziet nog steeds verschillende categorieen in de URL en breadcrumbs.
getUrl bestaat niet volgens mij, getProductUrl() wel, maar dat is geen standaardmethode maar een magic getter, in feite is het gewoon een attribuut.quote:Op donderdag 24 mei 2012 15:47 schreef Civilian het volgende:
[..]
Daarvoor zou je de functie getUrl() aan kunnen passen en zorgen dat je altijd de hoofdcategorie gebruikt. Mage_Catalog_Model_Product extenden en daarin de functie getUrl() plaatsen en dan de originele waarde manipuleren.
Ja ik ken hele grote bureaus die alleen maar Drupal doen.. op een kleine hack/instelling na komt er geen code bij kijken.. maargoed bij mij is de lol van drupal er wel een beetje af.. zodra je dingen wil doen die Drupal niet standaard ondersteund heb je een probleem.. . zelfde verhaal met wordpress/joomla/magento/etcquote:Op donderdag 24 mei 2012 15:17 schreef cablegunmaster het volgende:
[..]
Webdevelopment kan je ook applicaties maken zoals een eigen CMS of een uitgebreide webapplicatie. Hierin kan je zo klein / groot bezig gaan als je wil . Statisch of Dynamisch.
En minder kostbaar, wat klanten ook wel op prijs stellen. Letterlijk en figuurlijk.quote:Op vrijdag 25 mei 2012 13:07 schreef KomtTijd... het volgende:
Je kunt toch zelf modules maken? Nog altijd een stuk makkelijker dan een compleet eigen CMS maken.
Microsoft Dynamics CRM. Werkt als een zonnetje.quote:Op donderdag 24 mei 2012 15:07 schreef KomtTijd... het volgende:
Zijn hier mensen die ervaring hebben met CRM software?
Ik werk sinds kort met VtigerCRM (een fork van SugarCRM), maar word hier af en toe een beetje droevig van...
Ja, het is een Magic getter. Maar die kan je heel makkelijk als functie in het productmodel zetten en dan behandelt hij het gewoon als een functie.quote:Op vrijdag 25 mei 2012 13:01 schreef Schepseltje het volgende:
[..]
getUrl bestaat niet volgens mij, getProductUrl() wel, maar dat is geen standaardmethode maar een magic getter, in feite is het gewoon een attribuut.
Ik heb het nu volgens de lelijke manier opgelost, een nieuw attribuut gemaakt bij elk product, en dan met een cronjob de juiste URL genereren en in dat attribuut zetten. Vervolgens getProductUrl() vervangen door m'n eigen helper functie..
Ah ok das nog wel te proberenquote:Op vrijdag 25 mei 2012 15:57 schreef Civilian het volgende:
[..]
Ja, het is een Magic getter. Maar die kan je heel makkelijk als functie in het productmodel zetten en dan behandelt hij het gewoon als een functie.
Dat is ook het hele punt van die magic functie, dat is een soort van fallback wanneer er een functie wordt aangeroepen die niet bestaat.
Dat ligt meer aan ervaring. Met Drupal kan je eigenlijk alles aanpassen, als je weet hoe.quote:Op vrijdag 25 mei 2012 13:05 schreef Schepseltje het volgende:
[..]
Ja ik ken hele grote bureaus die alleen maar Drupal doen.. op een kleine hack/instelling na komt er geen code bij kijken.. maargoed bij mij is de lol van drupal er wel een beetje af.. zodra je dingen wil doen die Drupal niet standaard ondersteund heb je een probleem.. . zelfde verhaal met wordpress/joomla/magento/etc
Gewoon een degelijk framework bevalt me het beste, dan ben je tenminste echt iets aan het maken in plaats van een kant en klaar ding configureren..
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 Product { Global $db; function __construct() { setProductInfo($_GET['id']); } /** * Idee hiervan is dat hij de product info opslaat , * het ID en als er geen ID is van het product dat hij zichzelf vernietigd. */ function setProductInfo($id){ $this->product_info = $db->fetchAssoc($db->query("Select * from products_ where id = ' ".$id." ' ")); if(!empty($this->product_info['id'])){ return true; }else{ destroy(); } function destroy(){ unset($this); return true; } } ?> |
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 | <?php namespace DatabaseEntitiesKeuken; class Product { //inhoud function getName() { return "Test1"; } }; namespace DatabaseEntitiesStofruimte; class Product { // inhoud function getName() { return "Test2"; } }; use DatabaseEntitiesKeukenProduct; $product = new Product(); echo $product->getName(); use DatabaseEntitiesStofruimteProduct; $product_stof = new Product(); echo $product_stof->getName(); ?> |
Ja ik heb ook meerdere drupal sites gemaakt, en inderdaad je kunt het zo aanpassen als je wilt, net als elk opensource pakket, maar het is absoluut niet ideaal. De code is niet OOP en erg rommelig en inefficient (maar daarmee wel weer flexibel).quote:Op vrijdag 25 mei 2012 17:04 schreef Pizzalucht het volgende:
[..]
Dat ligt meer aan ervaring. Met Drupal kan je eigenlijk alles aanpassen, als je weet hoe.
De documentatie van Drupal is over het algemeen ook erg goed.
Maar als je niet verder komt dan een module installeren, aanzetten en er dan achterkomen dat het niet precies is wat je zoekt, en dan stopt met proberen, dan is Drupal inderdaad niks voor je.
Ik werk ook bij een bedrijf waar we bijna alleen maar Drupal doen, en het is veel meer dan alleen "een kleine hack/aanpassing".
Nee, waarom zou je dat willen?quote:Op vrijdag 25 mei 2012 18:55 schreef cablegunmaster het volgende:
Ik vraag me af , ik zit nu heel erg in OO Php te verdiepen en nu is mij de vraag hoe ik het volgende idee moet uitvoeren, ik zit nu met een idee om al mijn Producten in klasses te maken zodat het makkelijker is om het uit te voeren / aan te passen.
Kan een Object zichzelf vernietigen? ,
Dat zou kunnen maar het is niet hoe het hoort, een class moet zo zelfstandig mogelijk zijn. Je kunt OF de databasegegevens in de class zelf definieren (als je het alleen daar nodig hebt) OF je kunt de gegevens opgeven bij het oproepen van de class.quote:tweede vraag als ik een klasse heb genaamd $db en die wil ik overal gebruiken is Global $db; voldoende? of kan ik in de $db klasse iets doen zodat ik het niet perse in elke functie opnieuw hoef te definiëren.
Nieuwschierigheid . Ik probeer nu iets op te zetten in een soort van MVC model.quote:Op vrijdag 25 mei 2012 20:26 schreef Schepseltje het volgende:
Nee, waarom zou je dat willen?
Dat zou kunnen maar het is niet hoe het hoort, een class moet zo zelfstandig mogelijk zijn. Je kunt OF de databasegegevens in de class zelf definieren (als je het alleen daar nodig hebt) OF je kunt de gegevens opgeven bij het oproepen van de class.
Ik denk dat je het beste met een framework kan beginnen, dan wordt je gedwongen om op de juiste manier te werken en snap je het OOP concept veel sneller.
Hoe echo je het? Want je kan de tijd instellen die op het huidige moment staat ingesteld.quote:Op vrijdag 25 mei 2012 21:58 schreef boem-dikkie het volgende:
Tof Sitethief, ook even kijken.
Kan het trouwens aan een PHP server liggen hoe strtotime reageert? Als ik een strtotime functie gebruik als ik lokaal werk doet hij precies wat ik wil, namelijk gewoon de datum 25-05-2012 naar een unix timestamp converteren, als ik datzelfde doe op mijn webserver maakt hij er opeens 02-11-2030 van.
Ik gooi de userinput met de strtotime functie in de database.quote:Op vrijdag 25 mei 2012 22:02 schreef cablegunmaster het volgende:
[..]
Hoe echo je het? Want je kan de tijd instellen die op het huidige moment staat ingesteld.
Probeer eens op beide server een simpele echo date uit te voeren en kijk of dat misgaat. of klopt.
Vervolgens weet je hierdoor op welke tijd Je server staat. Of dit aan te passen is mogelijk. Maar ik weet niet zo snel waar.
Kijk anders even hiernaar: [SOLVED] Php date function wrong time
Weet ik , tis een examplequote:
Ik snap OO programeren In Java beter dan in Php daar heb ik al een MVC model gebouwd. Hierbij zit ik nog te kijken of ik in Phpstorm* een eigen MVC kan opzetten. Zit niet zo denigrerend te doenquote:Op zaterdag 26 mei 2012 10:56 schreef boem-dikkie het volgende:
Ben je al zo ver dat je MVC begrijpt? Anders raad ik de tutorial van Zend Framework aan, ook al ga je daar niks mee doen het is wel een goede manier om te begrijpen hoe een MVC model en OOP werkt in een 'echte' applicatie in plaats van een auto die rood is en kan rijden.
Probeer alleen maar te helpen hoor.quote:Op zaterdag 26 mei 2012 11:09 schreef cablegunmaster het volgende:
[..]
Ik snap OO programeren In Java beter dan in Php daar heb ik al een MVC model gebouwd. Hierbij zit ik nog te kijken of ik in Phpstorm* een eigen MVC kan opzetten. Zit niet zo denigrerend te doen
Ik dank je voor je hulp, als je vragen hebt stel ze.quote:Op zaterdag 26 mei 2012 11:20 schreef boem-dikkie het volgende:
[..]
Probeer alleen maar te helpen hoor.
Ik zit niet zo in de PHP, maar vanuit een algemeen genomen perspectief kan ik zeggen dat er niets mis is met globale variabelen. Mits je het singleton principe in stand houdt. Dus alleen globaal declareren als je zeker weet dat er altijd maar één instantie zal zijn.quote:Op zaterdag 26 mei 2012 11:09 schreef cablegunmaster het volgende:
[..]
...of onhandig waren) Vanuit de gebruikers opinie. Weet nu niet of hier een waarheid in zit?
Daar zat ik eerder naar te kijken.
Duidelijk dat is ook het geval!quote:Op zaterdag 26 mei 2012 11:42 schreef Devv het volgende:
[..]
Ik zit niet zo in de PHP, maar vanuit een algemeen genomen perspectief kan ik zeggen dat er niets mis is met globale variabelen. Mits je het singleton principe in stand houdt. Dus alleen globaal declareren als je zeker weet dat er altijd maar één instantie zal zijn.
Wat is er anders aan MVC in Java dan in PHP?quote:Op zaterdag 26 mei 2012 11:09 schreef cablegunmaster het volgende:
[..]
Ik snap OO programeren In Java beter dan in Php daar heb ik al een MVC model gebouwd. Hierbij zit ik nog te kijken of ik in Phpstorm* een eigen MVC kan opzetten. Zit niet zo denigrerend te doen
Het heeft als nadeel dat iedere method waar je "global $db;" gebruikt, potentieel je database instance kan veranderen door iets anders. Dan krijg je fouten die heel lastig te vinden zijn. Als je in je model een setter hebt voor de database, kun je daar valideren dat je echt een database object krijgt. En daarna heb je een reference naar het object, daar kan de rest van de wereld niet bij.quote:Vragen die ik had waren:
1. Ik heb een DB klasse moet ik daarvoor bij elke classe , functie perse Global $db neerzetten? of is GLOBALS['db'] Daarvoor een betere oplossing? (Ik lees overal dat Globals "onveilig" of onhandig waren) Vanuit de gebruikers opinie. Weet nu niet of hier een waarheid in zit?
Smarty (of een ander templating systeem) hoort in de view.quote:2. Als ik eenmaal bezig ben zat ik mijn structuur uit te denken, om een goede basis te creëren. met $_POST en afhandeling van $_GET. (filestructuur).
3. Hoe verwerk ik Smarty . (vermoedelijk met behulp van de View)
1. geen idee , gewoon nog niet mee gewerkt.quote:Op zaterdag 26 mei 2012 11:55 schreef Light het volgende:
Wat is er anders aan MVC in Java dan in PHP?
[..]
Het heeft als nadeel dat iedere method waar je "global $db;" gebruikt, potentieel je database instance kan veranderen door iets anders. Dan krijg je fouten die heel lastig te vinden zijn. Als je in je model een setter hebt voor de database, kun je daar valideren dat je echt een database object krijgt. En daarna heb je een reference naar het object, daar kan de rest van de wereld niet bij.
[..]
Smarty (of een ander templating systeem) hoort in de view.
Ik heb mezelf schromelijk overschat.quote:Op zaterdag 26 mei 2012 10:56 schreef boem-dikkie het volgende:
Ben je al zo ver dat je MVC begrijpt?
De structuren zijn gewoon hetzelfdequote:Op zaterdag 26 mei 2012 12:08 schreef cablegunmaster het volgende:
[..]
1. geen idee , gewoon nog niet mee gewerkt.
quote:2. Dus eigenlijk in de controller Pseudo: Setdb($db) functie. if(get_class($db) == "db"); true false.
en dan het toepassen. met Getdb(); in elke klasse ?
1 2 3 4 5 6 7 8 9 | <?php private $db; public function setDb(MyDatabaseClass $db) { $this->db = $db; } public function getDb() { return $this->db; } ?> |
Dat vind ik dus het grote nadeel van PHP, loose typing.quote:Op zaterdag 26 mei 2012 11:55 schreef Light het volgende:
[..]
Het heeft als nadeel dat iedere method waar je "global $db;" gebruikt, potentieel je database instance kan veranderen door iets anders.
Da's een nadeel, ben ik met je eens. Maar 't is een eigenschap van de taal waar je dus gewoon mee moet werken (of je zoekt een andere taal op om mee te werken).quote:Op zaterdag 26 mei 2012 12:20 schreef Devv het volgende:
[..]
Dat vind ik dus het grote nadeel van PHP, loose typing.
Java is daar weer makkelijker in , php is daar loosse in. , misschien ook de reden dat ik somsquote:Op zaterdag 26 mei 2012 12:24 schreef Light het volgende:
[..]
Da's een nadeel, ben ik met je eens. Maar 't is een eigenschap van de taal waar je dus gewoon mee moet werken (of je zoekt een andere taal op om mee te werken).
1 2 3 4 5 | <?php $array = Array(); $string = (string) $waarde; $integer = (int) $integer; ?> |
Leg eens uit wat was je idee?quote:Op zaterdag 26 mei 2012 14:11 schreef Quir het volgende:
Iemand eerder meegemaakt dat fopen aangeroepen in een class destructor vervelend doet?
Ik vroeg het inderdaad zonder toelichting omdat ik dacht dat het een bug zou zijn. Had die pagina ook al gevonden, maar die is uit 2004/2007, dus ik hoopte dat het inmiddels wel gefixt zou zijn. Nog steeds gissen of dat de dwarsligger is of niet.quote:Op zaterdag 26 mei 2012 14:47 schreef Devv het volgende:
Misschien heb je hier iets aan: Bug #29167 fopen works differently in a constructor vs. a destructor.
Ik heb een cache functie die een kopie uit de cache doorsluist wanneer er een (niet-verlopen) beschikbaar is, zoniet, roept-ie ob_start() aan en set hij een variabele op True.quote:
1 2 3 4 5 6 | <?php if ($this->cacheUsage) { $this->writeToFile($this->cachePath . $this->cacheName . '.html', 'w', ob_get_contents()); ob_end_flush(); } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php public function writeToFile($path, $mode, $data) { $success = 'Error'; if ($file = fopen($path, $mode)) { if (fwrite($file, $data)) { fclose($file); $success = 'Success!'; goto End; } fclose($file); $success = 'Failed to write'; goto End; } $success = 'Failed to open file'; End: return $success; } ?> |
1 | Warning: fopen(Cache/pagina.html) [function.fopen]: failed to open stream: No such file or directory |
Waarom zou je dit willen? Had even wat posts doorgelezen, maar snap niet je opzet.quote:Op zaterdag 26 mei 2012 15:11 schreef cablegunmaster het volgende:
Ik lees als je unset($Object); gebruikt de destructor wordt aangeroepen.
andere optie: register_shutdown_function("Object");
Nog een idee fopen in de constructor aanroepen en vervolgens fclose(); gebruiken in de destructor.
of werkt fwrite niet in de destructor?
Bron:
http://stackoverflow.com/(...)er-shutdown-function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | <?php class Game { // Holds player name public $players = array(); // Game id database public $game_id; // Minimum start bid public $minimum_bid = 3; private $pdo; private $rules; // Holds turns public $turns = array(); public $bids = array(); // Sets game Id public function __construct(Array $players, Rules $rules) { $this->players = $players; $this->pdo = new Database(); $this->rules = $rules; } // Removes a player when he loses connection or leaves the game public function removePlayer($player = array()) { if(array_key_exists($player['name'], $this->players)) { unset($this->players[$player['name']]); } } public function nextTurn() { $stop = false; foreach($this->players as $player) { if($player == $this->player_turn) $stop = true; if($stop) { $this->playerTurn = $player; break; } } } public function setBid($name, $bid) { $this->bids[$name] = $bid; } public function __sleep() { $this->pdo = null; return array('players','game_id', 'bids', 'minimum_bid', 'turns', 'rules'); } } ?> |
Ik ben bezig met een uitgebreide site om te bouwen daarom mijn terughoudenheid om alles goed te maken . (beetje onderzoek wat wel en niet kan )quote:
unset() zorgt er niet direct voor dat de destructor wordt aangeroepen. Dat gebeurt alleen als de garbage collector het object opruimt. En dat gebeurt alleen als geen referenties meer zijn naar het object, maar dan hoeft het nog niet meteen te gebeuren.quote:Op zaterdag 26 mei 2012 15:11 schreef cablegunmaster het volgende:
Ik lees als je unset($Object); gebruikt de destructor wordt aangeroepen.
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 | <?php class Cache { public $cacheUsage; function __construct() { $this->cacheUsage = False; } public function callCache($expiration) { if (file_exists('Page.html') && (time()-filemtime('Page.html')) < $expiration) { include 'Page.html'; $this->cacheUsage = False; exit(); } else { ob_start(); $this->cacheUsage = True; } } protected function writeToFile($path, $mode, $data) { $file = fopen($path, $mode); fwrite($file, $data); fclose($file); } function __destruct() { if ($this->cacheUsage) { $this->writeToFile('Page.html', 'w', ob_get_contents()); ob_end_flush(); } } } $CacheClass = new Cache(); $CacheClass->CallCache(30); echo 'Hallo!'; ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php class websiteController { private $model; private $view; public function __construct($model,$view) { $this->model = $model; $this->view = $view; } public function listenerA($test){ $this->model->doeIets($test); } } ?> |
1 2 3 4 | <?php //bevat $controller = websitecontroller object $controller->listenerA($_GET['test']); ?> |
Ik zit nu na te denken hoe ik de $_POST , $_GET afhandeling moet uitvoeren.quote:
Ik krijg nu heel veel ingewikkelde code in google als ik dit zoek.quote:Op dinsdag 29 mei 2012 14:48 schreef Scorpie het volgende:
Je wil dus $_GET en $_POST acties koppelen aan je controller? Kijk eens naar een RequestDispatcher routine.
het hoeft niet naar een andere pagina toe.quote:Request Dispatcher is used to forward a request to another page.
bron: http://www.hscripts.com/tutorials/jsp/examples/example2.php
Dit vind ik als ik op de request dispatcher zoek, beetje ingewikkeld.quote:
1 2 3 4 5 6 7 8 | <?php //kort zonder sanitize, voorbeeld. x20 if(isset($_POST['waarde'])) { $waarde = $_POST['waarde']; $controller->listenA($waarde); } ?> |
Ik ga dit eens proberen uit te vogelen .quote:
Globals en singelton heb ik altijd al erg onelegant gevonden.quote:
Zelf iets te maken ?quote:Op dinsdag 29 mei 2012 22:10 schreef Schepseltje het volgende:
Waarom een controller class schrijven als er zoveel frameworks zijn die al een werkende, elegante en geteste implementatie hebben?
Waarom niet? Dit werkt best goed .quote:
Ja dat klopt , maar soms heb je zelf meer inzicht hoe je de ferrari kan fine tunen op je eigen behoefte's waardoor je meer weet hoe een ferrari in elkaar steekt dan dat je alleen maar de ferrari gebruikt.quote:Op dinsdag 29 mei 2012 23:45 schreef Schepseltje het volgende:
tsja je kunt een kant-en-klare ferrari gebruiken of zelf in je schuur iets in elkaar timmeren
Das natuurlijk gelul. Iemand die een framework gebruikt kan net zo goed op de hoogte zijn van het framework en de daarbij behorende principes. Sterker nog, ik durf te wedden dat diegene vele malen beter weet waar hij mee bezig is dan iemand die zijn eigen framework in elkaar moet stampen en daarbij al valt over een simpel Dispatcher principe.quote:Op woensdag 30 mei 2012 00:06 schreef cablegunmaster het volgende:
[..]
Ja dat klopt , maar soms heb je zelf meer inzicht hoe je de ferrari kan fine tunen op je eigen behoefte's waardoor je meer weet hoe een ferrari in elkaar steekt dan dat je alleen maar de ferrari gebruikt.
Ik vind het gebruik van singletons juist ideaal om de complexiteit van een programma terug te brengen.quote:Op dinsdag 29 mei 2012 20:59 schreef wipes66 het volgende:
[..]
Globals en singelton heb ik altijd al erg onelegant gevonden.
En wat je in je schuur timmert wordt uiteindelijk 'n lada oid.quote:Op dinsdag 29 mei 2012 23:45 schreef Schepseltje het volgende:
tsja je kunt een kant-en-klare ferrari gebruiken of zelf in je schuur iets in elkaar timmeren
En omdat je moet kunnen samenwerken.. Dan wil je kunnen zeggen: "dit is gemaakt met frameworkX op deze URL kun je de documentatie vinden." en niet "dit heb ik vorig jaar in elkaar gezet, het werkt ongeveer zo en zo, moet je maar even uitproberen"quote:Op woensdag 30 mei 2012 18:27 schreef Devv het volgende:
Een eigen API in elkaar knutselen is leuk voor op de zondagmiddag. Maar in het bedrijfsleven gebruik je toch vaak kant-en-klare oplossingen, omdat het niet je core-business is om de fundering te leggen.
Zo, jij bent vriendelijk tegen een beginner.quote:Op woensdag 30 mei 2012 00:15 schreef Scorpie het volgende:
[..]
Das natuurlijk gelul. Iemand die een framework gebruikt kan net zo goed op de hoogte zijn van het framework en de daarbij behorende principes. Sterker nog, ik durf te wedden dat diegene vele malen beter weet waar hij mee bezig is dan iemand die zijn eigen framework in elkaar moet stampen en daarbij al valt over een simpel Dispatcher principe.
Dat is een van de voornaamste redenen ook ja, zeker als je commercieel bezig bent.quote:Op woensdag 30 mei 2012 19:21 schreef Schepseltje het volgende:
[..]
En omdat je moet kunnen samenwerken.. Dan wil je kunnen zeggen: "dit is gemaakt met frameworkX op deze URL kun je de documentatie vinden." en niet "dit heb ik vorig jaar in elkaar gezet, het werkt ongeveer zo en zo, moet je maar even uitproberen"
Staat je vrij om niet te updatenquote:Op woensdag 30 mei 2012 20:46 schreef GlowMouse het volgende:
Daar staat tegenover dat er voor een framework updates uitkomen, waardoor je code mogelijk niet meer werkt. Als je tegen een bug in het framework aanloopt, is het lastig om alleen een fix voor die bug door te voeren.
Een beginner die claimt alles te weten ja. Niks mis met wat tough love. En zo onaardig was het niet bedoeld.quote:Op woensdag 30 mei 2012 20:21 schreef Quir het volgende:
Of dat, of je zorgt dat je weet waar je aan begint, en vooral waar je mee bezig bent.
Ik vind het zelf veel prettiger om zelfs iets geschreven te hebben, voelt gewoon prettiger aan. Binnen voor iemand roept dat dat bullshit is.
[..]
Zo, jij bent vriendelijk tegen een beginner.
Depends. Werk al tien jaar met frameworks en de meeste pijn zit hem in de major releases qua upgrade en de nasty hacks die na een update niet meer werken. Als je volgens de methodologie van het framework werkt zit je meestal wel veilig.quote:Op woensdag 30 mei 2012 20:46 schreef GlowMouse het volgende:
Daar staat tegenover dat er voor een framework updates uitkomen, waardoor je code mogelijk niet meer werkt. Als je tegen een bug in het framework aanloopt, is het lastig om alleen een fix voor die bug door te voeren.
Mja als je een bug vindt meld je het op de betreffende bugtracker en als je geluk hebt wordt het gefixt zonder dat je iets hoeft te doen. Maar mijn ervaring is dat de grote frameworks al door zo gigantisch veel mensen zijn gebruikt en getest dat alle grote bugs er vrijwel uit zijn. Als je zelf iets in elkaar hangt is het een ander verhaal..quote:Op woensdag 30 mei 2012 20:46 schreef GlowMouse het volgende:
Daar staat tegenover dat er voor een framework updates uitkomen, waardoor je code mogelijk niet meer werkt. Als je tegen een bug in het framework aanloopt, is het lastig om alleen een fix voor die bug door te voeren.
Een compleet eigen framework bouwen met als reden dat je bij een bestaand framework het risico loopt een bug te moeten fixen. Goeie.quote:Op woensdag 30 mei 2012 20:46 schreef GlowMouse het volgende:
Daar staat tegenover dat er voor een framework updates uitkomen, waardoor je code mogelijk niet meer werkt. Als je tegen een bug in het framework aanloopt, is het lastig om alleen een fix voor die bug door te voeren.
Locate the error messages in the alert log.quote:Op vrijdag 1 juni 2012 15:59 schreef Cue_ het volgende:
Iemand ervaring met Oracle Deadlocks? Ik moet hem zien te omzeilen..
Lolquote:Op vrijdag 1 juni 2012 16:23 schreef cablegunmaster het volgende:
Locate the error messages in the alert log.
Locate the relevant trace file(s).
Identify the SQL statements in both the current session and the waiting session(s).
Use these SQL statements to identify the particular piece of code that is having problems.
Alter the appliation code to prevent deadlocks by always locking rows in the tables in the same order.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php class Demo{ private $db; private $model public function __construct($model){ $this->model = $model; $this->db = $this->model->getDB(); } //alle andere functies. } // of kan dit ook? class Demo extends Model{ public function __construct(){ parent::__construct(); parent::getDB(); // functie die in model zit. } } ?> |
De tweede methode is in mijn optiek de enige juiste aanpak. De eerste methode zou voor mij al reden voor ontslag zijn.quote:Op vrijdag 1 juni 2012 19:48 schreef cablegunmaster het volgende:
Kort vraagje,
ik heb nu Crumblepath als een Klasse en nu wilde ik het model meegeven in de __construct($model) om vervolgens daarvan uit de $db (database klasse) connecties te gebruiken. Nu zit ik qua logica in de knoop en vraag ik me af of ik beter Extends Model kan doen of dat ik elke klasse nu apart het $db mee moet geven.
[ code verwijderd ]
Enige probleem dat ik nu heb dat pagina's aanpassen irritant gaat .quote:Op zaterdag 2 juni 2012 01:36 schreef Devv het volgende:
De tweede methode is in mijn optiek de enige juiste aanpak. De eerste methode zou voor mij al reden voor ontslag zijn.
Ik neem aan dat dit voor de hele opleiding is? En is dit master of bachelorstudie?quote:Op zaterdag 2 juni 2012 11:49 schreef ursel het volgende:
Waarom benne opleidingen zo duur.
Ben beetje op zoek om me wat verder te opleiden richting Software Architect, maar zover ik zie praat je dan over bedragen van ¤7000
Master volgens mij. Hele opleiding verder wel ja. Was meer op zoek naar iets in die richting voor budget van ¤3000. Hoeft dan niet gelijk master of bachelor te zijn. Wil me de komende periode/jaren in ieder geval die kant op doorontwikkelenquote:Op zaterdag 2 juni 2012 12:34 schreef Devv het volgende:
[..]
Ik neem aan dat dit voor de hele opleiding is? En is dit master of bachelorstudie?
1 | DateDiff("yyyy",[dob],Now())+Int(Format(Now(),"mmdd")<Format([dob],"mmdd")) |
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.Maar dat stukje er binnen
1 Now())+Int(Format(Now(),"mmdd")<Format([dob],"mmdd")
Wat gebeurd hier nu precies? Kan iemand mij alsjeblieft helpen?
Nogmaals duizendmaal sorry dat ik hier met een vraag kom die te maken heeft met Access!
Die zal er vast zijn, maar 't is cake om die zelf te schrijven. Een array er in knallen met html=>bb (key=>value), door de string laten loopen voor iedere value, en value laten vervangen door key. Tadaa.quote:Op zaterdag 2 juni 2012 01:22 schreef mschol het volgende:
om te voorkomen dat ik wielen opnieuw uitvind: er is vast wel ergens een een degelijke, goeie BB code parser klasse/functie..
wie weet een degelijke om BB naar html om te zetten?
ik heb alleen een functie nodig (geen complete editors dus) waar ik een bericht in kan pompen en vervolgens weer een bericht uit terugkrijg (omgezet)
uitbreidbaarheid zou erg fijn zijn
quote:Op zaterdag 2 juni 2012 13:48 schreef DutchErrorist het volgende:
Hallo Query goden (en godinnen),
Ik moet voor mijn opleiding als onderdeel van iets data uit een Access (Maak mij niet af oké? IK KAN HIER NIETS AAN DOEN) database halen. Dat gaat allemaal prima, want veel stelt het niet voor, meer dan een dubbel INNER JOIN is niet nodig, maar nu heb ik een stukje sql dat de geboortedatum veranderd in de leeftijd en ik moet deze begrijpen als ik hem wil gebruiken. Nu ben ik zelf superslecht in alles begrijpen wat ingewikkelder is dan HTML en CSS dus ik heb wat moeite met deze code.
[ code verwijderd ]
Ik weet nu hoe de DateDiff functie werkt.Moet je die manier gebruiken?SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.Maar dat stukje er binnen
[ code verwijderd ]
Wat gebeurd hier nu precies? Kan iemand mij alsjeblieft helpen?
Nogmaals duizendmaal sorry dat ik hier met een vraag kom die te maken heeft met Access!"Social order at the expense of liberty is hardly a bargain."
Nee, maar welke moet ik dan gebruiken (die ik snap?). Begrijp me goed, ik snap niets meer van SQL dan SELECT, FROM, INNER JOIN en WHERE dus ik ben echt een totale leek.quote:
Dude, denk je echt dat ik weet hoe ik dat moet doen als ik net zeg dat ik geen poep weet van SQL?quote:Op zaterdag 2 juni 2012 14:41 schreef Quir het volgende:
Huidige datum converteren, geboortedatum converteren, aftrekken, terug gooien naar Datetime.
Ja maar ik snap al die codes niet. En wat het dus allemaal doet.quote:Op zaterdag 2 juni 2012 14:46 schreef Quir het volgende:
Je snapte de Formats al, en aftrekken heb je gehad op de basisschool.
1 | DATEDIFF("yyyy", [dob], now()) |
Afhankelijk van wat getDB(); doet in het tweede voorbeeld kan dat wel voor heel veel db-connecties zorgen.quote:Op zaterdag 2 juni 2012 01:36 schreef Devv het volgende:
[..]
De tweede methode is in mijn optiek de enige juiste aanpak. De eerste methode zou voor mij al reden voor ontslag zijn.
Wat is dezequote:Op zondag 3 juni 2012 20:40 schreef Quir het volgende:
Een punt opgooien in een SP-topic, Scorpie? Ik dacht dat ieder weldenkend mens het daar wel mee gehad had.
Wat heeft dat met PHP/MySQL te maken?quote:Op zondag 3 juni 2012 20:49 schreef de_boswachter het volgende:
Ik weet niet of ik in dit topic goed zit, maar heb een dummy vraag;
Hoe zet ik op mijn ipad uit dat ik zie wanneer er een mail binnenkomt? Email is gesynchroniseerd met Oulook en elke keer als ik jn Outlook mail krijg dan zie ik dat. Daar wil ik vanaf.
Wie weet precies hoe ik dit uitzet
Het gaat over een iPad, dus iPad deel #33 - Waar we op de iPads van de NRC wachten. lijkt me wel geschiktquote:Op zondag 3 juni 2012 21:10 schreef de_boswachter het volgende:
Geen idee. Ik zag dummy staan.
Waar moet ik dan deze vraag stellen.
.quote:
Al aan gedacht, hij vult als de DB al bestaat met een nieuwe referentie van de static DB.quote:Op zondag 3 juni 2012 00:12 schreef Boze_Appel het volgende:
[..]
Afhankelijk van wat getDB(); doet in het tweede voorbeeld kan dat wel voor heel veel db-connecties zorgen.
1 2 3 4 5 6 7 8 | <?php if(empty(website_Model::$single_db)){ $this->db = new Database($ip,$user,$pass,$db_name, $port); website_Model::$single_db = $this->db; }else{ $this->db = website_Model::$single_db; } ?> |
waarom gebruik je geen singleton patroon?quote:Op maandag 4 juni 2012 02:52 schreef cablegunmaster het volgende:
[..]
Al aan gedacht, hij vult als de DB al bestaat met een nieuwe referentie van de static DB.
[ code verwijderd ]
Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.quote:Op vrijdag 8 juni 2012 11:31 schreef Crutch het volgende:
Heeft de mailfunctie een error handler net zoals sql met mysql_error() ?
De mailfunctie werkt niet en ik vind er niets over terug in de error log.
Beginners programmeur foutquote:
Dan nog kun je typfouten maken. Een IDE kan je op tikfouten wijzen, en PHP geeft een notice als je een variabele probeert te gebruiken die nog niet geinitialiseerd is. Die notices moet je dus wel aanzetten op je developmentomgeving.quote:Op vrijdag 8 juni 2012 18:58 schreef Devv het volgende:
Dit soort onzin zou je bij een managed framework niet hebben .
En wat dan als je toch een keer besluit dat je met meer dan 1 database wilt verbinden?quote:Op maandag 4 juni 2012 07:51 schreef Pakspul het volgende:
[..]
waarom gebruik je geen singleton patroon?
Bij een managed framework worden typefouten al tijdens designtime afgevangen. De kans op runtime fouten is daardoor stukken minder groot dan bij een scripttaal zoals PHP.quote:
Dan geef je in plaats van een instantie van de db connectie een eigen factory klasse mee die de verschillende verbindingen kan managen.quote:Op zaterdag 9 juni 2012 12:20 schreef Light het volgende:
[..]
En wat dan als je toch een keer besluit dat je met meer dan 1 database wilt verbinden?
Singleton database collection, waar je met een static functie die connectie uit kan halen welke je wil hebben?quote:Op zaterdag 9 juni 2012 12:20 schreef Light het volgende:
[..]
En wat dan als je toch een keer besluit dat je met meer dan 1 database wilt verbinden?
Als je die collectie van buitenaf kunt vullen, ben ik het met je eensquote:Op zaterdag 9 juni 2012 16:43 schreef Pakspul het volgende:
[..]
Singleton database collection, waar je met een static functie die connectie uit kan halen welke je wil hebben?
1 2 3 4 5 | $salt = bla $pepper = boe $PWsalted = $pepper+$_post[wachtwoord]+$salt $PWsalted = sha256($PWsalted) //doe iets met pwsalted |
Zo ongeveer, ja. De extra veiligheid krijg je door pepper per user verschillend te laten zijn. Sowieso is het toevoegen van extra informatie al goed, omdat iemand die de password hashes heeft ze dan niet zo makkelijk kan matchen. Er is waarschijnlijk geen rainbow table voor de gesalte passwords. En als die er wel is, heb je daar alsnog niets aan als je ook pepper gebruikt. Dan moet je per user een rainbow table maken, en da's niet aantrekkelijk.quote:Op woensdag 13 juni 2012 11:10 schreef mschol het volgende:
even een vraagje m.b.t. wachtwoorden:
Hoe werkt salt-/peppering?
zelf dacht ik (pseudocode):
[ code verwijderd ]
maar dat lijkt mij net zo onveilig als alleen een los wachtwoord (behalve dat het WW langer is)
Twee keer hashen maakt je systeem eerder onveiliger dan veiliger. De lengte van de eerste hash is bekend en het aantal mogelijkheden is eindig. Dat maakt het makkelijker om het resultaat van de eerste hash te vinden, en die kun je met een rainbow table wel verder kraken.quote:
Ik zie niet wat je hier bedoelt, maar als je voor 2256 'eindig aantal' bekende input-waarden een rainbow-table wilt maken dan wens ik je veel succes. Salt is uiteraard user-dependent.quote:Op woensdag 13 juni 2012 23:59 schreef Light het volgende:
[..]
Twee keer hashen maakt je systeem eerder onveiliger dan veiliger. De lengte van de eerste hash is bekend en het aantal mogelijkheden is eindig. Dat maakt het makkelijker om het resultaat van de eerste hash te vinden, en die kun je met een rainbow table wel verder kraken.
Bijna niemand heeft een wachtwoord van 64 karakters dus in 99% van de gevallen is het veiliger.quote:Op woensdag 13 juni 2012 23:59 schreef Light het volgende:
[..]
Twee keer hashen maakt je systeem eerder onveiliger dan veiliger. De lengte van de eerste hash is bekend en het aantal mogelijkheden is eindig. Dat maakt het makkelijker om het resultaat van de eerste hash te vinden, en die kun je met een rainbow table wel verder kraken.
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 | SELECT team_id, t_naam, COUNT(*) Gespeeld, SUM( CASE WHEN Uitslag = 'Winst' THEN 3 ELSE 0 END)+SUM( CASE WHEN Uitslag = 'Gelijk' THEN 1 ELSE 0 END ) Punten, SUM( CASE WHEN Uitslag = 'Winst' THEN 1 ELSE 0 END ) Gewonnen, SUM( CASE WHEN Uitslag = 'Gelijk' THEN 1 ELSE 0 END ) Gelijkspel, SUM( CASE WHEN Uitslag = 'Verlies' THEN 1 ELSE 0 END ) Verloren FROM team t left join ( SELECT w_team1 AS tid, CASE WHEN w_score1 > w_score2 THEN 'Winst' WHEN w_score1 < w_score2 THEN 'Verlies' WHEN w_score1 = w_score2 THEN 'Gelijk' END AS Uitslag FROM wedstrijd where (w_score1 is not null and w_score2 is not null) UNION ALL SELECT w_team2 AS tid, CASE WHEN w_score1 > w_score2 THEN 'Winst' WHEN w_score1 < w_score2 THEN 'Verlies' WHEN w_score1 = w_score2 THEN 'Gelijk' END AS Uitslag FROM wedstrijd where (w_score1 is not null and w_score2 is not null) ) A ON t.team_id = A.tid where team_id in (select team_id from competitie c, compindeling ci, klasse k, team t and comp_id = 1 and klasse_id = 3) GROUP BY t_naam order by Punten DESC, Gespeeld ASC; |
1 2 | FROM team t JOIN wedstrijd ON(t.team_id=w_team1 OR t.team_id=w_team2) |
1 | SUM( CASE WHEN ((t.team_id=w_team1 AND w_score1>w_score2) OR (t.team_id=w_team2 AND w_score2>w_score1) THEN 1 ELSE 0 END ) Gewonnen |
w_id int(11) PKquote:
Welke voordlen zitten daar aan vast, anders dan minder code?quote:Op donderdag 14 juni 2012 15:54 schreef GlowMouse het volgende:
Regel 7-25 kun je ook doen met:
[ code verwijderd ]
In je SELECT krijg je dan dingen als:
[ code verwijderd ]
Hoe bedoel je denormaliseren? Ben ik te ver doorgeslagen?quote:En denormaliseren zou ook wel helpen.
Nee ik heb niet gedenormaliseerd, maar dat geef je wel als tip. Heb ik te ver genormaliseerd?quote:Op donderdag 14 juni 2012 19:22 schreef GlowMouse het volgende:
sneller, leesbaarder
en denormaliseren doe je nu toch juist niet?
Opzich wel een idee ja. Maar dan verlies ik die gegevens weer als een team een volgend seizoen in een andere klasse/competitie speelt. Ik wil dat zo flexibel mogelijk houden, en dus on the fly berekenen. Anders moet je bij elke wedstrijd die gespeeld is de teams ook updaten, in plaats van dat je alleen het wedstrijdrecord bewerkt.quote:Op donderdag 14 juni 2012 19:24 schreef GlowMouse het volgende:
punten, gewonnen, gelijkspel en verloren zou ik in de tabel Team opslaan
Je hebt veel meer nodig dan alleen een gebrekkige PHP-kennis.quote:Op zaterdag 23 juni 2012 21:10 schreef Tauchmeister het volgende:
Ik zou graag een Google News-achtige dienst op mijn website aan willen bieden (dus een selectie met artikelen van andere sites, gesorteerd op onderwerp). Is dit realiseren met gebrekkige PHP-kennis? Ik ben wel bereid om me ervoor erin te verdiepen uiteraard
Daar ging ik al wel vanuit. Het is zo dat ik me de komende tijd naast mijn studie wil gaan richten op een project waar ik zelf veel potentie in zie, maar ik heb me eigenlijk nooit echt verdiept in PHP en me slechts beziggehouden met web design. Ik ben nu aan kijken hoe ik het ga aanpakken en geef natuurlijk het liefst zo weinig mogelijk uit handen, maar ik denk dat mijn PHP-kennis gewoonweg tekortschiet om het echt een succes te laten worden. Ik vraag me af of het zin heeft om er tijd en moeite in te steken of dat ik dat ik bepaalde delen van het scriptwerk beter aan anderen kan overlaten. En dan is het ook nog moeilijk om te bepalen wie daar geschikt voor is. Ik wil namelijk geen prutsersquote:Op zaterdag 23 juni 2012 22:44 schreef Ofyles2 het volgende:
[..]
Je hebt veel meer nodig dan alleen een gebrekkige PHP-kennis.
Ik stel me beschikbaar als je me nodig hebt.
Jitse Groen (Thuisbezorgd.nl) stond ook voor die keus.quote:Op zondag 24 juni 2012 00:09 schreef Tauchmeister het volgende:
[..]
Daar ging ik al wel vanuit. Het is zo dat ik me de komende tijd naast mijn studie wil gaan richten op een project waar ik zelf veel potentie in zie, maar ik heb me eigenlijk nooit echt verdiept in PHP en me slechts beziggehouden met web design. Ik ben nu aan kijken hoe ik het ga aanpakken en geef natuurlijk het liefst zo weinig mogelijk uit handen, maar ik denk dat mijn PHP-kennis gewoonweg tekortschiet om het echt een succes te laten worden. Ik vraag me af of het zin heeft om er tijd en moeite in te steken of dat ik dat ik bepaalde delen van het scriptwerk beter aan anderen kan overlaten. En dan is het ook nog moeilijk om te bepalen wie daar geschikt voor is. Ik wil namelijk geen prutsers
Tja, ik weet dat hij in het begin met iemand samenwerkte, maar daarna voor honderd procent eigenaar is geworden en daar plukt hij nu de vruchten van. Het hangt ook maar net af van je startkapitaal. Ik ben ook nog maar een student, maar heb dankzij eerdere projecten toch wat meer tot mijn beschikking, al moet dat eigenlijk niet van invloed zijn. Ik ga er nog eens goed over nadenken.quote:Op zondag 24 juni 2012 00:32 schreef Ofyles2 het volgende:
[..]
Jitse Groen (Thuisbezorgd.nl) stond ook voor die keus.
Niet dat ik je direct wil beïnvloeden.
Gebruik dan gewoon een fatsoenlijke caching laag, denormaliseren doe je eigenlijk alleen wanneer je daar zeer goede redenen hebt.quote:Op donderdag 14 juni 2012 19:24 schreef GlowMouse het volgende:
punten, gewonnen, gelijkspel en verloren zou ik in de tabel Team opslaan
Denormaliseren is een vorm van caching.quote:Op zondag 24 juni 2012 16:40 schreef raptorix het volgende:
[..]
Gebruik dan gewoon een fatsoenlijke caching laag, denormaliseren doe je eigenlijk alleen wanneer je daar zeer goede redenen hebt.
Als je dat in een aparte database, of desnoods tables doet misschien wel, wij hebben ooit voor hele grote zware sites gedenormaliseerde tables gebruikt om er Hibernate over te kunnen plaatsen, in dit geval is het trouwens ook overkill, je zou die standen prima kunnen ophalen via normale queries, wel leven niet meer in 2000 dat dat een performance probleem zou zijn.quote:Op zondag 24 juni 2012 17:55 schreef GlowMouse het volgende:
[..]
Denormaliseren is een vorm van caching.
Nee, ook in dezelfde database is het caching. De meest efficiënte vorm van caching.quote:Op zondag 24 juni 2012 19:01 schreef raptorix het volgende:
[..]
Als je dat in een aparte database, of desnoods tables doet misschien wel
nee, dat kan niet 'prima'quote:je zou die standen prima kunnen ophalen via normale queries, wel leven niet meer in 2000 dat dat een performance probleem zou zijn.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <html> <head> <script type="text/javascript"> var beta_const = -2.665; var addedVars = 0.885; var probability = Math.exp(beta_const + addedVars); probability = probability/(probability+1); probability = Math.round(probability*100)/100; alert(probability*100); </script> </head> <body> <?php $beta_const = -2.665; $addedVars = 0.885; $probability = exp($beta_const + $addedVars); $probability = $probability/($probability+1); $probability = round($probability,2); echo $probability*100; ?> </body> </html> |
1 2 | probability = Math.round(probability*100); alert(probability); |
Dan gebruik je gewoon een kut database omdat normale databases dat zelf wel cachen dan wel optimaliseren, we hebben het hier niet over miljoenen records mag ik aannemen.quote:Op zondag 24 juni 2012 19:20 schreef GlowMouse het volgende:
[..]
Nee, ook in dezelfde database is het caching. De meest efficiënte vorm van caching.
[..]
nee, dat kan niet 'prima'
Het is altijd zo simpel als je door hebt wat je over het hoofd ziet . Bedankt.quote:Op zondag 24 juni 2012 19:36 schreef Diabox het volgende:
[ code verwijderd ]
What Every Computer Scientist Should Know About Floating-Point Arithmetic
Nopequote:Op zondag 24 juni 2012 19:40 schreef raptorix het volgende:
[..]
Dan gebruik je gewoon een kut database omdat normale databases dat zelf wel cachen dan wel optimaliseren, we hebben het hier niet over miljoenen records mag ik aannemen.
Is wel zonder decimalenquote:Op zondag 24 juni 2012 19:46 schreef BrainOverfloW het volgende:
[..]
Het is altijd zo simpel als je door hebt wat je over het hoofd ziet . Bedankt.
1 2 3 4 5 | probability = probability/(probability+1); probability = Math.round(probability*100)/100; probability = probability.toString().split('.'); probability = probability[1] + '.' + probability[0]; alert(probability); |
Heb je het al geprobeerd met een genormaliseerd design en een reeele set testdata?quote:Op zondag 24 juni 2012 19:46 schreef WheeleE het volgende:
[..]
Nope
Ik verwacht honderden. Als het echt succesvol wordt (wat ik niet zo gauw verwacht) misschien duizeden, maar that's it.
Leuk dat er nog over mijn stelling wordt gedebatteerd hier . Ik heb inmiddels een tweede design verzonnen. Een aparte scoretabel (wedstrijdid, teamid, scorevoor, scoretegen, toto) met daarin per wedstrijd 2 records, voor elk team van de wedstrijd 1. Het is wel redundante opslag, maar maakt het volgens mij wel een stuk makkelijker om de standen te bereken.
Ik maak me niet zo'n zorgen over de performance, maar ik krijg de juiste resultaten er niet uit. Mijn querykennis is gewoon ontzettend weggezaktquote:Op zondag 24 juni 2012 19:54 schreef raptorix het volgende:
[..]
Heb je het al geprobeerd met een genormaliseerd design en een reeele set testdata?
Het probleem met denormaliseren is dat wanneer je later dingen wilt uitbreiden je vaak de web inslaat van "sloppy design".
Queries om standen op te bouwen zijn ook lastig, je ontkomt in principe niet aan aggregate queries, en die vind ik zelf ook altijd kutquote:Op zondag 24 juni 2012 19:59 schreef WheeleE het volgende:
[..]
Ik maak me niet zo'n zorgen over de performance, maar ik krijg de juiste resultaten er niet uit. Mijn querykennis is gewoon ontzettend weggezakt
Het initiele ontwerp was netjes genormaliseerd, en met enkele tientalle records testdata. Alleen kreeg ik het niet voor mekaar de complexere overzichten uit te halen. Door een aangepast ontwerp lukt dat hopelijk wel, zonder dat het ten koste gaat van performance.
Heheh, ja dat is hem precies. Ik ben ooit begonnen als beheerder+ontwikkelaar, maar de afgelopen 5/6 jaar heb ik alleen maar beheerwerk gedaan. Joinen lukt nog wel, maar al dat soort berekeningen worden een uitdaging.quote:Op zondag 24 juni 2012 21:26 schreef raptorix het volgende:
[..]
Queries om standen op te bouwen zijn ook lastig, je ontkomt in principe niet aan aggregate queries, en die vind ik zelf ook altijd kut
Zelf heb ik jarenlang behoorlijk complexe queries geschreven (bijvoorbeeld voor de eerste versie van Funda) maar laatst moest ik een simpele join doen, en dat lukte me niet meer uit me hoofd
Dit topic gaat over MySQL, die doet dat niet. Andere db's ken ik niet, maar ik betwist dat die dit wel goed kunnen cachen.quote:Op zondag 24 juni 2012 19:40 schreef raptorix het volgende:
[..]
Dan gebruik je gewoon een kut database omdat normale databases dat zelf wel cachen dan wel optimaliseren, we hebben het hier niet over miljoenen records mag ik aannemen.
Gewoon het aantal recordsquote:Op maandag 25 juni 2012 01:10 schreef Tijn het volgende:
Wat bedoel je met "dat een variabele omhoog gaat"? Is dat een getal? Bedoel je dan niet gewoon het aantal records dat is geregistreerd?
Ik zou zeggen, maak dan een tabel waarin je de unieke IP-adressen opslaat. Dit is de simpelste variant, zonder verdere velden. In een echte applicatie zijn kolommen als een uniek id en een timestamp waarschijnlijk wel handig om toe te voegen, maar niet nodig om alleen maar het aantal keer dat er op een knop is geklikt te tellen.quote:
1 2 3 4 | CREATE TABLE IF NOT EXISTS `log` ( `ip` varchar(45) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`ip`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <?php # # KNOPPENTELLER # // verbinden met de database $mysqli = new mysqli("localhost", "username", "password", "database"); // verwerk input if($_SERVER['REQUEST_METHOD'] == 'POST') { // controleer of het meegestuurde ip-adres een geldig adres is if(filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP)) { // probeer het in de database op te slaan if($mysqli->query('INSERT INTO `log` (`ip`) VALUES("'.$_SERVER['REMOTE_ADDR'].'")')) { // gelukt :) $message = 'Bedankt!'; } else { // mislukt :( $message = 'Er is al een keer vanaf dit IP-adres op de knop gedrukt, dus het mag nu niet meer.'; } } } // haal alle logs op $result = $mysqli->query("SELECT * FROM `log`"); ?> <!DOCTYPE html> <html> <head> <title>Knoppenteller</title> </head> <body> <h1>Knoppenteller</h1> <p>Elk uniek IP-adres mag 1 keer op de knop drukken.</p> <p>De knop is tot nu toe <strong><?php echo $result->num_rows; ?></strong> keer ingedrukt.</p> <?php if(isset($message)): ?> <p><strong><?php echo $message; ?></strong></p> <?php else: ?> <form method="post" action=""> <button type="submit">de knop</button> </form> <?php endif; ?> </body> </html> |
Danku zeer!quote:Op maandag 25 juni 2012 02:03 schreef Tijn het volgende:
[..]
Ik zou zeggen, maak dan een tabel waarin je de unieke IP-adressen opslaat. Dit is de simpelste variant, zonder verdere velden. In een echte applicatie zijn kolommen als een uniek id en een timestamp waarschijnlijk wel handig om toe te voegen, maar niet nodig om alleen maar het aantal keer dat er op een knop is geklikt te tellen.
[ code verwijderd ]
Dit is een tabel met alleen een kolom die "ip" heet waarin varchars (strings) van maximaal 45 tekens kunnen worden opgeslagen, wat lang genoeg is om zowel IPv4 als IPv6-adressen op te slaan. Doordat deze kolom ook de primary key is, wordt voorkomen dat er dubbele IP-adressen worden opgeslagen.
Vervolgens zou je zo'n soort pagina kunnen maken:
[ code verwijderd ]
Kheb bij elke PHP-regel een comment gezet met uitleg wat die regel doet. Spreekt voor zich, toch?
Wat betreft de databaseverbinding: PHP biedt 3 manieren om met een MySQL-database te verbinden (klik hier voor meer info). Ik heb hier gebruik gemaakt van mysqli. Je zou ook voor PDO kunnen kiezen.
Mocht je een echte applicatie gaan bouwen dan is het waarschijnlijk een goed idee om te kijken naar een framework (Zend Framework, CakePHP, CodeIgniter om wat populaire voorbeelden te noemen) met een abstractielaag voor databasetoegang, zodat je je hier niet druk om hoeft te maken. Een goed framework is waarschijnlijk de beste manier om op een zo snel mogelijke manier een veilige applicatie te bouwen.
Zitten er allebei ook in.quote:Op maandag 25 juni 2012 02:03 schreef Tijn het volgende:
[..]
Ik zou zeggen, maak dan een tabel waarin je de unieke IP-adressen opslaat. Dit is de simpelste variant, zonder verdere velden. In een echte applicatie zijn kolommen als een uniek id en een timestamp waarschijnlijk wel handig om toe te voegen, maar niet nodig om alleen maar het aantal keer dat er op een knop is geklikt te tellen.
[ code verwijderd ]
Heb je alleen wel Linux 64 bit met 8gig geheugen voor nodig.quote:Op dinsdag 26 juni 2012 13:48 schreef remlof het volgende:
www.memsql.com volledig compatibel met en 30x sneller dan MySQL
Wat kost 8Gb nou nog tegenwoordig?quote:Op dinsdag 26 juni 2012 13:58 schreef Scorpie het volgende:
[..]
Heb je alleen wel Linux 64 bit met 8gig geheugen voor nodig.
Nop, dit is even een afkorting. Al hebben ze wel heel leuk cijfertjes in de naam. Maar heb ik niet bedacht. BAAN (Infor)quote:Op maandag 25 juni 2012 15:04 schreef raptorix het volgende:
Ik mag serieus hopen dat je die tables niet echt zo hebt genoemd?
Niks, binnenkort maar eens een VM maken met dit erop. Kijken hoe het zich verhoudt met mijn newznab instantie met 25 gig aan data.quote:
Leuk voor mensen die MySQL niet kunnen configureren en durability niet waarderen. Ik verwacht binnen niet al te lange tijd wat vernietigende blogposts.quote:Op dinsdag 26 juni 2012 13:48 schreef remlof het volgende:
www.memsql.com volledig compatibel met en 30x sneller dan MySQL
quote:Is this a joke?
Data must fit in RAM, no joins over >2 tables, no transactions, no builtin support for clustering/sharding/horizontal scaling whatsoever.
quote:Is it just me or does this entire product smell like it was designed for the sole purpose of extracting money from less than tech-savvy investors and clueless institutions?
The bullshit-bingo-lingo on their homepage is mindnumbing.
Meanwhile their actual software seems rather underwhelming, bordering on SnakeOil.
Als snelheid belangrijk is voor je commerciële website lijkt MemSQL me wel degelijk het overwegen waard.quote:Op dinsdag 26 juni 2012 14:42 schreef Scorpie het volgende:
En ik maar denken dat we een kek product aangesmeerd kregen. Niks is minder waar.
Bedankt voor niks, remlof.
Ik kan geen site bedenken die hier baat bij heeft.quote:Op dinsdag 26 juni 2012 14:49 schreef remlof het volgende:
[..]
Als snelheid belangrijk is voor je commerciële website lijkt MemSQL me wel degelijk het overwegen waard.
Als je ingewikkelde queries hebt die langer dan 0.1 seconde duren al.quote:Op dinsdag 26 juni 2012 14:52 schreef GlowMouse het volgende:
[..]
Ik kan geen site bedenken die hier baat bij heeft.
quote:Op dinsdag 26 juni 2012 14:54 schreef remlof het volgende:
[..]
Als je ingewikkelde queries hebt die langer dan 0.1 seconde duren al.
quote:no joins over >2 tables
Ingewikkelde queries die meer dan 2 joins bevatten bijvoorbeeld? Die kan memsql niet aan.quote:Op dinsdag 26 juni 2012 14:54 schreef remlof het volgende:
[..]
Als je ingewikkelde queries hebt die langer dan 0.1 seconde duren al.
Die hoor je bij een site al niet te hebben.quote:Op dinsdag 26 juni 2012 14:54 schreef remlof het volgende:
[..]
Als je ingewikkelde queries hebt die langer dan 0.1 seconde duren al.
Ow, hmmm ja dat is dan wel weer minder.quote:
Ik kende iemand die ook bij zo een bedrijf werkte waar letterlijk alle tables en velden een nummer hadden, liepen ze allemaal met printouts en aantekeningen wat er echt in de velden zatquote:Op dinsdag 26 juni 2012 14:11 schreef Cue_ het volgende:
[..]
Nop, dit is even een afkorting. Al hebben ze wel heel leuk cijfertjes in de naam. Maar heb ik niet bedacht. BAAN (Infor)
Dan kan je beter technieken zoals SOLR gebruiken...quote:Op dinsdag 26 juni 2012 14:49 schreef remlof het volgende:
[..]
Als snelheid belangrijk is voor je commerciële website lijkt MemSQL me wel degelijk het overwegen waard.
Het is echt verschrikkelijk. Gelukkig is nog wat info te halen uit velden als 'cuno' , 'pono' en 'orno' enzo. Maar toch is het lastig om erin te duiken en de tabellen van elkaar te onderscheiden. Maar al doende leert menquote:Op dinsdag 26 juni 2012 17:15 schreef raptorix het volgende:
Ik kende iemand die ook bij zo een bedrijf werkte waar letterlijk alle tables en velden een nummer hadden, liepen ze allemaal met printouts en aantekeningen wat er echt in de velden zat
Sites die MySQL gebruiken, zoals Wikipedia of Fok! zijn toch hartstikke snel?quote:Op dinsdag 26 juni 2012 14:49 schreef remlof het volgende:
[..]
Als snelheid belangrijk is voor je commerciële website lijkt MemSQL me wel degelijk het overwegen waard.
Dat bedrijf waar jij werkt is verschrikkelijk.quote:Op dinsdag 26 juni 2012 17:27 schreef Cue_ het volgende:
[..]
Het is echt verschrikkelijk. Gelukkig is nog wat info te halen uit velden als 'cuno' , 'pono' en 'orno' enzo. Maar toch is het lastig om erin te duiken en de tabellen van elkaar te onderscheiden. Maar al doende leert men
Je db-server door een zoekserver vervangen, goed idee.quote:Op dinsdag 26 juni 2012 17:17 schreef raptorix het volgende:
[..]
Dan kan je beter technieken zoals SOLR gebruiken...
Ja, MySQL is ook in de meeste gevallen wel snel genoeg mits goed geconfigureerd en goeie hardware.quote:Op dinsdag 26 juni 2012 17:56 schreef Tijn het volgende:
[..]
Sites die MySQL gebruiken, zoals Wikipedia of Fok! zijn toch hartstikke snel?
quote:Op dinsdag 26 juni 2012 21:18 schreef remlof het volgende:
[..]
Ja, MySQL is ook in de meeste gevallen wel snel genoeg mits goed geconfigureerd en goeie hardware.
Tenzij je een site als Google of Facebook runt ofzo
Uiteraard met bronquote:"Google runs critical business systems with MySQL and InnoDB. The systems require 24x7 operation with minimal downtime. The systems support large OLTP and reporting workloads. We are very happy with the scalability, reliability and manageability of this software."
Hoe groot zou de database van google zijn ?quote:
Iets groter dan die van FOK!quote:Op dinsdag 26 juni 2012 23:26 schreef Muffle het volgende:
[..]
Hoe groot zou de database van google zijn ?
Ik gok ongeveer 100x zo groot als de rest van het internet. Aangezien ze dat allemaal in cache hebben voor weet ik hoeveel jaar terug .quote:Op dinsdag 26 juni 2012 23:26 schreef Muffle het volgende:
[..]
Hoe groot zou de database van google zijn ?
quote:
http://royal.pingdom.com/2010/06/18/the-software-behind-facebook/quote:Facebook uses MySQL, but primarily as a key-value persistent storage, moving joins and logic onto the web servers since optimizations are easier to perform there (on the “other side” of the Memcached layer).
Wie heeft het over vervangen?quote:Op dinsdag 26 juni 2012 18:10 schreef GlowMouse het volgende:
[..]
Je db-server door een zoekserver vervangen, goed idee.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |