FOK!forum / Digital Corner / [PHP/(My)SQL] voor dummies #118
KomtTijd...maandag 15 september 2014 @ 12:58
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

Succes heren met het volgende deeltje!
wipes66vrijdag 19 september 2014 @ 21:09
http://www.reddit.com/r/P(...)ed_in_php_code_so_i/

:D
robin007bondzaterdag 20 september 2014 @ 00:08
quote:
:') :D
Robuustheidzaterdag 20 september 2014 @ 23:25
Wat is het nut ervan om iets static te definieren?

Als ik het doe:

1
2
3
4
5
6
7
class voorbeeld {
    public function lala(){
        echo "Hoi"
    }
}

 voorbeeld::lala();

Waar is die static bij function dan voor nodig :?

En op een andere manier:

1
2
3
4
5
6
7
class voorbeeld {
    static function lala(){
        echo "Hoi"
    }
}
   $voorbeeld = new voorbeeld;
   $voorbeeld->lala();
Wat voor zin heeft static dan nog?
robin007bondzondag 21 september 2014 @ 00:08
quote:
1s.gif Op zaterdag 20 september 2014 23:25 schreef Robuustheid het volgende:
Wat is het nut ervan om iets static te definieren?

Als ik het doe:
[ code verwijderd ]


Waar is die static bij function dan voor nodig :?

En op een andere manier:
[ code verwijderd ]

Wat voor zin heeft static dan nog?

Een static-methode is handig als de methode niet iets met de klasse zelf hoeft te doen.

Stel dat je bijvoorbeeld een Math-klasse hebt. Is het niet een beetje vreemd om een object Math te hebben om dan pas methodes te kunnen gebruiken voor abs etc.? Dan kun je beter al die Math-methodes static maken.
Igenzondag 21 september 2014 @ 00:10
En als je er niet-static functie aanroept alsof 'ie wel static is, dan kun je gekke dingen krijgen. Bijv. dat autoload soms niet werkt en heel raar doet, zoals ik in het vorige topic leerde.
robin007bondzondag 21 september 2014 @ 00:15
Overigens is het discutabel of je classes met enkel static methodes wel in een klasse moet stoppen of gewoon in een namespace.

Maar ja, geen OOP. :P
Monolithzondag 21 september 2014 @ 00:22
quote:
1s.gif Op zaterdag 20 september 2014 23:25 schreef Robuustheid het volgende:
Wat is het nut ervan om iets static te definieren?

Als ik het doe:
[ code verwijderd ]


Waar is die static bij function dan voor nodig :?

En op een andere manier:
[ code verwijderd ]

Wat voor zin heeft static dan nog?

Het eerste geeft een strict warning in PHP. In de meeste OO talen kan het niet eens.
Desalniettemin gebruik je het bijvoorbeeld voor utility classes, singleton patterns, enzovoort.
Robuustheidzondag 21 september 2014 @ 00:24
quote:
1s.gif Op zondag 21 september 2014 00:15 schreef robin007bond het volgende:
Overigens is het discutabel of je classes met enkel static methodes wel in een klasse moet stoppen of gewoon in een namespace.

Maar ja, geen OOP. :P
Hoe bedoel je? Met andere manieren ben ik niet mee bekend.
robin007bondzondag 21 september 2014 @ 00:52
quote:
0s.gif Op zondag 21 september 2014 00:24 schreef Robuustheid het volgende:

[..]

Hoe bedoel je? Met andere manieren ben ik niet mee bekend.
Gewoon procedureel. :)
slacker_nlzondag 21 september 2014 @ 10:07
quote:
0s.gif Op zondag 21 september 2014 00:08 schreef robin007bond het volgende:

[..]

Een static-methode is handig als de methode niet iets met de klasse zelf hoeft te doen.

Stel dat je bijvoorbeeld een Math-klasse hebt. Is het niet een beetje vreemd om een object Math te hebben om dan pas methodes te kunnen gebruiken voor abs etc.? Dan kun je beter al die Math-methodes static maken.
Waarom zou je het dan uberhaupt OO maken?
robin007bondzondag 21 september 2014 @ 10:10
quote:
1s.gif Op zondag 21 september 2014 10:07 schreef slacker_nl het volgende:

[..]

Waarom zou je het dan uberhaupt OO maken?
Even mezelf quoten:
quote:
1s.gif Op zondag 21 september 2014 00:15 schreef robin007bond het volgende:
Overigens is het discutabel of je classes met enkel static methodes wel in een klasse moet stoppen of gewoon in een namespace.

Maar ja, geen OOP. :P
Wellicht dat consistentie een reden is.
Robuustheidzondag 21 september 2014 @ 10:43
Bedankt voor jullie bijdragen. Het is dus geen valide code, maar wordt desondanks wel uitgevoerd.

Als ik error_reporting(E_ALL | E_STRICT); doe, verschijnt er nog steeds geen waarschuwing als ik bovenstaand code uitvoer?
Monolithzondag 21 september 2014 @ 10:58
quote:
0s.gif Op zondag 21 september 2014 10:43 schreef Robuustheid het volgende:
Bedankt voor jullie bijdragen. Het is dus geen valide code, maar wordt desondanks wel uitgevoerd.

Als ik error_reporting(E_ALL | E_STRICT); doe, verschijnt er nog steeds geen waarschuwing als ik bovenstaand code uitvoer?
Probeer het hier maar: http://sandbox.onlinephpfunctions.com/

met deze code:

1
2
3
4
5
6
7
8
9
10
11
<?php
error_reporting
(E_ALL E_STRICT);

class 
voorbeeld {
    public function 
lala() {
        echo 
"Hoi";
    }
}

 
voorbeeld::lala();
?>

Krijg je bij elke versie met uitzondering van 4.4.9 een strict warning.
Als je de E_STRICT en public eruit sloopt en het op 4.4.9 uitvoert, dan krijg je geen melding.

De reden dat je absoluut geen non-static methods als static wilt gaan aanroepen, is dat een non-static method toegang heeft tot de state van een instance. Dan kun je dus problemen krijgen. Probeer dit maar eens uit te voeren:

1
2
3
4
5
6
7
8
9
10
11
<?php
class voorbeeld {
    private 
$a 3;

    public function 
lala($b) {
        echo 
$this->a*$b;
    }
}

 
voorbeeld::lala(3);
?>
raptorixzondag 21 september 2014 @ 11:19
Static heeft volgens mij ook compile en geheugen technisch voordelen, ik vermoed dat als je iets static definieert deze nooit 2 keer in geheugen zal komen.
Monolithzondag 21 september 2014 @ 12:37
quote:
0s.gif Op zondag 21 september 2014 11:19 schreef raptorix het volgende:
Static heeft volgens mij ook compile en geheugen technisch voordelen, ik vermoed dat als je iets static definieert deze nooit 2 keer in geheugen zal komen.
Dat is allemaal erg marginaal. Natuurlijk, als je elke keer instances moet gaan maken in je code om een of andere utility method aan te roepen, dan is dat niet heel efficiŽnt, maar dat zijn niet de zaken die doorgaans geheugenproblemen veroorzaken.
xaban06maandag 22 september 2014 @ 13:09
Ik heb een soort van download server gemaakt. PHP script serveert de bestanden. Bestanden zijn tussen de 2GB en 5GB.

Echter stopt de download automatisch na een paar seconde.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$mm_type
="application/octet-stream";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: " $mm_type);
header("Content-Length: " .(string)(filesize($path)) );
header('Content-Disposition: attachment; filename="'.basename($path).'"');
header("Content-Transfer-Encoding: binary\n");
readfile($path); // outputs the content of the file
exit();
?>
mstxmaandag 22 september 2014 @ 13:24
quote:
0s.gif Op maandag 22 september 2014 13:09 schreef xaban06 het volgende:
Ik heb een soort van download server gemaakt. PHP script serveert de bestanden. Bestanden zijn tussen de 2GB en 5GB.

Echter stopt de download automatisch na een paar seconde.
[ code verwijderd ]

Ok man ^O^
Aethermaandag 22 september 2014 @ 14:52
quote:
0s.gif Op maandag 22 september 2014 13:09 schreef xaban06 het volgende:
Ik heb een soort van download server gemaakt. PHP script serveert de bestanden. Bestanden zijn tussen de 2GB en 5GB.

Echter stopt de download automatisch na een paar seconde.
[ code verwijderd ]

Je kunt readfile beter niet voor dit soort situaties gebruiken. De gehele file wordt namelijk ingeladen en daarna pas verzonden. Je zult waarschijnlijk al eerder een ‘out of memory’ krijgen.

Een betere oplossing is om het bestand in kleinere blokken te lezen en deze te verzenden: (niet getest)
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$file 
fopen"my-file.raw""rb" );

while ( !
feof($file) ) {
    
$chunk fread$file1024*16 );
    echo 
$chunk;
    
ob_flush();
    
flush();
}

fclose$file );
?>
slacker_nlmaandag 22 september 2014 @ 19:44
quote:
7s.gif Op maandag 22 september 2014 14:52 schreef Aether het volgende:

[..]

Je kunt readfile beter niet voor dit soort situaties gebruiken. De gehele file wordt namelijk ingeladen en daarna pas verzonden. Je zult waarschijnlijk al eerder een ‘out of memory’ krijgen.

Een betere oplossing is om het bestand in kleinere blokken te lezen en deze te verzenden: (niet getest)
[ code verwijderd ]

http://php.net/manual/en/function.readfile.php
quote:
readfile() will not present any memory issues, even when sending large files, on its own. If you encounter an out of memory error ensure that output buffering is off with ob_get_level().
Dit is denk ik een betere optie:
http://stackoverflow.com/(...)rve-a-file-using-php
xaban06dinsdag 23 september 2014 @ 09:49
quote:
_O_
raptorixdinsdag 23 september 2014 @ 09:53
quote:
0s.gif Op zondag 21 september 2014 12:37 schreef Monolith het volgende:

[..]

Dat is allemaal erg marginaal. Natuurlijk, als je elke keer instances moet gaan maken in je code om een of andere utility method aan te roepen, dan is dat niet heel efficiŽnt, maar dat zijn niet de zaken die doorgaans geheugenproblemen veroorzaken.
True, maar het is meestal ook best practice qua onderhoudbaarheid, met name voor collega developers die niet altijd even bekend zijn met een code base.
Monolithdinsdag 23 september 2014 @ 10:00
quote:
0s.gif Op dinsdag 23 september 2014 09:53 schreef raptorix het volgende:

[..]

True, maar het is meestal ook best practice qua onderhoudbaarheid, met name voor collega developers die niet altijd even bekend zijn met een code base.
Juist om wat ik al eerder aangaf. Als je static calls gaat doen naar non-static methods dan 'mag' dat in PHP. Bizarre implementatiebeslissing, maar daar staan de PHP devs wel bekend om. :P
Wat je dan inderdaad gaat krijgen is dat je wellicht in je project op bepaalde plekken static calls doet naar een method die niet als static is gedeclareerd. Vervolgens moet een andere developer de oorspronkelijke class aanpassen en doet dat door een instance variabele te gebruiken in die methode of een call naar een andere non-static method.

Dat lijkt wellicht allemaal niet zo erg bij kleinschalige projectjes waar mensen individueel aan werken, maar bij grotere projecten wordt dat een enorm probleem. Zeker omdat PHP voor dit soort dingen ook geen compile time errors / warnings heeft. Het wordt immers niet gecompiled. Dus dan moet je maar hopen dat dit soort zaken heel erg goed zijn afgevangen met unit tests.
Tijndinsdag 23 september 2014 @ 11:10
quote:
0s.gif Op dinsdag 23 september 2014 10:00 schreef Monolith het volgende:

[..]

Juist om wat ik al eerder aangaf. Als je static calls gaat doen naar non-static methods dan 'mag' dat in PHP.
Die warnings stuurt PHP niet voor niks, he.
Monolithdinsdag 23 september 2014 @ 11:54
quote:
2s.gif Op dinsdag 23 september 2014 11:10 schreef Tijn het volgende:

[..]

Die warnings stuurt PHP niet voor niks, he.
Dat weet ik, maar het zou Łberhaupt niet toegestaan mogen zijn. Het zou moeten resulteren in een fatal error.
Nu werkt het nog ook, zolang je geen non-static handelingen uitvoert in de methode. Dat is vragen om toekomstige bugs.
Tijndinsdag 23 september 2014 @ 12:00
quote:
0s.gif Op dinsdag 23 september 2014 11:54 schreef Monolith het volgende:

[..]

Dat weet ik, maar het zou Łberhaupt niet toegestaan mogen zijn. Het zou moeten resulteren in een fatal error.
Mja, het probleem is dan (zoals zo vaak met PHP) dat een hoop oude applicaties instorten :+
robin007bonddinsdag 23 september 2014 @ 12:20
quote:
2s.gif Op dinsdag 23 september 2014 12:00 schreef Tijn het volgende:

[..]

Mja, het probleem is dan (zoals zo vaak met PHP) dat een hoop oude applicaties instorten :+
Pech. Dat is meer werk voor ons. :7
Monolithdinsdag 23 september 2014 @ 12:21
quote:
2s.gif Op dinsdag 23 september 2014 12:00 schreef Tijn het volgende:

[..]

Mja, het probleem is dan (zoals zo vaak met PHP) dat een hoop oude applicaties instorten :+
Ja ik weet dat backwards compatibility de reden is, maar je moet ook ergens een keer een streep trekken. Het probleem is natuurlijk dat ze het OO aspect van de taal later hebben geÔntroduceerd en pas redelijk volledig vanaf PHP 5. PHP 4 is weliswaar 'OO', maar miste nog basale zaken als access modifiers.
Daarbij is backwards compatibility wel leuk, maar bij enige doorontwikkeling loop je weer tegen de issues aan die ik eerder al beschreeft. Het enige nut van die backwards compatibility is dus eigenlijk het neerzetten van een applicatie die je nooit meer wilt aanraken.
KomtTijd...dinsdag 23 september 2014 @ 13:28
Het zou wat mij betreft helemaal niet gek zijn als ze eens flink gaan snijden/refactoren in de functienamen. Alles wat je weg wilt gooien gewoon per direct deprecaten en over 1 of 2 versies weggooien. Eventueel de laatste versie vůůr de grote schoonmaak LTS maken voor de compatibility.
Monolithdinsdag 23 september 2014 @ 16:05
quote:
14s.gif Op dinsdag 23 september 2014 13:28 schreef KomtTijd... het volgende:
Het zou wat mij betreft helemaal niet gek zijn als ze eens flink gaan snijden/refactoren in de functienamen. Alles wat je weg wilt gooien gewoon per direct deprecaten en over 1 of 2 versies weggooien. Eventueel de laatste versie vůůr de grote schoonmaak LTS maken voor de compatibility.
Wat dat betreft was PHP Reboot wel een aardig initiatief. Jammer dat het nooit is doorgezet.
KomtTijd...woensdag 24 september 2014 @ 14:43
Symfony2'ers:

Ik heb een entity ("Ticket") met een one-to-many relation naar de entity Comment. Kortom een ticket kan meerdere comments hebben. Als ik een ticket opvraag worden de comments hierbij weergegeven.

Een comment kan 'deleted' zijn, dan wil ik deze niet meer weergeven bij de ticket waar hij aan gekoppeld is. Ik wil 'm echter ook niet removen voor het geval hij weer teruggeplaatst wordt.

Hoe krijg ik dat voor elkaar? :{ Ik had mijn hoop gevestigd op het toevoegen van doctrine criteria aan de getComments() functie van de Ticket entity, maar dat helpt niet.
Rockfirewoensdag 24 september 2014 @ 15:00
quote:
14s.gif Op woensdag 24 september 2014 14:43 schreef KomtTijd... het volgende:
Symfony2'ers:

Ik heb een entity ("Ticket") met een one-to-many relation naar de entity Comment. Kortom een ticket kan meerdere comments hebben. Als ik een ticket opvraag worden de comments hierbij weergegeven.

Een comment kan 'deleted' zijn, dan wil ik deze niet meer weergeven bij de ticket waar hij aan gekoppeld is. Ik wil 'm echter ook niet removen voor het geval hij weer teruggeplaatst wordt.

Hoe krijg ik dat voor elkaar? :{ Ik had mijn hoop gevestigd op het toevoegen van doctrine criteria aan de getComments() functie van de Ticket entity, maar dat helpt niet.
Op zo'n manier? http://doctrine-orm.readt(...)iltering-collections
KomtTijd...woensdag 24 september 2014 @ 15:03
Had gehoopt zoiets te kunnen doen ja
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
#Ticket entity
    
public function getComments()
    {
        
$criteria Criteria::create()
            ->
where(Criteria::expr()->eq("deleted"false));
        return 
$this->comments->matching($criteria);
    }
    public function 
getAllComments()
    {
        return 
$this->comments;
    }
?>

maar als ik in de controller de ticket aanroep, wordt die getComments functie helemaal niet aangeroepen.
1
2
3
4
5
<?php
        $ticket 
$this->getDoctrine()
            ->
getRepository('TicketBundle:Ticket')
            ->
find($id);
?>
Monolithwoensdag 24 september 2014 @ 15:06
quote:
14s.gif Op woensdag 24 september 2014 15:03 schreef KomtTijd... het volgende:
Had gehoopt zoiets te kunnen doen ja
[ code verwijderd ]

maar als ik in de controller de ticket aanroep, wordt die getComments functie helemaal niet aangeroepen.
[ code verwijderd ]

Ik ken Symphony en Doctrine niet genoeg om je daar antwoord op te kunnen geven, maar dit soort dingen kun je vaak het best even debuggen middels een fatsoenlijke IDE en in het geval van PHP iets van Xdebug ofzo.
KomtTijd...woensdag 24 september 2014 @ 15:48
Krijg nou tieten, als je HTML aanroept ipv JSON werkt die criteria wel. Af en toe word ik moe van die FOSRestBundle.

[ Bericht 0% gewijzigd door KomtTijd... op 24-09-2014 16:03:37 ]
Crutchwoensdag 24 september 2014 @ 23:59
quote:
15s.gif Op woensdag 24 september 2014 15:48 schreef KomtTijd... het volgende:
Krijg nou tieten, als je HTML aanroept ipv JSON werkt die criteria wel. Af en toe word ik moe van die FOSRestBundle.
Vage shit.
Met html aanroepen, wat bedoel je daarmee? Vanuit Twig misschien? Want dan wordt de getComments() wel degelijk aangeroepen:
1
2
3
4
5
<?php
{% for comment in ticket.comments %}
// dingen
{% endfor %}
?>


Krijg je Łberhaupt comments in je JSON terug?
KomtTijd...donderdag 25 september 2014 @ 00:09
Ja de HTML gaat via een twig template. Maar dat boeit me niet, 't gaat om de JSON. En ja, krijg wel comments terug in de JSON maar gewoon allemaal dus.
Crutchdonderdag 25 september 2014 @ 00:15
quote:
14s.gif Op donderdag 25 september 2014 00:09 schreef KomtTijd... het volgende:
Ja de HTML gaat via een twig template. Maar dat boeit me niet, 't gaat om de JSON. En ja, krijg wel comments terug in de JSON maar gewoon allemaal dus.
Dan zou ik gewoon zelf een foreach in getComments doen. Is waarschijnlijk nog sneller dan die Criteria.
Monolithdonderdag 25 september 2014 @ 00:19
quote:
14s.gif Op donderdag 25 september 2014 00:09 schreef KomtTijd... het volgende:
Ja de HTML gaat via een twig template. Maar dat boeit me niet, 't gaat om de JSON. En ja, krijg wel comments terug in de JSON maar gewoon allemaal dus.
Zoals ik het zie gebruikt Twig een concept analoog aan JavaBeans. D.w.z. als je ticket.comments gebruikt wordt eigenlijk getComments aangeroepen. Is het bij de JSON dan niet zo dat er rechtstreeks een comments field wordt gepakt ipv dat de getComments methode wordt aangeroepen?
Crutchdonderdag 25 september 2014 @ 00:21
quote:
1s.gif Op donderdag 25 september 2014 00:19 schreef Monolith het volgende:

[..]

Zoals ik het zie gebruikt Twig een concept analoog aan JavaBeans. D.w.z. als je ticket.comments gebruikt wordt eigenlijk getComments aangeroepen. Is het bij de JSON dan niet zo dat er rechtstreeks een comments field wordt gepakt ipv dat de getComments methode wordt aangeroepen?
Dan zou je kunnen proberen om $comments protected of private te maken, wellicht dat er dan wordt gekeken naar een getter.
KomtTijd...donderdag 25 september 2014 @ 00:25
Good thinking. $comments is al protected en had ik ook al private gemaakt bij wijze van test, haalde niets uit.

Maar ik denk wel dat ik het in deze hoek moet zoeken. De JSON wordt geproduceerd door de JSMSerializer bundle en die kun je weer beinvloeden door annotations bij, jawel, de variables zelf. Niet de getter/setter functies.

:O morgen maar eens naar kijken ofzo. Ik lijk wel gek, hier om half 1 's nachts nog over nadenken :')
KomtTijd...donderdag 25 september 2014 @ 00:28
1
2
3
4
5
6
7
8
<?php
    
/**
     * @ORM\OneToMany(targetEntity="Comment", mappedBy="ticket", cascade={"persist"})
     * @serializer\Groups({"ticketDetails"})
     * @serializer\Accessor(getter="getComments") <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
     */
    
protected $comments;
?>
there, fixed it. Iets met ballmer peak ofzo. Thnx allemaal!
Monolithdonderdag 25 september 2014 @ 00:29
Daarom, nogmaals, leer gebruik maken van een debugger. Ik weet dat het in de PHP wereld niet gebruikelijk is, maar het maakt je leven zoveel makkelijker. :P
KomtTijd...donderdag 25 september 2014 @ 00:32
It's not a bug, it's a feature, mate!

De profiler laat (liet) me keurig zien dat de uitgevoerde queries verschillend zijn, maar waarům dan, dat mag je meestal zelf uitvinden.
Crutchdonderdag 25 september 2014 @ 00:36
quote:
14s.gif Op donderdag 25 september 2014 00:25 schreef KomtTijd... het volgende:
Good thinking. $comments is al protected en had ik ook al private gemaakt bij wijze van test, haalde niets uit.

Maar ik denk wel dat ik het in deze hoek moet zoeken. De JSON wordt geproduceerd door de JSMSerializer bundle en die kun je weer beinvloeden door annotations bij, jawel, de variables zelf. Niet de getter/setter functies.

:O morgen maar eens naar kijken ofzo. Ik lijk wel gek, hier om half 1 's nachts nog over nadenken :')
Haha, ik wilde nog zeggen, als ze JMS gebruiken, kijk dan even in de docs bij annotations. :')
Monolithdonderdag 25 september 2014 @ 00:38
quote:
14s.gif Op donderdag 25 september 2014 00:32 schreef KomtTijd... het volgende:
It's not a bug, it's a feature, mate!

De profiler laat (liet) me keurig zien dat de uitgevoerde queries verschillend zijn, maar waarům dan, dat mag je meestal zelf uitvinden.
Dat bedoel ik ook met een debugger. Daarmee loop je stap voor stap door je code.
Lightdonderdag 25 september 2014 @ 00:47
quote:
1s.gif Op donderdag 25 september 2014 00:19 schreef Monolith het volgende:

[..]

Zoals ik het zie gebruikt Twig een concept analoog aan JavaBeans. D.w.z. als je ticket.comments gebruikt wordt eigenlijk getComments aangeroepen. Is het bij de JSON dan niet zo dat er rechtstreeks een comments field wordt gepakt ipv dat de getComments methode wordt aangeroepen?
Twig kijkt eerst of het een public property is, dan of het een public method is, daarna of er een public method get... is, vervolgens of er een public method is... bestaat en tenslotte of er een public method has... bestaat. De eerste die werkt, wordt gebruikt (en dan wordt de rest uiteraard niet meer gecontroleerd).
Monolithdonderdag 25 september 2014 @ 00:50
quote:
0s.gif Op donderdag 25 september 2014 00:47 schreef Light het volgende:

[..]

Twig kijkt eerst of het een public property is, dan of het een public method is, daarna of er een public method get... is, vervolgens of er een public method is... bestaat en tenslotte of er een public method has... bestaat. De eerste die werkt, wordt gebruikt (en dan wordt de rest uiteraard niet meer gecontroleerd).
Dat verklaart in dezen dan waarom het daar wel werkte. Het field was namelijk protected. ;)

En dit is dus overigens weer een prima voorbeeld van het feit dat encapsulation een belangrijk OO concept is. :P
robin007bonddonderdag 25 september 2014 @ 09:13
quote:
0s.gif Op donderdag 25 september 2014 00:29 schreef Monolith het volgende:
Daarom, nogmaals, leer gebruik maken van een debugger. Ik weet dat het in de PHP wereld niet gebruikelijk is, maar het maakt je leven zoveel makkelijker. :P
Xdebug werkt inderdaad prima. :)
robin007bonddonderdag 25 september 2014 @ 09:17
Sowieso vind ik Netbeans een prima IDE voor PHP. Goede autocompletion, je wordt gewaarschuwd als je code niet aan bepaalde conventies doet, je methoden of classes te groot zijn etc.
remi1986donderdag 25 september 2014 @ 09:47
quote:
1s.gif Op donderdag 25 september 2014 09:17 schreef robin007bond het volgende:
Sowieso vind ik Netbeans een prima IDE voor PHP. Goede autocompletion, je wordt gewaarschuwd als je code niet aan bepaalde conventies doet, je methoden of classes te groot zijn etc.
Netbeans draait op JAVA, onnodig zwaar/groot. Ik gebruik al jaren PHPDesigner (iets van 23MB) en heeft alles wat je nodig hebt en is lekker licht.
Monolithdonderdag 25 september 2014 @ 10:16
quote:
0s.gif Op donderdag 25 september 2014 09:47 schreef remi1986 het volgende:

[..]

Netbeans draait op JAVA, onnodig zwaar/groot. Ik gebruik al jaren PHPDesigner (iets van 23MB) en heeft alles wat je nodig hebt en is lekker licht.
Ik hoor wel goeie verhalen over PHPStorm. Van dezelfde makers (en ik geloof zelfs afgeleid van) IntelliJ, wat in mijn ogen veruit de beste Java IDE is.
Kost je (of bij voorkeur je baas :P ) wel §180 euro, maar dan heb je ook wat.
Djurresdonderdag 25 september 2014 @ 10:19
Ik gebruik phpstorm, weliswaar een beetje illegaal maar werkt echt fantastisch :)
robin007bonddonderdag 25 september 2014 @ 10:36
quote:
0s.gif Op donderdag 25 september 2014 10:19 schreef Djurres het volgende:
Ik gebruik phpstorm, weliswaar een beetje illegaal maar werkt echt fantastisch :)
Die schijnt inderdaad ook erg goed te zijn.
Pakspuldonderdag 25 september 2014 @ 10:50
quote:
0s.gif Op donderdag 25 september 2014 09:47 schreef remi1986 het volgende:

[..]

Netbeans draait op JAVA, onnodig zwaar/groot. Ik gebruik al jaren PHPDesigner (iets van 23MB) en heeft alles wat je nodig hebt en is lekker licht.
Heeft PHPDesigner FTP mogelijkheden?
remi1986donderdag 25 september 2014 @ 13:02
quote:
0s.gif Op donderdag 25 september 2014 10:50 schreef Pakspul het volgende:

[..]

Heeft PHPDesigner FTP mogelijkheden?
uiteraard... ook svn, github en al die zooi ...
KomtTijd...donderdag 25 september 2014 @ 13:14
quote:
0s.gif Op donderdag 25 september 2014 10:16 schreef Monolith het volgende:

[..]

Ik hoor wel goeie verhalen over PHPStorm. Van dezelfde makers (en ik geloof zelfs afgeleid van) IntelliJ, wat in mijn ogen veruit de beste Java IDE is.
Kost je (of bij voorkeur je baas :P ) wel §180 euro, maar dan heb je ook wat.
Een personal license is "maar" 90 euro.

En idd bij voorkeur declareer je die bij je baas ^O^ Ik weet niet meer hoe ik ooit zonder PHPStorm heb gekund.
KomtTijd...donderdag 25 september 2014 @ 13:16
quote:
0s.gif Op donderdag 25 september 2014 09:47 schreef remi1986 het volgende:

[..]

Netbeans draait op JAVA, onnodig zwaar/groot. Ik gebruik al jaren PHPDesigner (iets van 23MB) en heeft alles wat je nodig hebt en is lekker licht.
quote:
System Requirements

Windows
:?
remi1986donderdag 25 september 2014 @ 13:17
quote:
5s.gif Op donderdag 25 september 2014 13:16 schreef KomtTijd... het volgende:

[..]

[..]

:?
wat is er?
KomtTijd...donderdag 25 september 2014 @ 13:20
Ik snap niet wat je met een PHP-IDE moet die alleen op windows draait.

Maar ik snap ook dat dat misschien een beetje persoonlijk is ;)
remi1986donderdag 25 september 2014 @ 13:31
quote:
14s.gif Op donderdag 25 september 2014 13:20 schreef KomtTijd... het volgende:
Ik snap niet wat je met een PHP-IDE moet die alleen op windows draait.

Maar ik snap ook dat dat misschien een beetje persoonlijk is ;)
naja heel simpel. Ik gebruik alleen Windows. Is wat ik al zei lekker licht en heeft alles wat ik nodig heb.

Als ik op een server wat moet aanpassen kan ik prima uit de voeten met VIM
SharQueDodonderdag 25 september 2014 @ 13:33
Hallo :W

* hier ook even gezellig bij komt
Monolithdonderdag 25 september 2014 @ 13:38
quote:
0s.gif Op donderdag 25 september 2014 13:31 schreef remi1986 het volgende:

[..]

naja heel simpel. Ik gebruik alleen Windows. Is wat ik al zei lekker licht en heeft alles wat ik nodig heb.

Als ik op een server wat moet aanpassen kan ik prima uit de voeten met VIM
Voor simpel gebruik kun je inderdaad beter zo'n lichtgewicht ding gebruiken.
Djurresdonderdag 25 september 2014 @ 17:43
PHPStorm werkt heerlijk met FTP, ik heb nl geen local servertje op men pc omdat ik gewoon online een test-environment heb. Alles wat ik typ gaat direct naar de server toe, en word op mn pc opgeslagen.

Auto-filling werkt ook erg goed, en bij het aanmaken van nieuwe classes e.d worden automatisch benodigde namespaces ingevuld, en als er iets ge-extend moet worden geeft ie dit ook gewoon aan.

Ben wel een noob met php, maar waar voor ik het gebruik is t ideaal :)
Lightdonderdag 25 september 2014 @ 19:11
quote:
14s.gif Op donderdag 25 september 2014 13:14 schreef KomtTijd... het volgende:

[..]

Een personal license is "maar" 90 euro.

En idd bij voorkeur declareer je die bij je baas ^O^ Ik weet niet meer hoe ik ooit zonder PHPStorm heb gekund.
Het verlengen van een personal license is maar iets van 44 euro.

Overigens mag je volgens de licentievoorwaarden zo'n personal license niet declareren.
KomtTijd...donderdag 25 september 2014 @ 19:14
Oh, zie het nu ook ja. Naja mijn nederige excuses bij deze.
slacker_nldonderdag 25 september 2014 @ 19:16
quote:
0s.gif Op donderdag 25 september 2014 19:11 schreef Light het volgende:

[..]

Het verlengen van een personal license is maar iets van 44 euro.

Overigens mag je volgens de licentievoorwaarden zo'n personal license niet declareren.
Dat kan nooit rechtsgeldig zijn. Of anders gezegd: al helemaal niet te enforcen.
Monolithdonderdag 25 september 2014 @ 19:18
quote:
0s.gif Op donderdag 25 september 2014 19:11 schreef Light het volgende:

[..]

Het verlengen van een personal license is maar iets van 44 euro.

Overigens mag je volgens de licentievoorwaarden zo'n personal license niet declareren.
Oh dat zal dan bij IntelliJ ook wel niet mogen, maar toch doet iedereen bij ons dat. Daar is het bovendien iets van 500 voor de bedrijfslicentie en 240 voor de persoonlijke licentie.
Ze gaan er toch nooit achter komen natuurlijk.
robin007bonddonderdag 25 september 2014 @ 20:49
quote:
1s.gif Op donderdag 25 september 2014 19:18 schreef Monolith het volgende:

[..]

Oh dat zal dan bij IntelliJ ook wel niet mogen, maar toch doet iedereen bij ons dat. Daar is het bovendien iets van 500 voor de bedrijfslicentie en 240 voor de persoonlijke licentie.
Ze gaan er toch nooit achter komen natuurlijk.
Pittig prijsverschil.
KomtTijd...donderdag 25 september 2014 @ 21:30
Los van het prijsverschil was voor mij een personal license sowieso praktischer, die kan ik tenminste thuis gebruiken. En mijn werkgever gaat de licentie toch niet overdragen aan collega's ofzo.
Monolithdonderdag 25 september 2014 @ 21:35
quote:
14s.gif Op donderdag 25 september 2014 21:30 schreef KomtTijd... het volgende:
Los van het prijsverschil was voor mij een personal license sowieso praktischer, die kan ik tenminste thuis gebruiken. En mijn werkgever gaat de licentie toch niet overdragen aan collega's ofzo.
Het is voor jou altijd gunstiger, want hij is van jou en niet van je werkgever. Als je dus weggaat, dan heb je mooi nog een licentie voor jezelf. :P
robin007bondvrijdag 26 september 2014 @ 00:19
quote:
1s.gif Op donderdag 25 september 2014 21:35 schreef Monolith het volgende:

[..]

Het is voor jou altijd gunstiger, want hij is van jou en niet van je werkgever. Als je dus weggaat, dan heb je mooi nog een licentie voor jezelf. :P
:D
Lightvrijdag 26 september 2014 @ 00:32
quote:
1s.gif Op donderdag 25 september 2014 19:16 schreef slacker_nl het volgende:

[..]

Dat kan nooit rechtsgeldig zijn. Of anders gezegd: al helemaal niet te enforcen.
Enforcen is wel lastig, da's waar.
KomtTijd...vrijdag 26 september 2014 @ 01:14
quote:
1s.gif Op donderdag 25 september 2014 21:35 schreef Monolith het volgende:

[..]

Het is voor jou altijd gunstiger, want hij is van jou en niet van je werkgever. Als je dus weggaat, dan heb je mooi nog een licentie voor jezelf. :P
6.gif.
Maar voor de baas is het ook beter dat ik thuis af en toe wat kan doen.
Crutchvrijdag 26 september 2014 @ 01:27
PHPStorm is tot nu toe de beste IDE.
En inderdaad, ik snap niet wat ik zonder PS heb gekund. :')
slacker_nlvrijdag 26 september 2014 @ 06:32
quote:
0s.gif Op vrijdag 26 september 2014 00:32 schreef Light het volgende:

[..]

Enforcen is wel lastig, da's waar.
Hoe dan ook vind ik het een lastige licentievoorwaarde. Je kan mensen niet verbieden iets niet door de baas te laten aanschaffen. En al helemaal niet via licentievoorwaarden.

Beetje als zeggen, je mag de software alleen voor goede doelen gebruiken. Madness.
Lightvrijdag 26 september 2014 @ 10:36
quote:
1s.gif Op vrijdag 26 september 2014 06:32 schreef slacker_nl het volgende:

[..]

Hoe dan ook vind ik het een lastige licentievoorwaarde. Je kan mensen niet verbieden iets niet door de baas te laten aanschaffen. En al helemaal niet via licentievoorwaarden.
Ze hebben natuurlijk wel wat meer dan alleen die voorwaarden. Een personal license koop je als privťpersoon, dus kun je geen bedrijfsnaam opgeven en komt de licentie op naam van de persoon. Bij een commercial license moet je wel een bedrijfsnaam opgeven en komt de licentie op naam van het bedrijf. Dan is het aan het bedrijf om te bepalen wie met de licentie mag werken.
Monolithvrijdag 26 september 2014 @ 11:20
quote:
0s.gif Op vrijdag 26 september 2014 01:27 schreef Crutch het volgende:
PHPStorm is tot nu toe de beste IDE.
En inderdaad, ik snap niet wat ik zonder PS heb gekund. :')
Dat is altijd het geval met een goede IDE natuurlijk. Je weet pas wat je mist, wanneer je er daadwerkelijk mee gewerkt hebt. ;)
Ik heb ook nog wel met pure text-editors (al dan niet met wat syntax highlighting) gewerkt. Alleen al basale ondersteuning voor zaken als error highlighting, code completion, code generation en refactoring zorgt er al voor dat je productiviteit een veelvoud is van je productiviteit zonder al die hulpmiddelen.

De IDE's van JetBrains hebben die functionaliteit bovendien echt heel goed uitgewerkt, met support voor enorm veel verschillende frameworks, al dan niet via plug-ins.
Daarbij hebben ze dan ook nog eens live templates. Als je daar een beetje handig mee wordt, dan levert dat ook weer eens een flinke snelheidswinst op.
slacker_nlvrijdag 26 september 2014 @ 15:34
quote:
0s.gif Op vrijdag 26 september 2014 10:36 schreef Light het volgende:

[..]

Ze hebben natuurlijk wel wat meer dan alleen die voorwaarden. Een personal license koop je als privťpersoon, dus kun je geen bedrijfsnaam opgeven en komt de licentie op naam van de persoon. Bij een commercial license moet je wel een bedrijfsnaam opgeven en komt de licentie op naam van het bedrijf. Dan is het aan het bedrijf om te bepalen wie met de licentie mag werken.
Maar als ik iets declareer heb ik het gekocht en leg ik de bon bij de baas neer en krijg dat dan later terug. Ik kan dan alsnog een persoonlijke licentie nemen...
Crutchvrijdag 26 september 2014 @ 20:57
quote:
0s.gif Op vrijdag 26 september 2014 11:20 schreef Monolith het volgende:

[..]

Dat is altijd het geval met een goede IDE natuurlijk. Je weet pas wat je mist, wanneer je er daadwerkelijk mee gewerkt hebt. ;)
Ik heb ook nog wel met pure text-editors (al dan niet met wat syntax highlighting) gewerkt. Alleen al basale ondersteuning voor zaken als error highlighting, code completion, code generation en refactoring zorgt er al voor dat je productiviteit een veelvoud is van je productiviteit zonder al die hulpmiddelen.

De IDE's van JetBrains hebben die functionaliteit bovendien echt heel goed uitgewerkt, met support voor enorm veel verschillende frameworks, al dan niet via plug-ins.
Daarbij hebben ze dan ook nog eens live templates. Als je daar een beetje handig mee wordt, dan levert dat ook weer eens een flinke snelheidswinst op.
Emmet FTW _O_
Monolithvrijdag 26 september 2014 @ 21:18
quote:
0s.gif Op vrijdag 26 september 2014 20:57 schreef Crutch het volgende:

[..]

Emmet FTW _O_
Leuk bedacht en heeft zeker zijn toepassingen, maar het gros van de afkortingen biedt niet echt voordelen te opzichte van code completion in IDEs. De multiplications zijn nog wel aardig efficiŽnt, maar juist dat soort dingen zijn vaak dynamisch en niet statisch.
Crutchvrijdag 26 september 2014 @ 21:52
quote:
1s.gif Op vrijdag 26 september 2014 21:18 schreef Monolith het volgende:

[..]

Leuk bedacht en heeft zeker zijn toepassingen, maar het gros van de afkortingen biedt niet echt voordelen te opzichte van code completion in IDEs. De multiplications zijn nog wel aardig efficiŽnt, maar juist dat soort dingen zijn vaak dynamisch en niet statisch.
Ik type nauwelijks nog volledige (s)css:

w100% {tab} -> width: 100%
bgc {tab} -> background-color:
fl {tab} -> float: left

HTML-tags:
type gewoon de tag-naam gevolgd door tab en je hebt bijvoorbeeld:
<div></div> met de cursor in het midden om direct je content in te rammen.

Of div.wrapper {tab} -> <div class="wrapper"></div>

Of een simpele pubsf in PHP en je krijgt public static function()

Het houdt niet op hoor, ik heb mijn ziel verkocht aan Emmet.
Crutchvrijdag 26 september 2014 @ 21:54
Oeh en die multicursor die ze van Sublime Text hebben gejat, awesome! :D

Monolithvrijdag 26 september 2014 @ 22:01
quote:
0s.gif Op vrijdag 26 september 2014 21:52 schreef Crutch het volgende:

[..]

Ik type nauwelijks nog volledige (s)css:

w100% {tab} -> width: 100%
bgc {tab} -> background-color:
fl {tab} -> float: left

HTML-tags:
type gewoon de tag-naam gevolgd door tab en je hebt bijvoorbeeld:
<div></div> met de cursor in het midden om direct je content in te rammen.

Of div.wrapper {tab} -> <div class="wrapper"></div>

Of een simpele pubsf in PHP en je krijgt public static function()

Het houdt niet op hoor, ik heb mijn ziel verkocht aan Emmet.
Met name die eerste paar zijn nou precies de voorbeelden die ik bedoel die een IDE al wel voor je afvangt middels intelligente code completion.

Dingen als .wrapper zijn dan inderdaad wel weer handig.

Die laatste is net zoiets als live templates, echter hebben die nog veel meer mogelijkheden om variabele elementen te gebruiken, die de IDE dan on the fly probeert in te vullen in de gegenereerde code.
mstxdinsdag 30 september 2014 @ 08:41
Zo irritant he, als een collega gewoon alles klakkeloos doet wat een klant (die geen verstand van databases heeft) zegt. Nu moet ik dus werken in een project waar tabellen gejoind worden op objectnamen ipv de id's. En index is schijnbaar ook een onbekend woord. :'(
robin007bonddinsdag 30 september 2014 @ 08:58
quote:
0s.gif Op dinsdag 30 september 2014 08:41 schreef mstx het volgende:
Zo irritant he, als een collega gewoon alles klakkeloos doet wat een klant (die geen verstand van databases heeft) zegt. Nu moet ik dus werken in een project waar tabellen gejoind worden op objectnamen ipv de id's. En index is schijnbaar ook een onbekend woord. :'(
:'(
n8ndinsdag 30 september 2014 @ 10:17
quote:
0s.gif Op dinsdag 30 september 2014 08:41 schreef mstx het volgende:
Zo irritant he, als een collega gewoon alles klakkeloos doet wat een klant (die geen verstand van databases heeft) zegt. Nu moet ik dus werken in een project waar tabellen gejoind worden op objectnamen ipv de id's. En index is schijnbaar ook een onbekend woord. :'(
sowieso mensen die overal ja op zeggen zonder ooit na te denken over de implicaties. Na 3 weken komt iedereen er achter dat het toch niet kan en daar sta je dan met je begroting. :')
Monolithdinsdag 30 september 2014 @ 10:24
quote:
0s.gif Op dinsdag 30 september 2014 08:41 schreef mstx het volgende:
Zo irritant he, als een collega gewoon alles klakkeloos doet wat een klant (die geen verstand van databases heeft) zegt. Nu moet ik dus werken in een project waar tabellen gejoind worden op objectnamen ipv de id's. En index is schijnbaar ook een onbekend woord. :'(
Indices kun je gewoon toevoegen natuurlijk. ;)
Maar wat hebben de wensen van een klant in vredesnaam te maken met hoe jullie database tables joinen? Ik kan me voorstellen dat je door wensen van de klant in combinatie met tijdsdruk (en vaak een gebrek aan kennis) dat soort oplossingen gaat krijgen, maar het lijkt me toch niet dat de klant er specifiek om vraagt.
slacker_nldinsdag 30 september 2014 @ 20:46
Ik moet de laatste tijd een beetje vaak denken aan deze draad doordat ik de complete mailermeuk op m'n werk aan het aanpassen ben. Zo testen wij nu het versturen van mail:

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
sub external_mail_track_sending_bcc : Tests {
    my $params = {
        to      => '[email protected]',
        from    => '[email protected]',
        cc      => '[email protected]',
        bcc     => '[email protected]',
        subject => "Hide 'n seek",
    };

    my $obj = _mail_track_ok;

    my $msg = $obj->prepare({ %$params, Body => 'This is some content', });
    my $message;
    my $opts;

    no warnings qw(redefine once);
    local *Email::Sender::Simple::send = sub {
        my $self = shift;
        my $entity = shift;
        $opts = shift;
        $message = $entity->stringify();
    };
    $msg->send;
    isa_ok(delete $opts->{transport}, "Email::Sender::Transport::SMTP");
    is_deeply($opts, { to => $params->{bcc} }, "BCC'ed");
    ok($message, 'Sending e-mail');
}

Jullie mogen de code zien aangezien het toch een open source project is
Chandlerdonderdag 2 oktober 2014 @ 09:16
Kan iemand me helpen, ik krijg steeds een error als ik mysql opstart..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
2014-10-02 09:13:17 6048 [Note] Plugin 'FEDERATED' is disabled.
2014-10-02 09:13:17 6048 [Note] InnoDB: The InnoDB memory heap is disabled
2014-10-02 09:13:17 6048 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions
2014-10-02 09:13:17 6048 [Note] InnoDB: Compressed tables use zlib 1.2.3
2014-10-02 09:13:17 6048 [Note] InnoDB: Not using CPU crc32 instructions
2014-10-02 09:13:17 6048 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2014-10-02 09:13:17 6048 [Note] InnoDB: Completed initialization of buffer pool
2014-10-02 09:13:17 6048 [Note] InnoDB: Highest supported file format is Barracuda.
2014-10-02 09:13:18 6048 [Note] InnoDB: The log sequence numbers 0 and 0 in ibdata files do not match the log sequence number 49463 in the ib_logfiles!
2014-10-02 09:13:18 6048 [Note] InnoDB: Database was not shutdown normally!
2014-10-02 09:13:18 6048 [Note] InnoDB: Starting crash recovery.
2014-10-02 09:13:18 6048 [Note] InnoDB: Reading tablespace information from the .ibd files...
2014-10-02 09:13:18 6048 [Note] InnoDB: Restoring possible half-written data pages 
2014-10-02 09:13:18 6048 [Note] InnoDB: from the doublewrite buffer...
2014-10-02 09:13:18 6048 [Warning] InnoDB: Creating foreign key constraint system tables.
2014-10-02 09:13:18 6048 [ERROR] InnoDB: Creation of SYS_FOREIGN and SYS_FOREIGN_COLS has failed with error 57.  Tablespace is full. Dropping incompletely created tables.
2014-10-02 09:13:18 11d4  InnoDB: Error: table "SYS_FOREIGN" does not exist in the InnoDB internal
InnoDB: data dictionary though MySQL is trying to drop it.
InnoDB: Have you copied the .frm file of the table to the
InnoDB: MySQL database directory from another database?
InnoDB: You can look for further help from
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html
2014-10-02 09:13:18 11d4  InnoDB: Error: table "SYS_FOREIGN_COLS" does not exist in the InnoDB internal
InnoDB: data dictionary though MySQL is trying to drop it.
InnoDB: Have you copied the .frm file of the table to the
InnoDB: MySQL database directory from another database?
InnoDB: You can look for further help from
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html
2014-10-02 09:13:18 11d4  InnoDB: Assertion failure in thread 4564 in file dict0crea.cc line 1445
InnoDB: Failing assertion: sys_foreign_err == DB_SUCCESS
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
07:13:18 UTC - mysqld got exception 0x80000003 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed, 
something is definitely wrong and this may fail.

key_buffer_size=8388608
read_buffer_size=131072
max_used_connections=0
max_threads=151
thread_count=0
connection_count=0
It is possible that mysqld could use up to 
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 67589 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.

Thread pointer: 0x0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
13657d0    mysqld_usbwv8.exe!my_thread_name()
159dd9d    mysqld_usbwv8.exe!my_mb_ctype_mb()
1395a4a    mysqld_usbwv8.exe!xor_string()
11197f0    [email protected]@[email protected]@@Z()
1152e0e    [email protected]@[email protected]@[email protected]@[email protected]@[email protected]()
1157454    [email protected]@[email protected]()
111102d    [email protected]@YAHXZ()
1111d23    [email protected]@[email protected]()
1112287    [email protected]@[email protected]()
15988fa    mysqld_usbwv8.exe!my_mb_ctype_mb()
75fb338a    kernel32.dll!BaseThreadInitThunk()
77df9f72    ntdll.dll!RtlInitializeExceptionChain()
77df9f45    ntdll.dll!RtlInitializeExceptionChain()
The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash. 

Ik kan dus echt niet achterhalen wat het probleem is... :'( iemand die het mogelijk ziet? heb zo'n 300 databases en stuk voor stuk terug zetten is ook wel weer vervelend...
KomtTijd...donderdag 2 oktober 2014 @ 09:41
Hoe ver ben je zelf al? privileges en disk space al gechecked enzo?
Chandlerdonderdag 2 oktober 2014 @ 10:26
Maar natuurlijk heb ik dat gechecked, draaide namelijk normaal wel.
100GB ruimte vrij ;)
Run als admin ;)

Het moet ergens in de tabellen zitten, daar crasht hij op, maar welke is niet duidelijk, en uitzoeken is best vervelend. Is er geen tool die de database bestanden zonder mysql server kan controleren?
KomtTijd...donderdag 2 oktober 2014 @ 10:55
Niet toevallig een limiet op je innodb_data_file_path in je my.cnf?
Chandlerdonderdag 2 oktober 2014 @ 20:04
Nee, het rare is het werkte altijd, ik ben echt bang dat 1 corrupte database / tabel voor gezeur zorgt, ga opzoek naar het probleem!!! :D

lolerdelol heb de originele versie van usbwebserver gedownloaded en daarvan alles uit de data dir van mysql naar mijn data dir gekopieerd, daarna gestart en hoppa werkte gelijk! :) daarna al mijn databases terug gekopieerd en hoppa, werkte weer!

[ Bericht 43% gewijzigd door Chandler op 02-10-2014 20:09:56 ]
KomtTijd...donderdag 2 oktober 2014 @ 21:55
InnoDB tabellen zou je als het goed is niet moeten kunnen kopiŽren door de bestanden in het filesystem te kopiŽren. Althans, misschien kan het goed gaan maar het wordt uitdrukkelijk afgeraden en niet ondersteund.
qu63vrijdag 3 oktober 2014 @ 17:08
Dummie hier :W

Ben aan t experimenteren met de API van de RDW om alleen een bepaald type voertuig uit hun database te trekken. Dit lukt allemaal prima en opslaan in mijn eigen database ook. Alleen houdt de RDW niet bij wanneer er een record is aangepast. Iedere dag uploaden ze de complete tabel opnieuw. Hoe kan ik nu de ongeveer 10.000 records uit hun API plukken, checken of het kenteken (het enige unieke record) al bestaat en if so, checken of er wijzigingen zijn, en if so de wijzigingen doorvoeren in mijn tabel. Ik kan dan zelf mijn eigen 'updated on' veld wel aanpassen ;)

Iemand tips/trics? Kan dit bijvoorbeeld ook met ON DUPLICATE KEY UPDATE?

-edit- En dan zijn er natuurlijk ook kentekens die uit de databse van de RDW verdwijnen (export, sloop), dan zou ik moeten kijken welke van mijn kentekens niet meer bij de RDW bekend staan, maar met 10.000 records is dat ook best lastig, lijkt me.. Ik heb wel een veld in mijn db voor sloop (ja/nee) en export (ja/nee), dus alleen dat veld aanpassen is voldoende..
Aethervrijdag 3 oktober 2014 @ 17:20
quote:
0s.gif Op vrijdag 3 oktober 2014 17:08 schreef qu63 het volgende:
[...]
Als het kenteken je ID is zou je hier een PRIMARY KEY van kunnen maken anders een UNIQUE KEY.
Je zou een datumveld kunnen toevoegen wanneer een record in jouw database is aangepast. Records die ouder zijn komen dan niet meer voor in die van de RDW. Dit is ook als archief te gebruiken.
totalvampvrijdag 3 oktober 2014 @ 17:24
quote:
0s.gif Op vrijdag 3 oktober 2014 17:08 schreef qu63 het volgende:
Dummie hier :W

Ben aan t experimenteren met de API van de RDW om alleen een bepaald type voertuig uit hun database te trekken. Dit lukt allemaal prima en opslaan in mijn eigen database ook. Alleen houdt de RDW niet bij wanneer er een record is aangepast. Iedere dag uploaden ze de complete tabel opnieuw. Hoe kan ik nu de ongeveer 10.000 records uit hun API plukken, checken of het kenteken (het enige unieke record) al bestaat en if so, checken of er wijzigingen zijn, en if so de wijzigingen doorvoeren in mijn tabel. Ik kan dan zelf mijn eigen 'updated on' veld wel aanpassen ;)

Iemand tips/trics? Kan dit bijvoorbeeld ook met ON DUPLICATE KEY UPDATE?

-edit- En dan zijn er natuurlijk ook kentekens die uit de databse van de RDW verdwijnen (export, sloop), dan zou ik moeten kijken welke van mijn kentekens niet meer bij de RDW bekend staan, maar met 10.000 records is dat ook best lastig, lijkt me.. Ik heb wel een veld in mijn db voor sloop (ja/nee) en export (ja/nee), dus alleen dat veld aanpassen is voldoende..
Je kunt inderdaad een insert doen met een on duplicate update erin.
Je kunt ook een subquery maken die kijkt of er verschillen zijn, maar lijkt me niet nodig.
Gewoon sowieso alles updaten.

en 10000 records is een peuleschilletje :)
quote:
1s.gif Op vrijdag 3 oktober 2014 17:20 schreef Aether het volgende:

[..]

Als het kenteken je ID is zou je hier een PRIMARY KEY van kunnen maken anders een UNIQUE KEY.
Je zou een datumveld kunnen toevoegen wanneer een record in jouw database is aangepast. Records die ouder zijn komen dan niet meer voor in die van de RDW. Dit is ook als archief te gebruiken.
dit moet sowieso wel :P
Monolithvrijdag 3 oktober 2014 @ 17:35
Zoals ik het lees kun je net zo goed de database weer leeg kieperen en de nieuwe data erin zetten.
Of is er specifiek een reden in bestaande database records te behouden?
totalvampvrijdag 3 oktober 2014 @ 17:37
quote:
0s.gif Op vrijdag 3 oktober 2014 17:35 schreef Monolith het volgende:
Zoals ik het lees kun je net zo goed de database weer leeg kieperen en de nieuwe data erin zetten.
Of is er specifiek een reden in bestaande database records te behouden?
Hoevaak herlaad jij data per dag dan?

De database leeggooien is geen goed idee, gewoon updaten is het beste.
Monolithvrijdag 3 oktober 2014 @ 17:43
quote:
0s.gif Op vrijdag 3 oktober 2014 17:37 schreef totalvamp het volgende:

[..]

Hoevaak herlaad jij data per dag dan?

De database leeggooien is geen goed idee, gewoon updaten is het beste.
Normaal gesproken niet natuurlijk, maar je moet altijd kijken naar de specifieke use case.
Het punt is dat hij elke dag data voor dezelfde set kentekens uit een API trekt. Daarbij moeten dan de verwijderingen, wijzigingen en toevoegingen in hun geheel worden doorgevoerd. Dan is verwijderen en de gehele set opnieuw toevoegen de meest efficiŽnte en makkelijke optie.
Als je die data wilt gaan koppelen ligt dat weer iets anders, maar de use case is niet echt duidelijk.
totalvampvrijdag 3 oktober 2014 @ 17:46
quote:
1s.gif Op vrijdag 3 oktober 2014 17:43 schreef Monolith het volgende:

[..]

Normaal gesproken niet natuurlijk, maar je moet altijd kijken naar de specifieke use case.
Het punt is dat hij elke dag data voor dezelfde set kentekens uit een API trekt. Daarbij moeten dan de verwijderingen, wijzigingen en toevoegingen in hun geheel worden doorgevoerd. Dan is verwijderen en de gehele set opnieuw toevoegen de meest efficiŽnte en makkelijke optie.
Als je die data wilt gaan koppelen ligt dat weer iets anders, maar de use case is niet echt duidelijk.
Ja alleen als je voorderest geen koppelingen doet in je database kan het :) alhoewel kentekens altijd hetzelfde blijven natuurlijk.

of anders Nosql gebruiken en de letterlijke json er zo in gooien :P
Monolithvrijdag 3 oktober 2014 @ 17:47
Bij voorkeur trek je alleen de mutaties uit die API. Want daar ligt je bottleneck in dit scenario natuurlijk.
qu63vrijdag 3 oktober 2014 @ 17:47
quote:
0s.gif Op vrijdag 3 oktober 2014 17:35 schreef Monolith het volgende:
Zoals ik het lees kun je net zo goed de database weer leeg kieperen en de nieuwe data erin zetten.
Of is er specifiek een reden in bestaande database records te behouden?
Ik heb er andere velden aan toegevoegd die niet in de RDW database staan ;)
qu63vrijdag 3 oktober 2014 @ 17:48
quote:
0s.gif Op vrijdag 3 oktober 2014 17:47 schreef Monolith het volgende:
Bij voorkeur trek je alleen de mutaties uit die API. Want daar ligt je bottleneck in dit scenario natuurlijk.
Ja, dattum. Ik kan kijken naar de laatste tennaamstellingen, maar daarmee mis ik bijvoorbeeld of een voertuig nog een geldige APK heeft, als gestolen geregistreerd staat, etc.
Monolithvrijdag 3 oktober 2014 @ 17:50
quote:
0s.gif Op vrijdag 3 oktober 2014 17:47 schreef qu63 het volgende:

[..]

Ik heb er andere velden aan toegevoegd die niet in de RDW database staan ;)
Zelfs dat zou je nog in een aparte tabel kunnen zetten en koppelen op kenteken.
Dan kun je de RDW data als leidend houden.
Of wil je ook data bewaren / tonen over kentekens die al verwijderd zijn uit de RDW data?
qu63vrijdag 3 oktober 2014 @ 17:53
Laat ik iets meer uitleggen over mijn database ;)
SQL dump:
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
CREATE TABLE IF NOT EXISTS `voertuigen` (
  `Updated` int(11) NOT NULL,
  `Aantalcilinders` int(16) NOT NULL,
  `Aantalstaanplaatsen` int(16) NOT NULL,
  `Aantalzitplaatsen` int(16) NOT NULL,
  `Cilinderinhoud` int(16) NOT NULL,
  `Datumaanvangtenaamstelling` int(11) NOT NULL,
  `Datumeersteafgiftenederland` int(11) NOT NULL,
  `Datumeerstetoelating` int(11) NOT NULL,
  `Handelsbenaming` varchar(255) NOT NULL,
  `Hoofdbrandstof` varchar(255) NOT NULL,
  `Kenteken` varchar(10) NOT NULL,
  `Merk` varchar(255) NOT NULL,
  `Milieuclassificatie` varchar(255) NOT NULL,
  `Vervaldatumapk` int(11) NOT NULL,
  `Wachtopkeuren` varchar(255) NOT NULL,
  `Voertuig_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Bedrijf_ID` int(11) NOT NULL,
  `EigenarenP` varchar(255) NOT NULL,
  `EigenarenZ` varchar(255) NOT NULL,
  `Klasse` varchar(255) NOT NULL,
  `Categorie` varchar(255) NOT NULL,
  `CarrosserieOmschrijving` varchar(255) NOT NULL,
  `Type` varchar(255) NOT NULL,
  `Variant` varchar(255) NOT NULL,
  `Uitvoering` varchar(255) NOT NULL,
  `Typegoedkeuring` varchar(255) NOT NULL,
  `VervalDatTachograaf` varchar(255) NOT NULL,
  `TijdAanvangTenaamstelling` varchar(255) NOT NULL,
  `Gestolen` varchar(255) NOT NULL,
  `Geexporteerd` varchar(255) NOT NULL,
  `BijzonderheidTekst` varchar(255) NOT NULL,
  `Lengte` varchar(255) NOT NULL,
  `Breedte` varchar(255) NOT NULL,
  `AantalAssen` varchar(255) NOT NULL,
  `AantalWielen` varchar(255) NOT NULL,
  `Wielbasis` varchar(255) NOT NULL,
  `AfwijkendeMaxSnelheid` varchar(255) NOT NULL,
  `AfstandVoorzijdeVrtgTotHartkoppeling` varchar(255) NOT NULL,
  `WAVerzekerd` varchar(255) NOT NULL,
  PRIMARY KEY (`Voertuig_ID`),
  UNIQUE KEY `Kenteken` (`Kenteken`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9740 ;
Tot en met Wachtopkeuren trek uit de RDW API, de rest wordt via andere wegen aangevuld.
Dan heb ik ook nog een andere tabel die bestaat uit bedrijfsgegevens zodat ik straks per bedrijf kan zien welke voertuigen ze hebben.
qu63vrijdag 3 oktober 2014 @ 17:54
quote:
1s.gif Op vrijdag 3 oktober 2014 17:43 schreef Monolith het volgende:

[..]

Normaal gesproken niet natuurlijk, maar je moet altijd kijken naar de specifieke use case.
Het punt is dat hij elke dag data voor dezelfde set kentekens uit een API trekt. Daarbij moeten dan de verwijderingen, wijzigingen en toevoegingen in hun geheel worden doorgevoerd. Dan is verwijderen en de gehele set opnieuw toevoegen de meest efficiŽnte en makkelijke optie.
Als je die data wilt gaan koppelen ligt dat weer iets anders, maar de use case is niet echt duidelijk.
Ik zoek niet op kenteken, ik zoek op voertuigtype, dus ik weet nooit vantevoren hoeveel records ik terug ga krijgen. Het kunnen er meer, minder of evenveel zijn als vandaag.
qu63vrijdag 3 oktober 2014 @ 18:03
quote:
1s.gif Op vrijdag 3 oktober 2014 17:20 schreef Aether het volgende:

[..]

Als het kenteken je ID is zou je hier een PRIMARY KEY van kunnen maken anders een UNIQUE KEY.
Je zou een datumveld kunnen toevoegen wanneer een record in jouw database is aangepast. Records die ouder zijn komen dan niet meer voor in die van de RDW. Dit is ook als archief te gebruiken.
T nadeel is dus dat ik niet weet wanneer de records van de RDW geupdate zijn :{. Ik zou alle 10k records zelf moeten controleren op wijzigingen, en dan pas wel of niet aan mijn database toevoegen.
Monolithvrijdag 3 oktober 2014 @ 18:04
quote:
0s.gif Op vrijdag 3 oktober 2014 17:54 schreef qu63 het volgende:

[..]

Ik zoek niet op kenteken, ik zoek op voertuigtype, dus ik weet nooit vantevoren hoeveel records ik terug ga krijgen. Het kunnen er meer, minder of evenveel zijn als vandaag.
Maakt op zich niet zo heel veel uit. Het relevante aspect is dat je de hele dataset via de API opvraagt, niet enkel mutaties bijvoorbeeld.
Wat je dan vervolgens wil, als ik het goed begrijp, is het volgende:

• Voeg rijen toe aan de eigen database voor alle kentekens in de dataset die nog niet in de eigen database stonden
• Verwijder alle rijen uit de eigen database waarbij het kenteken niet voorkomt in de nieuwe dataset
• Update alle informatie voor al bestaande kentekens

Klopt dat?

Zo ja, dan is deze opzet ook een optie:

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
CREATE TABLE IF NOT EXISTS `voertuigen_RDW` (
  `Updated` int(11) NOT NULL,
  `Aantalcilinders` int(16) NOT NULL,
  `Aantalstaanplaatsen` int(16) NOT NULL,
  `Aantalzitplaatsen` int(16) NOT NULL,
  `Cilinderinhoud` int(16) NOT NULL,
  `Datumaanvangtenaamstelling` int(11) NOT NULL,
  `Datumeersteafgiftenederland` int(11) NOT NULL,
  `Datumeerstetoelating` int(11) NOT NULL,
  `Handelsbenaming` varchar(255) NOT NULL,
  `Hoofdbrandstof` varchar(255) NOT NULL,
  `Kenteken` varchar(10) NOT NULL,
  `Merk` varchar(255) NOT NULL,
  `Milieuclassificatie` varchar(255) NOT NULL,
  `Vervaldatumapk` int(11) NOT NULL,
  `Wachtopkeuren` varchar(255) NOT NULL, 
  PRIMARY KEY (`Kenteken`),
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9740 ;

CREATE TABLE IF NOT EXISTS `voertuigen_other` (
 `Voertuig_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Bedrijf_ID` int(11) NOT NULL,
  `EigenarenP` varchar(255) NOT NULL,
  `EigenarenZ` varchar(255) NOT NULL,
  `Klasse` varchar(255) NOT NULL,
  `Categorie` varchar(255) NOT NULL,
  `CarrosserieOmschrijving` varchar(255) NOT NULL,
  `Type` varchar(255) NOT NULL,
  `Variant` varchar(255) NOT NULL,
  `Uitvoering` varchar(255) NOT NULL,
  `Typegoedkeuring` varchar(255) NOT NULL,
  `VervalDatTachograaf` varchar(255) NOT NULL,
  `TijdAanvangTenaamstelling` varchar(255) NOT NULL,
  `Gestolen` varchar(255) NOT NULL,
  `Geexporteerd` varchar(255) NOT NULL,
  `BijzonderheidTekst` varchar(255) NOT NULL,
  `Lengte` varchar(255) NOT NULL,
  `Breedte` varchar(255) NOT NULL,
  `AantalAssen` varchar(255) NOT NULL,
  `AantalWielen` varchar(255) NOT NULL,
  `Wielbasis` varchar(255) NOT NULL,
  `AfwijkendeMaxSnelheid` varchar(255) NOT NULL,
  `AfstandVoorzijdeVrtgTotHartkoppeling` varchar(255) NOT NULL,
  `WAVerzekerd` varchar(255) NOT NULL,
  `Kenteken` varchar(10)
  PRIMARY KEY (`Voertuig_ID`),
  UNIQUE KEY `Kenteken` (`Kenteken`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9740 ;

Daarbij kieper je dan bij elke nieuwe dataset uit de API de tabel voertuigen_RDW weer leeg en insert je de gehele dataset.
qu63vrijdag 3 oktober 2014 @ 18:06
quote:
0s.gif Op vrijdag 3 oktober 2014 18:04 schreef Monolith het volgende:

[..]

Maakt op zich niet zo heel veel uit. Het relevante aspect is dat je de hele dataset via de API opvraagt, niet enkel mutaties bijvoorbeeld.
Wat je dan vervolgens wil, als ik het goed begrijp, is het volgende:

• Voeg rijen toe aan de eigen database voor alle kentekens in de dataset die nog niet in de eigen database stonden
• Verwijder alle rijen uit de eigen database waarbij het kenteken niet voorkomt in de nieuwe dataset
• Update alle informatie voor al bestaande kentekens

Klopt dat?

Zo ja, dan is deze opzet ook een optie:
[ code verwijderd ]

Daarbij kieper je dan bij elke nieuwe dataset uit de API de tabel voertuigen_RDW weer leeg en insert je de gehele dataset.
Niet helemaal, ik wil ook de voertuigen die gexporteerd/gesloopt zijn behouden.

Maar dat maakt verder niet uit voor de tabellen geloof ik.
Hoe zou ik de SQL-query dan moeten maken?
Monolithvrijdag 3 oktober 2014 @ 18:09
quote:
0s.gif Op vrijdag 3 oktober 2014 18:06 schreef qu63 het volgende:

[..]

Niet helemaal, ik wil ook de voertuigen die gexporteerd/gesloopt zijn behouden.

Maar dat maakt verder niet uit voor de tabellen geloof ik.
Hoe zou ik de SQL-code dan moeten maken?
Als dat de use case is, dan zou ik gewoon voor de insert met on duplicate key update gaan.
slacker_nlvrijdag 3 oktober 2014 @ 18:09
Ik zou het volgende doen. reken de md5sum uit van elk dataset. Vergelijk die md5sum (digest) van je eigen DB tegen die van het RDW: Verschil, record updaten/inserten (incl de digest). Geen verschil, volgend record. En dan kan je via on update ook nog een last_modified oid hebben, dan ben je klaar. En date_created, voila. Dan kan je denk ik redelijk snel door je records heen gaan zonder overal afzonderlijk complete sets te vergelijken.
qu63vrijdag 3 oktober 2014 @ 18:14
quote:
1s.gif Op vrijdag 3 oktober 2014 18:09 schreef Monolith het volgende:

[..]

Als dat de use case is, dan zou ik gewoon voor de insert met on duplicate key update gaan.
INSERT INTO voertuigen (columns) VALUES (values) ON DUPLICATE KEY UPDATE c1=v1, c2=v2, etc

Zoiets?
qu63vrijdag 3 oktober 2014 @ 18:15
quote:
0s.gif Op vrijdag 3 oktober 2014 18:09 schreef slacker_nl het volgende:
Ik zou het volgende doen. reken de md5sum uit van elk dataset. Vergelijk die md5sum (digest) van je eigen DB tegen die van het RDW: Verschil, record updaten/inserten (incl de digest). Geen verschil, volgend record. En dan kan je via on update ook nog een last_modified oid hebben, dan ben je klaar. En date_created, voila. Dan kan je denk ik redelijk snel door je records heen gaan zonder overal afzonderlijk complete sets te vergelijken.
Maar dan dus wel mijn tabel splitsen zoals hier Monolith zei? DIG / [PHP/(My)SQL] voor dummies #118
Monolithvrijdag 3 oktober 2014 @ 18:15
quote:
0s.gif Op vrijdag 3 oktober 2014 18:09 schreef slacker_nl het volgende:
Ik zou het volgende doen. reken de md5sum uit van elk dataset. Vergelijk die md5sum (digest) van je eigen DB tegen die van het RDW: Verschil, record updaten/inserten (incl de digest). Geen verschil, volgend record. En dan kan je via on update ook nog een last_modified oid hebben, dan ben je klaar. En date_created, voila. Dan kan je denk ik redelijk snel door je records heen gaan zonder overal afzonderlijk complete sets te vergelijken.
Waarom zou je dat zo vreselijk omslachtig doen?
Monolithvrijdag 3 oktober 2014 @ 18:16
quote:
0s.gif Op vrijdag 3 oktober 2014 18:15 schreef qu63 het volgende:

[..]

Maar dan dus wel mijn tabel splitsen zoals hier Monolith zei? DIG / [PHP/(My)SQL] voor dummies #118
Nee, dat was meer in de veronderstelling dat je ook wilde verwijderen. Negeer dat maar. ;)
slacker_nlvrijdag 3 oktober 2014 @ 18:19
quote:
1s.gif Op vrijdag 3 oktober 2014 18:15 schreef Monolith het volgende:

[..]

Waarom zou je dat zo vreselijk omslachtig doen?
Hoezo omslachtig? Je kan anders namelijk niet zien wanneer de laatste wijziging heeft plaatsgevonden.
Monolithvrijdag 3 oktober 2014 @ 18:22
quote:
0s.gif Op vrijdag 3 oktober 2014 18:19 schreef slacker_nl het volgende:

[..]

Hoezo omslachtig? Je kan anders namelijk niet zien wanneer de laatste wijziging heeft plaatsgevonden.
Je kunt in je insert en on update gewoon de curdate() meegeven.
slacker_nlvrijdag 3 oktober 2014 @ 18:25
quote:
1s.gif Op vrijdag 3 oktober 2014 18:22 schreef Monolith het volgende:

[..]

Je kunt in je insert en on update gewoon de curdate() meegeven.
Maar als je gewoon klakkeloos importeert zijn de gegevens zonder te checken of de data veranderd is staat curdate altijd op het import-moment.
qu63vrijdag 3 oktober 2014 @ 18:26
quote:
1s.gif Op vrijdag 3 oktober 2014 18:22 schreef Monolith het volgende:

[..]

Je kunt in je insert en on update gewoon de curdate() meegeven.
Die geeft de API van de RDW zelf al mee, maar dat is het moment van opvragen van de gegevens, niet van de laatste actualisatie
Monolithvrijdag 3 oktober 2014 @ 18:27
quote:
0s.gif Op vrijdag 3 oktober 2014 18:25 schreef slacker_nl het volgende:

[..]

Maar als je gewoon klakkeloos importeert zijn de gegevens zonder te checken of de data veranderd is staat curdate altijd op het import-moment.
Ah je bedoelt daadwerkelijke wijzigingen ipv een update met dezelfde data. Ik weet niet of dat vereist is.
slacker_nlvrijdag 3 oktober 2014 @ 18:31
quote:
1s.gif Op vrijdag 3 oktober 2014 18:27 schreef Monolith het volgende:

[..]

Ah je bedoelt daadwerkelijke wijzigingen ipv een update met dezelfde data. Ik weet niet of dat vereist is.
Dat is wel hoe ik de vraag interpreteerde.
quote:
Hoe kan ik nu de ongeveer 10.000 records uit hun API plukken, checken of het kenteken (het enige unieke record) al bestaat en if so, checken of er wijzigingen zijn, en if so de wijzigingen doorvoeren in mijn tabel. Ik kan dan zelf mijn eigen 'updated on' veld wel aanpassen


[ Bericht 24% gewijzigd door slacker_nl op 03-10-2014 18:36:44 ]
qu63vrijdag 3 oktober 2014 @ 18:35
We kunnen het ook anders doen :P

Met mijn script haal ik een deel van de gegevens van de RDW op via Azure: https://datamarket.azure.(...)rtg.open.data#schema

Deze gegevens wil ik verrijken met mijn eigen data en opslaan in mijn eigen database.

Omdat de voertuigen die ik check niet veel verhandeld worden is een wekelijkse check voldoende. Helaas kan ik dus alleen de complete set opvragen. Deze set wil ik dus vergelijken met mijn database en alleen de updates verwerken in mijn database.

Als de gegevens bij de RDW geupdate zijn, wil ik mijn verrijkingen ook checken en updaten.

Daarnaast periodieke updates van mijn verrijkingen. Dit moet alleen in kleine batches gedaan worden, dus ik wil steeds de oudste 5 (ofzo) records updaten (dus degene die t langs geleden gewijzigd zijn).

Hoe zouden jullie de tabellen opzetten?
totalvampvrijdag 3 oktober 2014 @ 18:51
quote:
0s.gif Op vrijdag 3 oktober 2014 18:25 schreef slacker_nl het volgende:

[..]

Maar als je gewoon klakkeloos importeert zijn de gegevens zonder te checken of de data veranderd is staat curdate altijd op het import-moment.
Een update wordt niet uitgevoerd als de data die in de tabel staat hetzelfde is.
Dan heb je daar dus geen last van.
slacker_nlvrijdag 3 oktober 2014 @ 19:00
quote:
0s.gif Op vrijdag 3 oktober 2014 18:51 schreef totalvamp het volgende:

[..]

Een update wordt niet uitgevoerd als de data die in de tabel staat hetzelfde is.
Dan heb je daar dus geen last van.
Bij MySQL wel, ik weet niet hoe andere databases hiermee omgaan.

Hij update de values niet, maar hij triggert mogelijk wel de iets als je die update doet.. Wij doen bijv dit: last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP, waardoor de last_modified aanpast na een update. Of de waardes daadwerkelijk zijn aangepast is niet van belang, de call werd gedaan en wordt zo zichtbaar. Dus..

[ Bericht 11% gewijzigd door slacker_nl op 03-10-2014 19:09:29 ]
Monolithvrijdag 3 oktober 2014 @ 19:07
quote:
0s.gif Op vrijdag 3 oktober 2014 19:00 schreef slacker_nl het volgende:

[..]

Bij MySQL wel, ik weet niet hoe andere databases hiermee omgaan.
Bovendien geef je de curdate mee bij de update dus dan is ie altijd anders. :P
totalvampvrijdag 3 oktober 2014 @ 19:23
quote:
0s.gif Op vrijdag 3 oktober 2014 19:00 schreef slacker_nl het volgende:

[..]

Bij MySQL wel, ik weet niet hoe andere databases hiermee omgaan.

Hij update de values niet, maar hij triggert mogelijk wel de iets als je die update doet.. Wij doen bijv dit: last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP, waardoor de last_modified aanpast na een update. Of de waardes daadwerkelijk zijn aangepast is niet van belang, de call werd gedaan en wordt zo zichtbaar. Dus..
Nee bij MySQL niet, letterlijk net getest.
zelfde data invoegen met een INSERT + UPDATE
1
2
3
4
5
6
7
8
9
Veranderd de update tijd niet:
INSERT INTO test
(name, username) VALUES ('b', 'b')
ON DUPLICATE KEY UPDATE name = 'b', username='b'

Veranderd hem wel:
INSERT INTO test
(name, username) VALUES ('b', 'a')
ON DUPLICATE KEY UPDATE name = 'b', username='a'

Als je het zelf wilt testen kun je deze tabel invoegen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE IF NOT EXISTS `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `username` varchar(255) NOT NULL,
  `last_update` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

--
-- Gegevens worden uitgevoerd voor tabel `test`
--

INSERT INTO `test` (`id`, `name`, `username`, `last_update`) VALUES
(1, 'a', 'a', '0000-00-00 00:00:00'),
(2, 'b', 'a', '0000-00-00 00:00:00');

Om daarna eerst deze query uit te voeren:
1
2
3
4
5
6
7
8
9
10
11
Deze zal niks doen:

INSERT INTO test
(name, username) VALUES ('a', 'a')
ON DUPLICATE KEY UPDATE name = 'a', username='a'


Deze wel:
INSERT INTO test
(name, username) VALUES ('b', 'a')
ON DUPLICATE KEY UPDATE name = 'b', username='a'
Monolithvrijdag 3 oktober 2014 @ 19:26
quote:
0s.gif Op vrijdag 3 oktober 2014 19:00 schreef slacker_nl het volgende:

[..]

Bij MySQL wel, ik weet niet hoe andere databases hiermee omgaan.

Hij update de values niet, maar hij triggert mogelijk wel de iets als je die update doet.. Wij doen bijv dit: last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP, waardoor de last_modified aanpast na een update. Of de waardes daadwerkelijk zijn aangepast is niet van belang, de call werd gedaan en wordt zo zichtbaar. Dus..
Niet alleen DEFAULT, ook ON UPDATE CURRENT_TIMESTAMP.
qu63vrijdag 3 oktober 2014 @ 23:40
Aangezien ik het toch rij voor rij uit zou moeten voeren, kan ik net zo goed eerst een "SELECT * FROM voertuigen WHERE kenteken=$kenteken" doen en op basis daarvan INSERT of UPDATE doen.

Toch :?
qu63zaterdag 4 oktober 2014 @ 01:26
Dit lijkt mij nu wel een redelijke oplossing:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$columns 
implode(", ",array_keys($code));
$escaped_values array_map(NULLarray_values($code));
$values  implode(", "$escaped_values);
$sql "SELECT kenteken FROM voertuigen WHERE kenteken='".$item["M:PROPERTIES"]["D:KENTEKEN"]."1'";
$result mysqli_query($con$sql);
if(
mysqli_num_rows($result)>0)
    {
    
$sql "UPDATE voertuigen SET Updated='".$item['UPDATED']."', Datumaanvangtenaamstelling='".strtotime($item["M:PROPERTIES"]["D:DATUMAANVANGTENAAMSTELLING"])."', VervaldatumAPK='".strtotime($item["M:PROPERTIES"]["D:VERVALDATUMAPK"])."', Wachtopkeuren='".$item["M:PROPERTIES"]["D:WACHTOPKEUREN"]."' WHERE kenteken='".$item["M:PROPERTIES"]["D:KENTEKEN"]."'";
    
$query mysqli_query($con,$sql);
    }
    else
    {
    
$sql "INSERT INTO `voertuigen` ($columns) VALUES ($values)";
    
$query mysqli_query($con,$sql);
    list(
$klasse$category$EigenarenP$EigenarenZ$CarrosserieOmschrijving$Type$Variant$Uitvoering$Typegoedkeuring$VervalDatTachograaf$TijdAanvangTenaamstelling$Gestolen$Geexporteerd$WAVerzekerd$BijzonderheidTekst$Lengte$Breedte$AantalAssen$AantalWielen$Wielbasis$AfwijkendeMaxSnelheid$AfstandVoorzijdeVrtgTotHartkoppeling) = get_ovi($item["M:PROPERTIES"]["D:KENTEKEN"]);
    
$sql "Update voertuigen SET klasse='".$klasse."', Categorie='".$category."', EigenarenP='".$EigenarenP."', EigenarenZ='".$EigenarenZ."', CarrosserieOmschrijving='".$CarrosserieOmschrijving."', Type='".$Type."', Variant='".$Variant."', Uitvoering='".$Uitvoering."', Typegoedkeuring='".$Typegoedkeuring."', VervalDatTachograaf='".strtotime($VervalDatTachograaf)."', TijdAanvangTenaamstelling='".$TijdAanvangTenaamstelling."', Gestolen='".$Gestolen."', Geexporteerd='".$Geexporteerd."', WAVerzekerd='".$WAVerzekerd."', BijzonderheidTekst='".$BijzonderheidTekst."', Lengte='".$Lengte."', Breedte='".$Breedte."', AantalAssen='".$AantalAssen."', AantalWielen='".$AantalWielen."', Wielbasis='".$Wielbasis."', AfwijkendeMaxSnelheid='".$AfwijkendeMaxSnelheid."', AfstandVoorzijdeVrtgTotHartkoppeling='".$AfstandVoorzijdeVrtgTotHartkoppeling."' WHERE Kenteken = '".$item["M:PROPERTIES"]["D:KENTEKEN"]."'";
    
$query mysqli_query($con,$sql);
?>
$con en $code worden eerder al gedefineerd :)
robin007bondzaterdag 4 oktober 2014 @ 11:17
quote:
0s.gif Op zaterdag 4 oktober 2014 01:26 schreef qu63 het volgende:
Dit lijkt mij nu wel een redelijke oplossing:
[ code verwijderd ]

$con en $code worden eerder al gedefineerd :)
Tip: gebruik PDO. :)
mstxzaterdag 4 oktober 2014 @ 11:37
quote:
1s.gif Op zaterdag 4 oktober 2014 11:17 schreef robin007bond het volgende:

[..]

Tip: gebruik PDO. :)
Waarom?
robin007bondzaterdag 4 oktober 2014 @ 12:29
quote:
0s.gif Op zaterdag 4 oktober 2014 11:37 schreef mstx het volgende:

[..]

Waarom?
Als je wilt switchen van database is het veel makkelijker.

Plus er zitten handige dingen in injecties te voorkomen. BindParam etc.
totalvampzaterdag 4 oktober 2014 @ 13:30
quote:
0s.gif Op zaterdag 4 oktober 2014 01:26 schreef qu63 het volgende:
Dit lijkt mij nu wel een redelijke oplossing:
[ code verwijderd ]

$con en $code worden eerder al gedefineerd :)
Of je gebruikt gewoon de INSERT en dan ON DUPLICATE KEY UPDATE

waarom zou je daar omheen werken met een constructie die alleen maar meer queries oplevert...
Monolithzaterdag 4 oktober 2014 @ 13:36
Je kunt ook een Stored procedure schrijven en zo zijn er nog 101 opties. Kies gewoon iets dat werkt, aangezien het voor zover ik kan zien toch niet een of ander enorm project is waarbij de architectuur enorm belangrijk is. Hooguit moet je op een gegeven moment naar performance gaan kijken, maar zolang je nog hele datasets uit een API trekt ligt de bottleneck niet bij wat database interacties.
qu63zaterdag 4 oktober 2014 @ 14:02
quote:
1s.gif Op zaterdag 4 oktober 2014 11:17 schreef robin007bond het volgende:

[..]

Tip: gebruik PDO. :)
Wat is PDO?
qu63zaterdag 4 oktober 2014 @ 14:03
quote:
0s.gif Op zaterdag 4 oktober 2014 13:36 schreef Monolith het volgende:
Je kunt ook een Stored procedure schrijven en zo zijn er nog 101 opties. Kies gewoon iets dat werkt, aangezien het voor zover ik kan zien toch niet een of ander enorm project is waarbij de architectuur enorm belangrijk is. Hooguit moet je op een gegeven moment naar performance gaan kijken, maar zolang je nog hele datasets uit een API trekt ligt de bottleneck niet bij wat database interacties.
Optimalisatie was de volgende stap ja :)
robin007bondzaterdag 4 oktober 2014 @ 14:07
quote:
0s.gif Op zaterdag 4 oktober 2014 14:02 schreef qu63 het volgende:

[..]

Wat is PDO?
http://bit.ly/1uJOkmd
pascal08zaterdag 4 oktober 2014 @ 14:08
Ik zit met een vaag probleem. Ik heb een production server waarop ik een website live wil gooien. Ik heb de bestanden in de root van de webserver geŁpload.

De folder structure ziet er ongeveer zo uit:

/ root
- application
- system
- public
---- assets
---- index.php
---- .htaccess

Als ik nu naar het domein ga krijg ik de melding dat er geen content geŁpload is. Ik snap dat er geen index.php in de root staat en dat dat wel nodig is, maar hoe hou ik dan de private en public content gescheiden? Ik gebruik CodeIgniter trouwens.
robin007bondzaterdag 4 oktober 2014 @ 14:10
quote:
0s.gif Op zaterdag 4 oktober 2014 14:08 schreef pascal08 het volgende:
Ik zit met een vaag probleem. Ik heb een production server waarop ik een website live wil gooien. Ik heb de bestanden in de root van de webserver geŁpload.

De folder structure ziet er ongeveer zo uit:

/ root
- application
- system
- public
---- assets
---- index.php
---- .htaccess

Als ik nu naar het domein ga krijg ik de melding dat er geen content geŁpload is. Ik snap dat er geen index.php in de root staat en dat dat wel nodig is, maar hoe hou ik dan de private en public content gescheiden? Ik gebruik CodeIgniter trouwens.
Volgens mij kun je dat allemaal in je .htaccess regelen. :)
pascal08zaterdag 4 oktober 2014 @ 14:13
quote:
1s.gif Op zaterdag 4 oktober 2014 14:10 schreef robin007bond het volgende:

[..]

Volgens mij kun je dat allemaal in je .htaccess regelen. :)
Er moet dus ook een .htaccess in de root komen?

1
2
3
4
[..]
RewriteEngine On
RewriteBase /public/
[..]

Zoiets?

[ Bericht 20% gewijzigd door pascal08 op 04-10-2014 14:20:26 ]
qu63zaterdag 4 oktober 2014 @ 14:30
quote:
0s.gif Op zaterdag 4 oktober 2014 13:30 schreef totalvamp het volgende:

[..]

Of je gebruikt gewoon de INSERT en dan ON DUPLICATE KEY UPDATE

waarom zou je daar omheen werken met een constructie die alleen maar meer queries oplevert...
Dat bedacht ik me gisteravond ook, maar toen vond ik een reden om dat niet te doen.

Geen idee meer wat die reden was -O- :D
pascal08zaterdag 4 oktober 2014 @ 14:57
quote:
0s.gif Op zaterdag 4 oktober 2014 14:13 schreef pascal08 het volgende:

[..]

Er moet dus ook een .htaccess in de root komen?
[ code verwijderd ]

Zoiets?

De melding is nu weg. Ik heb enkel nog een lege witte pagina nu. Ik heb de bestanden gewoon 1:1 gekopieerd vanuit m'n local environment. Ik snap niet wat er nou fout gaat. :?

Help? :'(
totalvampzaterdag 4 oktober 2014 @ 15:18
quote:
0s.gif Op zaterdag 4 oktober 2014 14:30 schreef qu63 het volgende:

[..]

Dat bedacht ik me gisteravond ook, maar toen vond ik een reden om dat niet te doen.

Geen idee meer wat die reden was -O- :D
Luiheid :P?
qu63zaterdag 4 oktober 2014 @ 15:38
quote:
1s.gif Op zaterdag 4 oktober 2014 15:18 schreef totalvamp het volgende:

[..]

Luiheid :P?
Nee, want ik dacht juist eerst aan INSERT ON DUPLICATE UPDATE :P

t zal de drank wel zijn geweest :')
qu63zaterdag 4 oktober 2014 @ 16:52
quote:
1s.gif Op zaterdag 4 oktober 2014 15:18 schreef totalvamp het volgende:

[..]

Luiheid :P?
Ah, ik weet t al!

Mijn script poepte eerst alle velden uit, en maakte daarna een hele lange rij van alle waarden zodat ik het in ťťn query kon doen. Dat zou dus niet meer lukken met een INSERT ON DUPLICATE UPDATE :)

Maar goed, soms is het nodig om je script eens te herzien :P
mstxzaterdag 4 oktober 2014 @ 17:46
quote:
1s.gif Op zaterdag 4 oktober 2014 12:29 schreef robin007bond het volgende:

[..]

Als je wilt switchen van database is het veel makkelijker.

Plus er zitten handige dingen in injecties te voorkomen. BindParam etc.
Met mysqli kun je ook gewoon parameters binden, en wie switcht er in de praktijk nou echt van database?
slacker_nlzaterdag 4 oktober 2014 @ 19:51
quote:
0s.gif Op zaterdag 4 oktober 2014 17:46 schreef mstx het volgende:

[..]

Met mysqli kun je ook gewoon parameters binden, en wie switcht er in de praktijk nou echt van database?
Bij mijn vorige werkgever gebruikte we sqlite voor de testsuite en postgres voor het echte werk. Of je hebt apps waarbij je een db nodig hebt en die moeten werken of je nu mysql, berkely, postgres of Oracle hebt... shit must work yo.
Rockfirezaterdag 4 oktober 2014 @ 20:04
quote:
0s.gif Op zaterdag 4 oktober 2014 17:46 schreef mstx het volgende:

[..]

Met mysqli kun je ook gewoon parameters binden, en wie switcht er in de praktijk nou echt van database?
Ik heb het al degelijk wel eens meegemaakt. Switchen van database (van MySQL naar Postgres) en helaas was er geen gebruik gemaakt van PDO -O-
mstxzaterdag 4 oktober 2014 @ 20:08
quote:
0s.gif Op zaterdag 4 oktober 2014 20:04 schreef Rockfire het volgende:

[..]

Ik heb het al degelijk wel eens meegemaakt. Switchen van database (van MySQL naar Postgres) en helaas was er geen gebruik gemaakt van PDO -O-
Ja ok, maar hoe zit dat dan met de queries zelf? Moet je dan niet alsnog bepaalde syntax zoals LIMIT...OFFSET aanpassen voor postgres? :?
Rockfirezaterdag 4 oktober 2014 @ 20:09
quote:
0s.gif Op zaterdag 4 oktober 2014 20:08 schreef mstx het volgende:

[..]

Ja ok, maar hoe zit dat dan met de queries zelf? Moet je dan niet alsnog bepaalde syntax zoals LIMIT...OFFSET aanpassen voor postgres? :?
Jawel, maar als dat alles is is het veel minder werk dan ook nog de code ombouwen naar PDO-gebruik
mstxzaterdag 4 oktober 2014 @ 20:13
quote:
0s.gif Op zaterdag 4 oktober 2014 20:09 schreef Rockfire het volgende:

[..]

Jawel, maar als dat alles is is het veel minder werk dan ook nog de code ombouwen naar PDO-gebruik
In principe heb je gelijk, maar het ligt er ook aan hoe de applicatie is opgebouwd. Ik maak nu zelf gebruik van mysqli maar ik zou het in een paar minuten kunnen ombouwen naar PDO of iets anders omdat ik het gewoon in een database-classje heb zitten dus ik hoef maar een paar functies aan te passen. :Y
slacker_nlzaterdag 4 oktober 2014 @ 20:28
quote:
0s.gif Op zaterdag 4 oktober 2014 20:08 schreef mstx het volgende:

[..]

Ja ok, maar hoe zit dat dan met de queries zelf? Moet je dan niet alsnog bepaalde syntax zoals LIMIT...OFFSET aanpassen voor postgres? :?
Dat regelt de ORM voor ons. Whieeee.
Chandlerzondag 5 oktober 2014 @ 11:38
quote:
14s.gif Op donderdag 2 oktober 2014 21:55 schreef KomtTijd... het volgende:
InnoDB tabellen zou je als het goed is niet moeten kunnen kopiŽren door de bestanden in het filesystem te kopiŽren. Althans, misschien kan het goed gaan maar het wordt uitdrukkelijk afgeraden en niet ondersteund.
Tot op heden geen probleem, maar die kunnen nog komen hoor :D
TwenteFCmaandag 6 oktober 2014 @ 23:22
:P Gewoon even omdat ik graag van input van anderen hou,

Hoe zouden jullie de volgende situatie aanpakken;

Een groothandel met een ~10,000 klanten die regelmatig wat bestellen uit een assortiment van 60,000 producten die zijn onderverdeeld in ongeveer 150 categorieŽn.

Waarbij er per klant/inkoopgroep korting gegeven kan worden complete groepen, individuele producten, staffelkorting, uitzonderingen binnen groepen waarop geen korting gegeven mag worden, actie periodes waarvoor een andere prijs geldt, kortingen vanaf een bepaald bedrag en kortingen die zowel als een prijsafspraak of als een percentage kunnen worden gegeven en combinaties hiertussen.

Dit werkt op dit moment allemaal nog "on the fly" maar ik merk zelf dat de performance wanneer bijvoorbeeld gechecked moet worden op staffelkortingen die gegeven worden op een combinatie van een merk en een groep niet is wat het zou moeten zijn.

Is het een gek idee om kortingen voor een klant op het moment van het aanmaken van een regel,en bij het wijzigen / aanmaken van een product wordt gecontroleerd of er klanten zijn die in aanmerkingen komen voor korting. op te slaan in een database, zodat deze berekeningen niet constant in de winkelwagen, bij wijze van hoeven plaats te vinden?
KomtTijd...dinsdag 7 oktober 2014 @ 09:22
Ik zou eerst eens uitzoeken welke queries zo lang duren en waarom, en of je daar iets aan kunt optimaliseren.
Monolithdinsdag 7 oktober 2014 @ 09:51
quote:
19s.gif Op maandag 6 oktober 2014 23:22 schreef TwenteFC het volgende:
:P Gewoon even omdat ik graag van input van anderen hou,

Hoe zouden jullie de volgende situatie aanpakken;

Een groothandel met een ~10,000 klanten die regelmatig wat bestellen uit een assortiment van 60,000 producten die zijn onderverdeeld in ongeveer 150 categorieŽn.

Waarbij er per klant/inkoopgroep korting gegeven kan worden complete groepen, individuele producten, staffelkorting, uitzonderingen binnen groepen waarop geen korting gegeven mag worden, actie periodes waarvoor een andere prijs geldt, kortingen vanaf een bepaald bedrag en kortingen die zowel als een prijsafspraak of als een percentage kunnen worden gegeven en combinaties hiertussen.

Dit werkt op dit moment allemaal nog "on the fly" maar ik merk zelf dat de performance wanneer bijvoorbeeld gechecked moet worden op staffelkortingen die gegeven worden op een combinatie van een merk en een groep niet is wat het zou moeten zijn.

Is het een gek idee om kortingen voor een klant op het moment van het aanmaken van een regel,en bij het wijzigen / aanmaken van een product wordt gecontroleerd of er klanten zijn die in aanmerkingen komen voor korting. op te slaan in een database, zodat deze berekeningen niet constant in de winkelwagen, bij wijze van hoeven plaats te vinden?
Zoals gezegd, kijk eerst waar de bottleneck precies ligt. Alles in MySql proppen is ook niet ideaal, zeker niet als je later besluit om nog eens van Database technologie te wisselen. Het zou bijvoorbeeld ook best kunnen zijn dat het handiger is om hier een back-end service voor in te richten. PHP is niet bepaald optimaal voor zware berekeningen en daarbij kun je met een dergelijke oplossing gebruik maken van caching. Bovendien is het non-blocking, oftewel, de gebruiker hoeft er niet op te wachten. Een andere oplossingsrichting is bijvoorbeeld het gebruik maken van web workers om in de browser asynchroon iets te laten uitvoeren.
KomtTijd...dinsdag 7 oktober 2014 @ 10:04
Sowieso, mocht je voor 1 of 2 berekeningen een pagina op moeten houden, kun je die beter als asynchrone request uitvoeren.
papernotedinsdag 7 oktober 2014 @ 17:50
quote:
19s.gif Op maandag 6 oktober 2014 23:22 schreef TwenteFC het volgende:
:P Gewoon even omdat ik graag van input van anderen hou,

Hoe zouden jullie de volgende situatie aanpakken;

Een groothandel met een ~10,000 klanten die regelmatig wat bestellen uit een assortiment van 60,000 producten die zijn onderverdeeld in ongeveer 150 categorieŽn.

Waarbij er per klant/inkoopgroep korting gegeven kan worden complete groepen, individuele producten, staffelkorting, uitzonderingen binnen groepen waarop geen korting gegeven mag worden, actie periodes waarvoor een andere prijs geldt, kortingen vanaf een bepaald bedrag en kortingen die zowel als een prijsafspraak of als een percentage kunnen worden gegeven en combinaties hiertussen.

Dit werkt op dit moment allemaal nog "on the fly" maar ik merk zelf dat de performance wanneer bijvoorbeeld gechecked moet worden op staffelkortingen die gegeven worden op een combinatie van een merk en een groep niet is wat het zou moeten zijn.

Is het een gek idee om kortingen voor een klant op het moment van het aanmaken van een regel,en bij het wijzigen / aanmaken van een product wordt gecontroleerd of er klanten zijn die in aanmerkingen komen voor korting. op te slaan in een database, zodat deze berekeningen niet constant in de winkelwagen, bij wijze van hoeven plaats te vinden?
Als eerste zou ik uitzoeken waarom die berekeningen zo lang duren en of er niet wat te optimaliseren valt.

Daarnaast zou ik zeker de resultaten van berekeningen in een cache opslaan (in de sessie van de klant, welke in een file, db, memcached, etc... staat). Dan alleen bij wijzigingen die invloed hebben op de berekening dingen updaten.
Djurresdinsdag 7 oktober 2014 @ 19:27
quote:
0s.gif Op zaterdag 4 oktober 2014 20:04 schreef Rockfire het volgende:

[..]

Ik heb het al degelijk wel eens meegemaakt. Switchen van database (van MySQL naar Postgres) en helaas was er geen gebruik gemaakt van PDO -O-
Das wel balen, anders had het in principe alleen een nieuwe handler gekost.
noobswoensdag 8 oktober 2014 @ 13:03
Ik ben aan het stoeien met een 'upload' module voor CMSMS. Ik wil de naamgeving van de bestanden aanpassen aan wat de user aangeeft. Dat kan met onderstaande code:

1<p>{$prompt_destname} <input type="text" name="{$actionid}input_destname" value="" size="40" maxlength="255"/></p>

Ik wil aan de naamgeving een timestamp toevoegen. Hoe kan ik dat het beste oplossen?
Feitelijk moet de input value gecombineerd worden met
1{current_date format="%y%m%d%T"}
KomtTijd...woensdag 8 oktober 2014 @ 13:12
uit de documentatie van de uploads module:

quote:
(optional) prefix="0" - Een boolean die aangeeft of bestandsnamen een prefix moeten hebben
(optional) prefix_feu="0" - Een boolean parameter die aangeeft dat de prefix van de huidige auteur gebruikt moet worden of, als deze niet opgegeven is, de prefix van de huidige tijd (in dechex formaat)
Misschien is de engelse helppage wat duidelijker, mocht je er niet uit komen.

[ Bericht 8% gewijzigd door KomtTijd... op 08-10-2014 13:18:55 ]
slacker_nlwoensdag 8 oktober 2014 @ 13:34
quote:
14s.gif Op woensdag 8 oktober 2014 13:12 schreef KomtTijd... het volgende:
uit de documentatie van de uploads module:

[..]

Misschien is de engelse helppage wat duidelijker, mocht je er niet uit komen.
Noem het dan gewoon has_prefix, prefix_author, dan is het in een keer duidelijk. Naamgeving van dingen.. blergh.
KomtTijd...woensdag 8 oktober 2014 @ 13:36
Ik denk eerder dat de omschrijvingen gewoon brak vertaald zijn, geen zin om het weer te checken gezien dat met 10 seconden trial-and-error ook wel vast te stellen valt.
noobswoensdag 8 oktober 2014 @ 13:49
Bedankt voor de feedback. Nu weet ik in ieder geval in welke hoek ik het moet zoeken.

Juist die helppagina vind ik nogal verwarrend. De code heb ik toegevoegd aan de template voor het formulier (bovenstaande code) dat werkte niet. Vervolgens als de code op de pagina en ik krijg het niet aan de praat.
slacker_nlwoensdag 8 oktober 2014 @ 14:00
quote:
14s.gif Op woensdag 8 oktober 2014 13:36 schreef KomtTijd... het volgende:
Ik denk eerder dat de omschrijvingen gewoon brak vertaald zijn, geen zin om het weer te checken gezien dat met 10 seconden trial-and-error ook wel vast te stellen valt.
Het is ook niet naar jou toe hoor. Ik zie het in onze eigen code base ook. Ding krijgt een naam ala: user_id terwijl we het over een haar_kleur_id hebben. Argh! Dan heb ik liever dat ze het foo noemen.
noobswoensdag 8 oktober 2014 @ 14:09
Het scheelt als je de value op "1" zet natuurlijk. :')

Ik denk dat ik er wel uit ga komen.

Thanks!
Monolithwoensdag 8 oktober 2014 @ 15:04
quote:
0s.gif Op woensdag 8 oktober 2014 14:00 schreef slacker_nl het volgende:

[..]

Het is ook niet naar jou toe hoor. Ik zie het in onze eigen code base ook. Ding krijgt een naam ala: user_id terwijl we het over een haar_kleur_id hebben. Argh! Dan heb ik liever dat ze het foo noemen.
Van myVar1 t/m myVar392 en myTemporaryVar1 t/m myTemporaryVar921 word ik meestal ook niet echt vrolijk. Eťn van de redenen dat ik blij ben dat ik nauwelijks meer met PHP developers te maken heb. :P
Tijnwoensdag 8 oktober 2014 @ 15:24
quote:
0s.gif Op woensdag 8 oktober 2014 15:04 schreef Monolith het volgende:

[..]

Van myVar1 t/m myVar392 en myTemporaryVar1 t/m myTemporaryVar921 word ik meestal ook niet echt vrolijk. Eťn van de redenen dat ik blij ben dat ik nauwelijks meer met PHP developers te maken heb. :P
Dit speelt natuurlijk niet alleen onder PHP-developers, he :P

There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Monolithwoensdag 8 oktober 2014 @ 15:27
quote:
2s.gif Op woensdag 8 oktober 2014 15:24 schreef Tijn het volgende:

[..]

Dit speelt natuurlijk niet alleen onder PHP-developers, he :P

There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Nee, maar de kracht van PHP is echter dat het simpel en laagdrempelig. Dat is ook gelijk het probleem. Bijna iedere debiel kan er mee werken en helaas doen ook veel te veel debielen dat. :P
Je kunt prima programmeren in PHP, hoewel de taal zelf al wel enorm slordig en chaotisch is, maar het gebeurt veel te weinig.
Tijnwoensdag 8 oktober 2014 @ 15:35
Ik heb wel het idee dat het mede dankzij de toolset van vandaag de dag (Composer, Symphony etc.) en de ontwikkelingen in de taal (deprecaten van mysql_ functies enzo) het de laatste tijd wat beter gesteld is.

Maar om eerlijk te zijn zie ik eigenlijk niet zoveel PHP-code van anderen om echt een idee te hebben van wat mensen over het algemeen doen :+

[ Bericht 0% gewijzigd door Tijn op 08-10-2014 16:19:40 ]
qu63woensdag 8 oktober 2014 @ 15:41
quote:
2s.gif Op woensdag 8 oktober 2014 15:35 schreef Tijn het volgende:
Ik heb wel het idee dat het mede dankzij de toolset van vandaag de dag (Composer, Symphony etc.) en de ontwikkelingen in de taal (deprecaten van mysql_ functies enzo) de laatste tijd wat beter gesteld is.

Maar om eerlijk te zijn zie ik eigenlijk niet zoveel PHP-code van anderen om echt een idee te hebben van wat mensen over het algemeen doen :+
Ik zal je mijn code verder besparen dan ;)

Het werkt nu zoals t moet (geloof ik), optimaliseren komt daarna :P
totalvampwoensdag 8 oktober 2014 @ 16:23
quote:
0s.gif Op woensdag 8 oktober 2014 15:04 schreef Monolith het volgende:

[..]

Van myVar1 t/m myVar392 en myTemporaryVar1 t/m myTemporaryVar921 word ik meestal ook niet echt vrolijk. Eťn van de redenen dat ik blij ben dat ik nauwelijks meer met PHP developers te maken heb. :P
Of van die mensen die constant bestaande variabelen OPNIEUW in een andere zetten en dan er uiteindelijk niks mee doen :')

1
2
3
4
<?php

$name 
$_POST['name'];
echo 
$name//WAAAAAAAAAAAAAAAAAAAAAAAAAAAAROM!!!!!
Monolithwoensdag 8 oktober 2014 @ 16:33
quote:
2s.gif Op woensdag 8 oktober 2014 15:35 schreef Tijn het volgende:
Ik heb wel het idee dat het mede dankzij de toolset van vandaag de dag (Composer, Symphony etc.) en de ontwikkelingen in de taal (deprecaten van mysql_ functies enzo) de laatste tijd wat beter gesteld is.

Maar om eerlijk te zijn zie ik eigenlijk niet zoveel PHP-code van anderen om echt een idee te hebben van wat mensen over het algemeen doen :+
Voor de wat grotere projecten wel ja, maar het neemt niet weg dat PHP in de basis nog steeds heel beroerd ontworpen is. Zie bijvoorbeeld deze vermakelijke klaagzang.
Verder wordt er nog heel wat aangeklooid in de PHP wereld.
Tijnwoensdag 8 oktober 2014 @ 16:38
quote:
0s.gif Op woensdag 8 oktober 2014 16:33 schreef Monolith het volgende:

[..]

het neemt niet weg dat PHP in de basis nog steeds heel beroerd ontworpen is
Het is helemaal niet ontworpen. Het is samengesteld uit ingestuurde patches vanuit de community. Dat is de reden dat het zo inconsistent is, maar dat is ook de reden dat het bijvoorbeeld een van de eerste talen buiten Javascript was die JSON ondersteunde. PHP's makke is ook z'n kracht, namelijk dat het kan zijn wat de mensen willen dat het is.
Monolithwoensdag 8 oktober 2014 @ 16:46
quote:
14s.gif Op woensdag 8 oktober 2014 16:38 schreef Tijn het volgende:

[..]

Het is helemaal niet ontworpen. Het is samengesteld uit ingestuurde patches vanuit de community. Dat is de reden dat het zo inconsistent is, maar dat is ook de reden dat het bijvoorbeeld een van de eerste talen buiten Javascript was die JSON ondersteunde.
Dat is geen excuus natuurlijk. Legio projecten werken met community contributions. Dat betekent echter niet dat elke wijziging blind geaccepteerd wordt of dat er geen hele heldere eisen kunnen worden gesteld waar de bijdragen aan moeten voldoen.

quote:
PHP's makke is ook z'n kracht, namelijk dat het kan zijn wat de mensen willen dat het is.
Zoals ik al zei. Iedere debiel kan het in principe gebruiken, dat is zowel een voordeel als een nadeel. Voor mij als developer toch voornamelijk een nadeel. :P
slacker_nlwoensdag 8 oktober 2014 @ 17:04
quote:
2s.gif Op woensdag 8 oktober 2014 15:24 schreef Tijn het volgende:

[..]

Dit speelt natuurlijk niet alleen onder PHP-developers, he :P

There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Klopt. Op mijn werk is het Perl en JS (angular) wat de klok slaat.
Tijnwoensdag 8 oktober 2014 @ 18:36
quote:
0s.gif Op woensdag 8 oktober 2014 16:46 schreef Monolith het volgende:

[..]

Dat is geen excuus natuurlijk. Legio projecten werken met community contributions. Dat betekent echter niet dat elke wijziging blind geaccepteerd wordt of dat er geen hele heldere eisen kunnen worden gesteld waar de bijdragen aan moeten voldoen.
Maar meestal hebben die projecten wel iemand aan het hoofd die de baas is en een visie heeft. Dat is er bij PHP niet. Niemand is de baas en er is geen plan over wat PHP moet zijn. Het is gewoon wat het is.

quote:
Zoals ik al zei. Iedere debiel kan het in principe gebruiken, dat is zowel een voordeel als een nadeel. Voor mij als developer toch voornamelijk een nadeel. :P
Misschien, hoewel je je met kwaliteit wel kunt onderscheiden van de meute. Ik denk dat het voor de wereld als geheel positief is dat er een populaire laagdrempelige programmeertaal bestaat die makkelijk is in te zetten voor het web.
Monolithwoensdag 8 oktober 2014 @ 18:47
quote:
2s.gif Op woensdag 8 oktober 2014 18:36 schreef Tijn het volgende:

[..]

Maar meestal hebben die projecten wel iemand aan het hoofd die de baas is en een visie heeft. Dat is er bij PHP niet. Niemand is de baas en er is geen plan over wat PHP moet zijn. Het is gewoon wat het is.
Je hoeft geen echte centrale leider met een visie te hebben hoor. En er is wel degelijk een PHP team. Releases zijn natuurlijk centraal geregeld. Ik heb op PHP conferenties ook vaak genoeg smeekbedes van ze gehoord om ook wat bij te dragen. Op de vraag waarom de grotere partijen als facebook dat niet doen hadden ze dan niet echt een bevredigend antwoord. :P


quote:
Misschien, hoewel je je met kwaliteit wel kunt onderscheiden van de meute. Ik denk dat het voor de wereld als geheel positief is dat er een populaire laagdrempelige programmeertaal bestaat die makkelijk is in te zetten voor het web.
Oh het voldoet prima voor simpele webtoepassingen. Wil je meer performance dan moet je toch zoals facebook wel je eigen compilers gaan schrijven.
En als je niet zoals facebook groeit vanuit een hobby project dan begin je voor Enterprise level applicaties gewoon gelijk met bijvoorbeeld Java.
robin007bondwoensdag 8 oktober 2014 @ 19:02
quote:
1s.gif Op woensdag 8 oktober 2014 18:47 schreef Monolith het volgende:

[..]

Je hoeft geen echte centrale leider met een visie te hebben hoor. En er is wel degelijk een PHP team. Releases zijn natuurlijk centraal geregeld. Ik heb op PHP conferenties ook vaak genoeg smeekbedes van ze gehoord om ook wat bij te dragen. Op de vraag waarom de grotere partijen als facebook dat niet doen hadden ze dan niet echt een bevredigend antwoord. :P

[..]

Oh het voldoet prima voor simpele webtoepassingen. Wil je meer performance dan moet je toch zoals facebook wel je eigen compilers gaan schrijven.
En als je niet zoals facebook groeit vanuit een hobby project dan begin je voor Enterprise level applicaties gewoon gelijk met bijvoorbeeld Java.
Wat is eigenlijk jouw mening over Python + Django? :)
Tijnwoensdag 8 oktober 2014 @ 19:06
quote:
1s.gif Op woensdag 8 oktober 2014 18:47 schreef Monolith het volgende:

[..]

Ik heb op PHP conferenties ook vaak genoeg smeekbedes van ze gehoord om ook wat bij te dragen. Op de vraag waarom de grotere partijen als facebook dat niet doen hadden ze dan niet echt een bevredigend antwoord. :P
Dat is wel interessant, ja. Je zou zeggen dat grote partijen als Facebook, Wikimedia, Wordpress etc. er veel baat bij hebben om aan PHP mee te bouwen.
Catch22-woensdag 8 oktober 2014 @ 19:08
Facebook heeft toch hiphop?
Tijnwoensdag 8 oktober 2014 @ 19:20
quote:
0s.gif Op woensdag 8 oktober 2014 19:08 schreef Catch22- het volgende:
Facebook heeft toch hiphop?
Maar leveren ze daarmee een bijdrage aan de codebase van PHP?
Catch22-woensdag 8 oktober 2014 @ 19:48
quote:
2s.gif Op woensdag 8 oktober 2014 19:20 schreef Tijn het volgende:

[..]

Maar leveren ze daarmee een bijdrage aan de codebase van PHP?
nee maar wel aan de toepassing. Het is Ūets
robin007bondwoensdag 8 oktober 2014 @ 19:53
quote:
2s.gif Op woensdag 8 oktober 2014 19:06 schreef Tijn het volgende:

[..]

Dat is wel interessant, ja. Je zou zeggen dat grote partijen als Facebook, Wikimedia, Wordpress etc. er veel baat bij hebben om aan PHP mee te bouwen.
Misschien werkt het al prima en zat het probleem vooral bij performance wat Facebook dus met hiphop heeft opgelost.
TwenteFCwoensdag 8 oktober 2014 @ 21:05
quote:
0s.gif Op woensdag 8 oktober 2014 14:00 schreef slacker_nl het volgende:

[..]

Het is ook niet naar jou toe hoor. Ik zie het in onze eigen code base ook. Ding krijgt een naam ala: user_id terwijl we het over een haar_kleur_id hebben. Argh! Dan heb ik liever dat ze het foo noemen.
Dit soort dingen kom ik inderdaad ook wel eens tegen, godsgruwelijk irritant. Wat ook erg vervelend is wanneer mensen vreselijk inconsistente namen verzinnen.

$aGebruikers = [];
$gebruikersArray = [];
$gebruikers = [];

En dat in ťťn pagina, en het komt er dan op neer dat alles wel iets met gebruikers te maken heeft en dat er ook wel gebruikers inzitten maar dat ze maar van die kut namen kiezen omdat ze de variabele niet willen overschrijven, of weet ik wat voor een reden ze hebben.

Of mensen die een hekel lijken te hebben aan namen die langer zijn bijv. 8 karakters.
Geef die krengen gewoon een naam die in 1 oog opslag te begrijpen is, en dat je weet wat er inzit.
raptorixdonderdag 9 oktober 2014 @ 01:56
quote:
0s.gif Op woensdag 8 oktober 2014 16:23 schreef totalvamp het volgende:

[..]

Of van die mensen die constant bestaande variabelen OPNIEUW in een andere zetten en dan er uiteindelijk niks mee doen :')
[ code verwijderd ]

Is daar geen fatsoenlijke tooling voor? Ik develop met name in c# en voor visual studio gebruiken we resharper, als ik daar een variable definieer die niet gebruikt word begint die gelijk te bokken, net zoals als een Variabele mogelijk niet aan confentions voldoet.
raptorixdonderdag 9 oktober 2014 @ 01:57
quote:
0s.gif Op woensdag 8 oktober 2014 15:27 schreef Monolith het volgende:

[..]

Nee, maar de kracht van PHP is echter dat het simpel en laagdrempelig. Dat is ook gelijk het probleem. Bijna iedere debiel kan er mee werken en helaas doen ook veel te veel debielen dat. :P
Je kunt prima programmeren in PHP, hoewel de taal zelf al wel enorm slordig en chaotisch is, maar het gebeurt veel te weinig.
In elke taal kun je prima programmeren, echter als je taal de basis al niet afdwingt dan is de kans op brokken groot, daarom snap ik niet waarom mensen altijd maar worden aangezet om te beginnen met PHP en of Javascript, terwijl dat wel de slechtste talen zijn om te leren developen.
raptorixdonderdag 9 oktober 2014 @ 01:58
quote:
1s.gif Op woensdag 8 oktober 2014 17:04 schreef slacker_nl het volgende:

[..]

Klopt. Op mijn werk is het Perl en JS (angular) wat de klok slaat.
Werk je toevallig voor booking.com :+ ?

Edit: Ik ben dement, had je dit al eerder gevraagt :)
d4v1ddonderdag 9 oktober 2014 @ 02:55
quote:
0s.gif Op woensdag 8 oktober 2014 16:23 schreef totalvamp het volgende:

[..]

Of van die mensen die constant bestaande variabelen OPNIEUW in een andere zetten en dan er uiteindelijk niks mee doen :')
[ code verwijderd ]

van die mensen die onzinnige comments maken waar je niks aan hebt zijn ook irritant
10.gif
slacker_nldonderdag 9 oktober 2014 @ 06:12
quote:
0s.gif Op donderdag 9 oktober 2014 01:58 schreef raptorix het volgende:

[..]

Werk je toevallig voor booking.com :+ ?

Edit: Ik ben dement, had je dit al eerder gevraagt :)
Nee, maar wel in Amsterdam. Perlhoofdstad van Nederland 8-)

[ Bericht 7% gewijzigd door slacker_nl op 09-10-2014 07:21:35 (mobiel af) ]
Monolithdonderdag 9 oktober 2014 @ 08:52
quote:
0s.gif Op donderdag 9 oktober 2014 01:57 schreef raptorix het volgende:

[..]

In elke taal kun je prima programmeren, echter als je taal de basis al niet afdwingt dan is de kans op brokken groot, daarom snap ik niet waarom mensen altijd maar worden aangezet om te beginnen met PHP en of Javascript, terwijl dat wel de slechtste talen zijn om te leren developen.
Juist vanwege de laagdrempeligheid en als je in de praktijk wilt leren dan is dat lekke makkelijk.
Ik zou echter Łberhaupt niet gelijk beginnen met programmeren, maar met een iets abstractere basis.
Een groter probleem is mijns inziens juist dat mensen beginnen met een beetje klooien, zonder nou echt de fundamenten te snappen.
n8ndonderdag 9 oktober 2014 @ 09:00
quote:
0s.gif Op donderdag 9 oktober 2014 01:57 schreef raptorix het volgende:

[..]

In elke taal kun je prima programmeren, echter als je taal de basis al niet afdwingt dan is de kans op brokken groot, daarom snap ik niet waarom mensen altijd maar worden aangezet om te beginnen met PHP en of Javascript, terwijl dat wel de slechtste talen zijn om te leren developen.
javascript is fucking baas. Prima instapper juist.
Tijndonderdag 9 oktober 2014 @ 09:10
quote:
1s.gif Op donderdag 9 oktober 2014 09:00 schreef n8n het volgende:

[..]

javascript is fucking baas. Prima instapper juist.
Het probleem met Javascript is dat je echt heel goed moet weten hoe de taal werkt voordat je er goed mee aan de slag kunt. Er zijn heel veel dingen die stilzwijgend gebeuren en niet altijd even logisch zijn. Ik denk dat een beginner zich vooral moet concentreren op hoe programmeren Łberhaupt werkt en dan zijn de quirks van JS eigenlijk onnodige ballast.
Monolithdonderdag 9 oktober 2014 @ 09:15
quote:
1s.gif Op donderdag 9 oktober 2014 09:00 schreef n8n het volgende:

[..]

javascript is fucking baas. Prima instapper juist.
1
2
console.log(0.4 + 0.3);
console.log(0.4 + 0.2);


Wat zie je in de console als je dit uitvoert?
Tijndonderdag 9 oktober 2014 @ 09:39
quote:
0s.gif Op donderdag 9 oktober 2014 09:15 schreef Monolith het volgende:
[..]
[ code verwijderd ]
Wat zie je in de console als je dit uitvoert?
Dat floats niet precies zijn ligt niet aan Javascript, dat komt door je CPU. Elke programmeertaal heeft hier last van.

Als ik in C uitvoer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main (int argv, char* argc[]) {
  
  if(0.4 + 0.3 == 0.7)
  {
    printf("0.4 + 0.3 = 0.7\r\n");
  }
  else
  {
    printf("wut?\r\n");
  }
  
  if(0.4 + 0.2 == 0.6)
  {
    printf("0.4 + 0.2 = 0.6\r\n");
  }
  else
  {
    printf("wut?\r\n");
  }

  return EXIT_SUCCESS;   
}

Dan is de output:

1
2
0.4 + 0.3 = 0.7
wut?
robin007bonddonderdag 9 oktober 2014 @ 09:53
Java is in mijn ogen de beste taal om te beginnen. Forceert een paradigma waardoor je beginners niet verward.
slacker_nldonderdag 9 oktober 2014 @ 09:58
Ik zou juist beginnen met shell scriptjes... O+
Hoplahopladonderdag 9 oktober 2014 @ 10:01
quote:
0s.gif Op donderdag 9 oktober 2014 09:58 schreef slacker_nl het volgende:
Ik zou juist beginnen met shell scriptjes... O+
Lekker BASH coden!
Tijndonderdag 9 oktober 2014 @ 10:03
De beste programmeercursus die ik ooit gevolgd heb begon met assembly en richtte zich daarna op C. Ik denk dat dat eigenlijk het beste pad is voor beginners.
robin007bonddonderdag 9 oktober 2014 @ 10:04
quote:
14s.gif Op donderdag 9 oktober 2014 10:03 schreef Tijn het volgende:
De beste programmeercursus die ik ooit gevolgd heb begon met assembly en richtte zich daarna op C. Ik denk dat dat eigenlijk het beste pad is voor beginners.
:o
Ben je niet bang dat ze in het procedurele blijven hangen?
Tijndonderdag 9 oktober 2014 @ 10:05
quote:
1s.gif Op donderdag 9 oktober 2014 10:04 schreef robin007bond het volgende:
[..]
:o
Ben je niet bang dat ze in het procedurele blijven hangen?
Nee. Als je in de praktijk aan de slag wil, kun je toch niet om objecten heen.
robin007bonddonderdag 9 oktober 2014 @ 10:10
quote:
14s.gif Op donderdag 9 oktober 2014 10:05 schreef Tijn het volgende:

[..]

Nee. Als je in de praktijk aan de slag wil, kun je toch niet om objecten heen.
Nou ja, helaas wordt er nog altijd vandaag de dag enkel procedureel in PHP geprogrammeerd. Gelukkig lijkt dat steeds minder te worden, maar toch. :P
Tijndonderdag 9 oktober 2014 @ 10:11
quote:
1s.gif Op donderdag 9 oktober 2014 10:10 schreef robin007bond het volgende:
[..]
Nou ja, helaas wordt er nog altijd vandaag de dag enkel procedureel in PHP geprogrammeerd. Gelukkig lijkt dat steeds minder te worden, maar toch. :P
Met al die frameworks tegenwoordig zal dat wel meevallen toch?

Hoe dan ook: liever iemand die goede procedurele code schrijft, dan iemand die maar wat aanrommelt met objecten.
KomtTijd...donderdag 9 oktober 2014 @ 10:20
quote:
0s.gif Op donderdag 9 oktober 2014 09:58 schreef slacker_nl het volgende:
Ik zou juist beginnen met shell scriptjes... O+
:r als er iets aids is... Ik heb PHP op mijn router geÔnstalleerd om niet te hoeven bashen.
noobsdonderdag 9 oktober 2014 @ 15:09
quote:
14s.gif Op woensdag 8 oktober 2014 13:12 schreef KomtTijd... het volgende:
uit de documentatie van de uploads module:
[..]
Misschien is de engelse helppage wat duidelijker, mocht je er niet uit komen.
Ik zit nu op het punt dat ik problemen heb met uploaden vanaf mobiel. Selecteren van bestanden gaat perfect tot ik het bestand ga uploaden. Bij iPhone zie ik een preview maar wordt het bestand niet geupload met uiteindelijk een timeout en bij HTC geeft ie een foutmelding wat betreft de extentie (die ontbreekt volgens mij).

In de helpfile wordt verder niet gerept over mobiel. Heb jij een idee hoe ik dit op kan lossen?
Monolithdonderdag 9 oktober 2014 @ 15:44
quote:
14s.gif Op donderdag 9 oktober 2014 10:11 schreef Tijn het volgende:
[..]
Met al die frameworks tegenwoordig zal dat wel meevallen toch?
Hoe dan ook: liever iemand die goede procedurele code schrijft, dan iemand die maar wat aanrommelt met objecten.
Het probleem is dat je dan nog steeds vaak dit soort zaken krijgt:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
public class myController {

    @
RequestMapping("/product/@id")
    public function 
loadProductPage() {

        
//IK PLEUR GEWOON LEKKER AL M'N CODE HIERNEER, 
        //WANT VAN DESIGN PATTERNS OF OO PRINCIPLES HEB IK NOG NOOIT GEHOORD.
    
}

}
?>
noobsdonderdag 9 oktober 2014 @ 15:46
Via iPhone kan ik in het admin gedeelte van CMSMS uberhaupt geen bestanden uploaden. Dat gaat dan sowieso niet werken ben ik bang.
HTC lukt wel (maar inderdaad zonder extentie), daar moet nog wel omheen zijn te komen.

Edit: Fucking iOS. Het zit kennelijk in mijn versie na testen op meerdere devices.

[ Bericht 17% gewijzigd door noobs op 09-10-2014 16:06:45 ]
xaban06donderdag 9 oktober 2014 @ 16:27
Ik wil met preg_match checken op letters, cijfers en -. Dat doe ik met:
1"/^[a-zA-Z\d-]+$/"

Het werkt, maar klopt het ook?
Hoplahopladonderdag 9 oktober 2014 @ 16:50
quote:
0s.gif Op donderdag 9 oktober 2014 16:27 schreef xaban06 het volgende:
Ik wil met preg_match checken op letters, cijfers en -. Dat doe ik met:
[ code verwijderd ]
Het werkt, maar klopt het ook?
Doe gewoon lekker "/^\w+$/" ben je meteen klaar.
Hoplahopladonderdag 9 oktober 2014 @ 16:50
quote:
0s.gif Op donderdag 9 oktober 2014 16:27 schreef xaban06 het volgende:
Ik wil met preg_match checken op letters, cijfers en -. Dat doe ik met:
[ code verwijderd ]
Het werkt, maar klopt het ook?
En wat moet het precies matchen?
xaban06donderdag 9 oktober 2014 @ 17:06
quote:
0s.gif Op donderdag 9 oktober 2014 16:50 schreef Hoplahopla het volgende:
[..]
En wat moet het precies matchen?
Het moet altijd letters en cijfers bevatten, niet hoofdlettergevoelig. Er mag een - voorkomen, maar hoeft niet altijd. Buiten dit mag er niks anders in voorkomen.
Monolithdonderdag 9 oktober 2014 @ 17:07
quote:
0s.gif Op donderdag 9 oktober 2014 16:27 schreef xaban06 het volgende:
Ik wil met preg_match checken op letters, cijfers en -. Dat doe ik met:
[ code verwijderd ]
Het werkt, maar klopt het ook?
ik zou nog wel even een \ voor die laatste - zitten. In principe is het zo geldig, maar bijvoorbeeld iets als /^[abcde-jklmn]+$/ matcht niet op a-, /^[abcde\-jklmn]+$/ wel.

quote:
0s.gif Op donderdag 9 oktober 2014 16:50 schreef Hoplahopla het volgende:
[..]
Doe gewoon lekker "/^\w+$/" ben je meteen klaar.
Nee, want dan heb je - niet.
Hoplahopladonderdag 9 oktober 2014 @ 17:09
Owja. Underscore. Verkeerd gezien.
slacker_nldonderdag 9 oktober 2014 @ 17:34
quote:
0s.gif Op donderdag 9 oktober 2014 16:27 schreef xaban06 het volgende:
Ik wil met preg_match checken op letters, cijfers en -. Dat doe ik met:
[ code verwijderd ]
Het werkt, maar klopt het ook?
Het klopt, maar ik zou het [\w-]+ doen, of [[:alnum:]-]+ en misschien zelfs: [\p{Alnum}-] (Unicode).
robin007bonddonderdag 9 oktober 2014 @ 17:42
quote:
0s.gif Op donderdag 9 oktober 2014 15:44 schreef Monolith het volgende:
[..]
Het probleem is dat je dan nog steeds vaak dit soort zaken krijgt:
[ code verwijderd ]
:D
slacker_nldonderdag 9 oktober 2014 @ 17:44
quote:
14s.gif Op donderdag 9 oktober 2014 10:20 schreef KomtTijd... het volgende:
[..]
:r als er iets aids is... Ik heb PHP op mijn router geÔnstalleerd om niet te hoeven bashen.
Heiden. Shell scriptjes zijn zo geniaal tof vet simpel. Ik zou echt geen PHP willen gebruiken daarvoor. Maar goed, ik schrijf in Perl, dan zit er ook een kronkel in je hoofd.
xaban06donderdag 9 oktober 2014 @ 20:28
quote:
0s.gif Op donderdag 9 oktober 2014 17:34 schreef slacker_nl het volgende:
[..]
Het klopt, maar ik zou het [\w-]+ doen, of [[:alnum:]-]+ en misschien zelfs: [\p{Alnum}-] (Unicode).
Maar underscore zit toch ook in \w ?
raptorixdonderdag 9 oktober 2014 @ 20:46
quote:
14s.gif Op donderdag 9 oktober 2014 10:11 schreef Tijn het volgende:
[..]
Met al die frameworks tegenwoordig zal dat wel meevallen toch?
Hoe dan ook: liever iemand die goede procedurele code schrijft, dan iemand die maar wat aanrommelt met objecten.
Frameworks zijn handig, echter als je een framework zomaar gebruikt zonder de onderliggende basis te kennen is het vragen om problemen, zie je veel met JQuery, mensen zien vaak niet in dat je onderliggend gewoon DOM transformaties aan het doen bent, vandaar dat performance vaak dramatisch word :)
TwenteFCdonderdag 9 oktober 2014 @ 20:51
quote:
0s.gif Op donderdag 9 oktober 2014 17:44 schreef slacker_nl het volgende:
[..]
Heiden. Shell scriptjes zijn zo geniaal tof vet simpel. Ik zou echt geen PHP willen gebruiken daarvoor. Maar goed, ik schrijf in Perl, dan zit er ook een kronkel in je hoofd.
Een bijverschijnsel is dat je het 100x meldt? :P
slacker_nldonderdag 9 oktober 2014 @ 21:28
quote:
0s.gif Op donderdag 9 oktober 2014 20:28 schreef xaban06 het volgende:

[..]

Maar underscore zit toch ook in \w ?
Ja. Maar daarom de POSIX alnum en/of unicode variant.

En ik schrijf Perl.
KomtTijd...vrijdag 10 oktober 2014 @ 00:41
quote:
0s.gif Op donderdag 9 oktober 2014 17:44 schreef slacker_nl het volgende:
[..]
Heiden. Shell scriptjes zijn zo geniaal tof vet simpel. Ik zou echt geen PHP willen gebruiken daarvoor. Maar goed, ik schrijf in Perl, dan zit er ook een kronkel in je hoofd.
Scheer je weg uit het PHP-topic.
xaban06vrijdag 10 oktober 2014 @ 01:07
1number_format(100/$bar->foo, 1);

Hij lijkt de decimalen te negeren van $bar->foo.

Als $bar->foo bijvoorbeeld 3.4 is krijg ik als resultaat 33.3, hij rond de 3.4 dus af naar 3 voordat hij rekent.

Hoe komt dat en hoe op te lossen?

/edit
Nevermind, opgelost. Moest er een string van maken :)
CrashOvrijdag 10 oktober 2014 @ 02:21
quote:
0s.gif Op vrijdag 10 oktober 2014 01:07 schreef xaban06 het volgende:
[ code verwijderd ]
Hij lijkt de decimalen te negeren van $bar->foo.
Als $bar->foo bijvoorbeeld 3.4 is krijg ik als resultaat 33.3, hij rond de 3.4 dus af naar 3 voordat hij rekent.
Hoe komt dat en hoe op te lossen?
/edit
Nevermind, opgelost. Moest er een string van maken :)
Code die hier staat geeft bij mij gewoon direct 29.4 hoor.
Wel wel mogelijk is dat bij jou de typecasting wat nukkig deed. (100 zag hij dan als int, waardoor hij besloot om de (string??) van 3.4, ook te casten naar een int. wat 3 geeft. Oplossing daarvoor was dan om aan te geven dat 100 een float is door er 100f van te maken.

Het grote nadeel van de dynamische typecasting van php. Is gewoon alles defineren als int, float, string etc toch handiger :P
Lightvrijdag 10 oktober 2014 @ 23:11
quote:
1s.gif Op woensdag 8 oktober 2014 17:04 schreef slacker_nl het volgende:
[..]
Klopt. Op mijn werk is het Perl en JS (angular) wat de klok slaat.
Een van de weinige bedrijven waar nog het een en ander met Perl gedaan wordt, denk ik.
slacker_nlzaterdag 11 oktober 2014 @ 06:43
quote:
0s.gif Op vrijdag 10 oktober 2014 23:11 schreef Light het volgende:

[..]

Een van de weinige bedrijven waar nog het een en ander met Perl gedaan wordt, denk ik.
Valt mee. Krijg geregeld aanbiedingen van head hunters/recruiters.
xaban06zaterdag 11 oktober 2014 @ 07:32
1
2
3
<?php
date_format
(new DateTime($test->datum), 'd F Y');
?>

Wordt weergegeven als: 27 January 2014
Dit wil ik vertalen naar het Nederlands, dus: 27 januari 2014

Volgens mij moet dit met setlocale(LC_TIME, "nl_NL"); + strftime();

Ik kom er echter niet uit om strftime(); te gebruiken zonder een extra regel hoeven te gebruiken. Of ontkom ik daar niet aan?

[ Bericht 0% gewijzigd door xaban06 op 11-10-2014 07:38:13 ]
slacker_nlzaterdag 11 oktober 2014 @ 09:29
quote:
0s.gif Op zaterdag 11 oktober 2014 07:32 schreef xaban06 het volgende:
[ code verwijderd ]
Wordt weergegeven als: 27 January 2014
Dit wil ik vertalen naar het Nederlands, dus: 27 januari 2014
Volgens mij moet dit met setlocale(LC_TIME, "nl_NL"); + strftime();
Ik kom er echter niet uit om strftime(); te gebruiken zonder een extra regel hoeven te gebruiken. Of ontkom ik daar niet aan?
1
2
3
4
5
6
7
8
9
10
date_default_timezone_set("Europe/Amsterdam");
# Ik zet alles om naar NL, jij alleen je tijd. Pick any.
setlocale(LC_ALL, array(
    'nl_NL.utf8',
    '[email protected]',
    '[email protected]',
    'nl_NL.iso88591',
    'nl_NL',
    'POSIX',
));
Zoiets? Nee, je moet inderdaad de strftime gebruiken, die maakt gebruik van de locale setting.

1
2
setlocale(LC_TIME, "de_DE"); //only necessary if the locale isn't already set
$formatted_time = strftime("%a %e.%l.%Y", $mytime->getTimestamp())
http://stackoverflow.com/(...)ing-localegetdefault

[ Bericht 16% gewijzigd door slacker_nl op 11-10-2014 09:47:44 ]
xaban06zaterdag 11 oktober 2014 @ 09:39
quote:
0s.gif Op zaterdag 11 oktober 2014 09:29 schreef slacker_nl het volgende:
[..]
[ code verwijderd ]
Zoiets?
Volgens mij ben ik onduidelijk geweest met mijn vraag :P

Dit wordt in het Engels weergegeven:
1
2
3
<?php
date_format
(new DateTime($test->datum), 'd F Y');
?>

Dat wil ik in het Nederlands, daarvoor moet ik functie strftime(); gebruiken, maar krijg het niet helemaal geimplementeerd. Of ik moet met extra regels en $vars werken.
slacker_nlzaterdag 11 oktober 2014 @ 09:49
Deze is beter: http://nl1.php.net/intldateformatter.setpattern
xaban06zaterdag 11 oktober 2014 @ 09:49
Opgelost :)
1<?php echo strftime("%e %B %Y"strtotime($test->datum)); ?>
slacker_nlzaterdag 11 oktober 2014 @ 09:52
quote:
0s.gif Op zaterdag 11 oktober 2014 09:49 schreef xaban06 het volgende:
Opgelost :)
[ code verwijderd ]
Dat zou ik die strtotime weglaten en gelijk $test->datum->getTimestamp doen.
xaban06zondag 12 oktober 2014 @ 13:25
Mijn website wordt op het moment zo opgebouwd (index.php):

- include controller.php (deze checkt in de URI welke pagina geladen moet worden en slaat dit op als $show == "blog" of $show == "contact".)
- include "inc/header-html.php";
- if ($show == "blog") { include "inc/blog.php"; }
- if ($show == "contact") { include "inc/contact.php"; }
- include "inc/footer-html.php";

Het probleem hierbij is dat de <meta> en <title> altijd hetzelfde is, omdat ik in blog.php/contact.php pas weet welke data er getoond zal worden, terwijl de <meta>/<title> in "inc/header-html.php" zit.

Dit dacht ik op te lossen door mijn index.php aan te passen naar:
- include functions.php
- include controller.php (deze checkt in de URI welke pagina geladen moet worden en slaat dit op als $show == "blog" or $show == "contact")
- if ($show == "blog") { include "inc/blog.php"; }
- if ($show == "contact") { include "inc/contact.php"; }

Het verschil zit hem in dat de header-html.php wordt geladen in blog.php/contact.php.

functions.php:
1
2
3
4
5
6
7
8
9
10
11
<?php
function showPage($page) {
    
$inc    "inc/";

    include 
$inc .'header-html.php';
    
    include 
$inc ."$page";
    
    include 
$inc .'footer-html.php';
}
?>
En in blog.php/contact.php heb ik dan:
// hoop php script, waar ik dus ook gelijk <meta>/<title> definieer en onderaan heb ik dan:
showPage("blog-html.php");

De HTML wordt netjes opgebouwd, maar veel $vars/$objects worden genegeerd. Heeft dat te maken met de functie die ik gebruik? Kan je geen bestanden includen binnen een functie oid?
papernotezondag 12 oktober 2014 @ 13:54
Zie http://php.net/manual/en/function.include.php en http://php.net/manual/en/language.variables.scope.php

Als je include aanroept, dan heb je in het geÔncludeerde bestand de beschikking over de variablen die binnen scope vallen op de regel van de include. Dus in jouw geval: alle variabelen die binnen de functie showPage beschikbaar zijn. Daar vallen variabelen uit blog.php/contact.php waarschijnlijk niet onder.

Overigens kun je jouw probleem wellicht beter oplossen middels output buffering. Voorbeeld:

1
2
3
4
5
6
7
8
9
<?php
ob_start
();
include 
'blog.php'// Zet ook de meta/title objecten
$content ob_get_clean();

include 
'header-html.php';
echo 
$content;
include 
'footer-html.php';
?>
xaban06zondag 12 oktober 2014 @ 14:10
quote:
2s.gif Op zondag 12 oktober 2014 13:54 schreef papernote het volgende:
Zie http://php.net/manual/en/function.include.php en http://php.net/manual/en/language.variables.scope.php
Als je include aanroept, dan heb je in het geÔncludeerde bestand de beschikking over de variablen die binnen scope vallen op de regel van de include. Dus in jouw geval: alle variabelen die binnen de functie showPage beschikbaar zijn. Daar vallen variabelen uit blog.php/contact.php waarschijnlijk niet onder.
Overigens kun je jouw probleem wellicht beter oplossen middels output buffering. Voorbeeld:
[ code verwijderd ]
Als ik het goed begrijp alles wat tussen ob_start(); en ob_get_clean(); staat wordt niet verzonden, maar vastgehouden in een buffer? Tot dat je het zelf echo'd? Maar je kan de data die worden genereerd in je buffer wel gewoon gebruiken zonder te verzenden?

Ben een vrij rookie met php en nog nooit output buffering gebruikt.
papernotezondag 12 oktober 2014 @ 14:14
Correct. Alle php-code tussen ob_start en ob_get_clean wordt uitgevoerd, maar de output wordt gebufferd (in het voorbeeld sla ik het op in $content).

Als je dus in blog.php iets doet als: $meta = "lalala"; $title = "lololo"; , dan kun je dat verderop gebruiken.
slacker_nlzondag 12 oktober 2014 @ 14:24
Maar om dit soort problemen te voorkomen hebben we toch templating engines?
xaban06zondag 12 oktober 2014 @ 14:30
quote:
0s.gif Op zondag 12 oktober 2014 14:24 schreef slacker_nl het volgende:
Maar om dit soort problemen te voorkomen hebben we toch templating engines?
Geen ervaring mee. Ik doe het in mijn vrije tijd en helaas te weinig tijd om het allemaal te leren.
Tijnzondag 12 oktober 2014 @ 14:32
quote:
1s.gif Op zondag 12 oktober 2014 14:30 schreef xaban06 het volgende:

[..]

Geen ervaring mee. Ik doe het in mijn vrije tijd en helaas te weinig tijd om het allemaal te leren.
Juist als je er weinig tijd in wil steken zou ik gebruik maken van bestaande systemen dan zelf iets in elkaar te gaan rommelen.
wobbelmaandag 13 oktober 2014 @ 15:42
Hoe krijg ik van onderstaande XML alle nummers in een array? Soms zijn het 10 nummers, soms is het er maar 1....

Met simplexml_load_string weet ik niet hoe ik hiervan een array moet bakken waar ik vervolgens iets mee kan :@ ik kan dan niet met een foreach loopen door de nummers bijvoorbeeld

Na het laden van simplexml_load_string kan ik er wel een array van printen met print_r ( $xml->messagebody->order->mobilenumbers ); maar dan kan ik er geen foreachje mee doen

[update]
Op de volgende manier is het gelukt. Is dit netjes of is dit om te janken?

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
foreach($xml->messagebody->order->mobilenumbers as $nummer)
{
    
    foreach ( 
$nummer->number as $value )
    {
        
        echo 
"Nummer: " $value "<br /><br />";    
        
    }
    
}    
?>

Voorbeeld met 1 nummer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="UTF-8"?>
<mobile_orderdetail_ack xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <messageheader>
    <messagetype>mobile_orderdetail_ack</messagetype>
    <messageversion>01</messageversion>
    <timestamp>2014-10-13T15:28:04+02:00</timestamp>
    <reference>abchenkdetank</reference>
    <requestid>12345-REQUEST-ID</requestid>
  </messageheader>
  <messagebody>
    <order>
      <general>
        <customer>Klantnaam</customer>
        <orderdate>2014-06-24</orderdate>
        <msub>msub1337</msub>
      </general>
      <mobilenumbers>
        <number>0612345678</number>
      </mobilenumbers>
      </orders>
    </order>
  </messagebody>
</mobile_orderdetail_ack>

Voorbeeld met 3 nummers

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
<?xml version="1.0" encoding="UTF-8"?>
<mobile_orderdetail_ack xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <messageheader>
    <messagetype>mobile_orderdetail_ack</messagetype>
    <messageversion>01</messageversion>
    <timestamp>2014-10-13T15:28:04+02:00</timestamp>
    <reference>abchenkdetank</reference>
    <requestid>12345-REQUEST-ID</requestid>
  </messageheader>
  <messagebody>
    <order>
      <general>
        <customer>Klantnaam</customer>
        <orderdate>2014-06-24</orderdate>
        <msub>msub1337</msub>
      </general>
      <mobilenumbers>
        <number>0612345678</number>
        <number>0612341234</number>
        <number>0687654321</number>
      </mobilenumbers>
      </orders>
    </order>
  </messagebody>
</mobile_orderdetail_ack>


[ Bericht 4% gewijzigd door wobbel op 13-10-2014 15:58:11 ]
papernotemaandag 13 oktober 2014 @ 17:53
quote:
0s.gif Op maandag 13 oktober 2014 15:42 schreef wobbel het volgende:
Hoe krijg ik van onderstaande XML alle nummers in een array? Soms zijn het 10 nummers, soms is het er maar 1....
Met simplexml_load_string weet ik niet hoe ik hiervan een array moet bakken waar ik vervolgens iets mee kan :@ ik kan dan niet met een foreach loopen door de nummers bijvoorbeeld
Na het laden van simplexml_load_string kan ik er wel een array van printen met print_r ( $xml->messagebody->order->mobilenumbers ); maar dan kan ik er geen foreachje mee doen
[update]
Op de volgende manier is het gelukt. Is dit netjes of is dit om te janken?
[ code verwijderd ]
Voorbeeld met 1 nummer
[ code verwijderd ]
Voorbeeld met 3 nummers
[ code verwijderd ]
Kan dat niet korter?

1
2
3
4
5
<?php
foreach($xml->messagebody->order->mobilenumbers->number as $value ) {
  echo 
"Nummer: " $value "<br /><br />";    
}
?>

edit: je voorbeeld XML is invalid (er staat een </orders> die daar niet hoort).
slacker_nlmaandag 13 oktober 2014 @ 18:07
quote:
5s.gif Op maandag 13 oktober 2014 17:53 schreef papernote het volgende:
[..]
Kan dat niet korter?
[ code verwijderd ]
edit: je voorbeeld XML is invalid (er staat een </orders> die daar niet hoort).
Dat ligt eraan, als mobilenumbers een scalar value teruggeeft is jouw voorbeeld goed, maar als ie in list-context iets teruggeeft gaat het fout, want dat zit je op een lijst ->number uit te voeren en volgens mij kent een php array geen 'number' method.

Mogelijk kan je array_map gebruiken, http://stackoverflow.com/(...)rray-using-array-map
papernotemaandag 13 oktober 2014 @ 18:42
quote:
0s.gif Op maandag 13 oktober 2014 18:07 schreef slacker_nl het volgende:
[..]
Dat ligt eraan, als mobilenumbers een scalar value teruggeeft is jouw voorbeeld goed, maar als ie in list-context iets teruggeeft gaat het fout, want dat zit je op een lijst ->number uit te voeren en volgens mij kent een php array geen 'number' method.
Mogelijk kan je array_map gebruiken, http://stackoverflow.com/(...)rray-using-array-map
Dat "number" is een onderdeel van de XML, geen PHP aanroep. Zie de voorbeeld XML in de post van wobbel. Mijn code werkt op beide voorbeelden (na de aanpassing van de edit).

Of begrijp ik je niet goed?
xaban06maandag 13 oktober 2014 @ 19:55
1
2
REPLACE INTO tabel(naam,stad,leeftijd)
VALUES('Jan','Rotterdam','18')

1
2
REPLACE INTO tabel(naam,stad,leeftijd)
VALUES('Jan','Amsterdam','18')

1
2
REPLACE INTO tabel(naam,stad,leeftijd)
VALUES('Jan','Rotterdam','20')

Wat doet dit? Maakt het 3 nieuwe records aan? Of wordt er met de eerste query een record aangemaakt en de tweede+derde record passen het aan?

Of is het mogelijk om aan te geven op welke veld hij moet matchen en aan de hand daarvan kiest om een record te updaten of een record toe te voegen?
KomtTijd...maandag 13 oktober 2014 @ 20:30
Als er een duplicate key zou zijn doet hij een DELETE en daarna alsnog een INSERT.

Als je wilt update moet je ON DUPLICATE KEY UPDATE gebruiken.
Aetherdinsdag 14 oktober 2014 @ 09:47
Misschien interessant: How To Measure MySQL Query Performance with mysqlslap.
slacker_nldinsdag 14 oktober 2014 @ 10:52
quote:
2s.gif Op maandag 13 oktober 2014 18:42 schreef papernote het volgende:
[..]
Dat "number" is een onderdeel van de XML, geen PHP aanroep. Zie de voorbeeld XML in de post van wobbel. Mijn code werkt op beide voorbeelden (na de aanpassing van de edit).
Of begrijp ik je niet goed?
Waar ik over val is niet bestaand zie ik. Ik vond het nogal vreemd dat je $xml->mobilenumbers->number doet en dat ie dan over alle mobile numbers loopt. Daar had ik namelijk een lijst verwacht. Maar kennelijk is dat niet zo zie ik hier.
totalvampwoensdag 15 oktober 2014 @ 11:30
Iemand hier bekend met Laravel Eloquent?
Ik heb 3 tabellen:
users
permissions
user_permissions

Nu wil ik met eagerloading een query maken hierop, waarbij permissions.name gebruikt wordt.

Normaal:
1
2
3
4
5
6
7
8
9
10
SELECT * 
FROM permissions
LEFT JOIN user_permissions
ON permissions.id = user_permissions.permission_id
LEFT JOIN users
ON user_permissions.user_id = users.id
WHERE
permissions.name = 'name.of.permission'
AND
users.id = 15
wipes66woensdag 15 oktober 2014 @ 16:23
weet iemand hoe ik een htaccess bestand uit een 'parent' directory kan laten negeren? bv:

public_html/www/index.php
public_html/www/.htaccess
public_html/www/blog/

en als dan public_html/www/blog/index.php wordt opgevraagd dat het bovenliggende .htaccess bestand geheel genegeerd wordt, is dat mogelijk?
Aetherwoensdag 15 oktober 2014 @ 16:39
quote:
0s.gif Op woensdag 15 oktober 2014 16:23 schreef wipes66 het volgende:
weet iemand hoe ik een htaccess bestand uit een 'parent' directory kan laten negeren? bv:
public_html/www/index.php
public_html/www/.htaccess
public_html/www/blog/
en als dan public_html/www/blog/index.php wordt opgevraagd dat het bovenliggende .htaccess bestand geheel genegeerd wordt, is dat mogelijk?
Een .htaccess in blog maken met:
1RewriteEngine Off
ůf in de .htaccess toevoegen (uit m'n hoofd):
1RewriteConf %{REQUEST_URI} !^/blog/?
wipes66woensdag 15 oktober 2014 @ 16:42
quote:
7s.gif Op woensdag 15 oktober 2014 16:39 schreef Aether het volgende:
[..]
Een .htaccess in blog maken met:
[ code verwijderd ]
ůf in de .htaccess toevoegen (uit m'n hoofd):
[ code verwijderd ]
het gaat helaas niet alleen om rewrite rules, maar ook allerlei andere regels (white listing van bestanden etc). het hele htaccess moet dus genegeerd worden.
papernotewoensdag 15 oktober 2014 @ 19:50
quote:
0s.gif Op woensdag 15 oktober 2014 16:42 schreef wipes66 het volgende:
[..]
het gaat helaas niet alleen om rewrite rules, maar ook allerlei andere regels (white listing van bestanden etc). het hele htaccess moet dus genegeerd worden.
Voor zover ik weet is dat niet mogelijk. Je zou in de bovenliggende htaccess moeten opgeven dat de regels daarin niet gelden voor een specifieke onderliggende map. Voorbeeld: http://stackoverflow.com/(...)ules-in-root-htacces
bondagezondag 19 oktober 2014 @ 01:16
MySQL query vraagje. Stel ik heb de volgende tekst:

quote:
bla
<blockquote>bla bla bla</blockquote>

bla bla
Ik wil daaruit de tekst tussen <blockquote> en </blockquote> hebben zodat ik tekst tussen tags apart van de rest kan verkrijgen, hiervoor heb ik het volgende bedacht:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CASE WHEN LOCATE( '<blockquote>', `contents` ) != 0 THEN 
   MID(
      `contents`, 
      LOCATE( '<blockquote>', `contents` ) + 12,
      (LOCATE( '</blockquote>', `contents` ) - LOCATE( '<blockquote>', `contents` )) - 12
   ) 
ELSE 
   '' 
END AS post_quote, 
CASE WHEN LOCATE( '<blockquote>', `contents` ) != 0 THEN 
   CONCAT_WS(
      LEFT( `contents` , LOCATE( '<blockquote>', `contents`) - 1), ' ',
      RIGHT( `contents` , LENGTH(`contents`) - (LOCATE( '</blockquote>', `contents` ) + 12))
   )
ELSE 
   `contents` 
END AS post_contents 

Bovenstaande kan een kind van 4 nog bedenken en werkt prima zolang er slechts ťťn quote in de tekst staat, zodra er meerdere in de tekst voorkomen gaat het mis.

Dit werkt bijvoorbeeld niet correct omdat er meerdere quotes in staan. De eerste quote gaat prima maar de rest wordt als post_contents gerekend.
quote:
<blockquote>quote 1</blockquote>

reactie 1

<blockquote>quote 2</blockquote>

reactie 2
Hier zou het volgende uit moeten komen:
In het veld post_contents: reactie 1 reactie 2
In het veld post_quote: quote 1 quote 2

Is dit Łberhaupt mogelijk met de string functies die MySQL beschikbaar heeft? Zo ja; hoe doe ik dit? Indien het niet mogelijk is jammer dan, maar kan altijd proberen. Ik kom er in ieder geval niet uit.

Testcase:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT
CASE WHEN LOCATE( '<blockquote>', `contents` ) != 0 THEN 
   MID(
      `contents`, 
      LOCATE( '<blockquote>', `contents` ) + 12,
      (LOCATE( '</blockquote>', `contents` ) - LOCATE( '<blockquote>', `contents` )) - 12
   ) 
ELSE 
   '' 
END AS post_quote, 
CASE WHEN LOCATE( '<blockquote>', `contents` ) != 0 THEN 
   CONCAT_WS(
      LEFT( `contents` , LOCATE( '<blockquote>', `contents`) - 1), ' ',
      RIGHT( `contents` , LENGTH(`contents`) - (LOCATE( '</blockquote>', `contents` ) + 12))
   )
ELSE 
   `contents` 
END AS post_contents
FROM (
   SELECT 'bla bla bla <blockquote>quote 1</blockquote>reactie 1<blockquote>quote 2</blockquote> reactie 2' AS `contents`
) AS dummy
KomtTijd...zondag 19 oktober 2014 @ 08:47
Dat het kan betekent niet dat je het ook moet willen. Dit lijkt me typisch iets wat je in je businesslogic afhandelt ipv in een query.
slacker_nlzondag 19 oktober 2014 @ 09:01
Hij vind het leuk om zich in moeilijke situaties te knopen.

Maar agreed, dit moet je denk ik niet in je SQL stoppen, maar erbuiten.
bondagezondag 19 oktober 2014 @ 09:08
quote:
14s.gif Op zondag 19 oktober 2014 08:47 schreef KomtTijd... het volgende:
Dat het kan betekent niet dat je het ook moet willen. Dit lijkt me typisch iets wat je in je businesslogic afhandelt ipv in een query.
Deze query wordt door Sphinx gebruikt om data te indexeren, ik moet deze data in twee velden in de index hebben zodat ze los van elkaar doorzocht kunnen worden. Ik kan in dit geval niets anders doen dan het in de query afhandelen.

quote:
3s.gif Op zondag 19 oktober 2014 09:01 schreef slacker_nl het volgende:
Hij vind het leuk om zich in moeilijke situaties te knopen.

Maar agreed, dit moet je denk ik niet in je SQL stoppen, maar erbuiten.
Eens, maar gaat in dit geval niet ;(
xaban06zondag 19 oktober 2014 @ 21:19
Normaal heb ik bij een database tabel een veld genaamd 'id' met auto increment. Dit keer heb ik een andere veld welke uniek is en nooit dubbel kan zijn. Is het dan nog steeds handig/nodig om een id veld te hebben?
n8nzondag 19 oktober 2014 @ 21:25
Hoe zet je tekstuele content in een database met behoud van opmaak? Html in de database lijkt me niet handig, stel dat je een keer van markup veranderd. Bbtags kan maar dat zal ook een keer veranderen, plus je moet alles vertalen. Ik zou zeggen bbtags als archivering, platte teksts om te zoeken en een gedeelte inclusief html markup in een cache. 3 keer opslaan dus of mis ik wat?
KomtTijd...zondag 19 oktober 2014 @ 21:42
quote:
0s.gif Op zondag 19 oktober 2014 21:19 schreef xaban06 het volgende:
Normaal heb ik bij een database tabel een veld genaamd 'id' met auto increment. Dit keer heb ik een andere veld welke uniek is en nooit dubbel kan zijn. Is het dan nog steeds handig/nodig om een id veld te hebben?
Nodig niet, of het handig is hangt af van je toepassing.
KomtTijd...zondag 19 oktober 2014 @ 21:44
quote:
0s.gif Op zondag 19 oktober 2014 21:19 schreef xaban06 het volgende:
Normaal heb ik bij een database tabel een veld genaamd 'id' met auto increment. Dit keer heb ik een andere veld welke uniek is en nooit dubbel kan zijn. Is het dan nog steeds handig/nodig om een id veld te hebben?
Gebruikelijk is om zowel de ruwe input als de HTML op te slaan. Waarom je ook nog platte tekst op zou willen slaan zou ik niet weten. Je kunt toch ook zoeken op de html/txt velden?
n8nzondag 19 oktober 2014 @ 21:54
quote:
1s.gif Op zondag 19 oktober 2014 21:44 schreef KomtTijd... het volgende:

[..]

Gebruikelijk is om zowel de ruwe input als de HTML op te slaan. Waarom je ook nog platte tekst op zou willen slaan zou ik niet weten. Je kunt toch ook zoeken op de html/txt velden?
ik dacht anders zoekt ie de tags ook gezellig mee. Ok cool dankje
xaban06zondag 19 oktober 2014 @ 21:56
quote:
1s.gif Op zondag 19 oktober 2014 21:44 schreef KomtTijd... het volgende:

[..]

Gebruikelijk is om zowel de ruwe input als de HTML op te slaan. Waarom je ook nog platte tekst op zou willen slaan zou ik niet weten. Je kunt toch ook zoeken op de html/txt velden?
Whut?
KomtTijd...zondag 19 oktober 2014 @ 22:00
quote:
1s.gif Op zondag 19 oktober 2014 21:54 schreef n8n het volgende:

[..]

ik dacht anders zoekt ie de tags ook gezellig mee. Ok cool dankje
Daar heb je zeker een punt ja. Je zou kunnen overwegen ook de platte tekst op te slaan idd, maar als je echt een fatsoenlijke zoekfunctie wilt maken komt daar nog heel wat meer bij kijken. Ik heb er geen ervaring me maar weet dat er hele studies maar verricht zijn.
Boze_Appelmaandag 20 oktober 2014 @ 00:00
quote:
1s.gif Op zondag 19 oktober 2014 21:42 schreef KomtTijd... het volgende:

[..]

Nodig niet, of het handig is hangt af van je toepassing.
Als je id hebt buiten je primary doe je wat fout.
n8nmaandag 20 oktober 2014 @ 11:10
quote:
1s.gif Op maandag 20 oktober 2014 00:00 schreef Boze_Appel het volgende:

[..]

Als je id hebt buiten je primary doe je wat fout.
een id is toch nooit weg?
Tijnmaandag 20 oktober 2014 @ 11:11
quote:
7s.gif Op maandag 20 oktober 2014 11:10 schreef n8n het volgende:

[..]

een id is toch nooit weg?
Hij bedoelt denk ik een extra id buiten je primary key.
n8nmaandag 20 oktober 2014 @ 11:11
quote:
1s.gif Op zondag 19 oktober 2014 22:00 schreef KomtTijd... het volgende:

[..]

Daar heb je zeker een punt ja. Je zou kunnen overwegen ook de platte tekst op te slaan idd, maar als je echt een fatsoenlijke zoekfunctie wilt maken komt daar nog heel wat meer bij kijken. Ik heb er geen ervaring me maar weet dat er hele studies maar verricht zijn.
ongetwijfeld, denk voor de html-variant dat in veel gevallen ook op hele pagina’s gecached kan worden. Geeft een mooi beeld van wat er nou allemaal onderhouden/aangepast moet worden met een update ;(
n8nmaandag 20 oktober 2014 @ 11:13
quote:
2s.gif Op maandag 20 oktober 2014 11:11 schreef Tijn het volgende:

[..]

Hij bedoelt denk ik een extra id buiten je primary key.
ik heb op een site een unieke hash die ik als slug gebruik maar daarnaast ook een id, momenteel omdat ik daar nog op sorteer (oud naar nieuw, wordt nog aangepast). Een id veld maakt verder toch geen reet uit, als in een id is 'gratis'?
Monolithmaandag 20 oktober 2014 @ 11:15
quote:
1s.gif Op zondag 19 oktober 2014 22:00 schreef KomtTijd... het volgende:

[..]

Daar heb je zeker een punt ja. Je zou kunnen overwegen ook de platte tekst op te slaan idd, maar als je echt een fatsoenlijke zoekfunctie wilt maken komt daar nog heel wat meer bij kijken. Ik heb er geen ervaring me maar weet dat er hele studies maar verricht zijn.
Het valt heel erg mee, maar ik zou voor een beetje fatsoenlijke zoekfunctie inderdaad gewoon fatsoenlijke search software gebruiken zoals bijvoorbeeld Apache Solr.Standaard relevantie scoring obv TF/IDF, allerhande mogelijkheden voor stopwords filtering, stemming, synoniemen, enzovoort.
Tijnmaandag 20 oktober 2014 @ 11:17
quote:
7s.gif Op maandag 20 oktober 2014 11:13 schreef n8n het volgende:

[..]

ik heb op een site een unieke hash die ik als slug gebruik maar daarnaast ook een id, momenteel omdat ik daar nog op sorteer (oud naar nieuw, wordt nog aangepast). Een id veld maakt verder toch geen reet uit, als in een id is 'gratis'?
Ik heb zelf vaak ook een public hash voor het exposen van records aan de buitenwereld, zodat ik niet de interne ids hoef te delen. Ik zou ook niet direct weten waarom dat erg is, maar ik kan me voorstellen dat het geen handig databaseontwerp is als je hetzelfde record via allerlei verschillende ids kan terugvinden.
n8nmaandag 20 oktober 2014 @ 11:20
quote:
2s.gif Op maandag 20 oktober 2014 11:17 schreef Tijn het volgende:

[..]

Ik heb zelf vaak ook een public hash voor het exposen van records aan de buitenwereld, zodat ik niet de interne ids hoef te delen. Ik zou ook niet direct weten waarom dat erg is, maar ik kan me voorstellen dat het geen handig databaseontwerp is als je hetzelfde record via allerlei verschillende ids kan terugvinden.
op die manier, ik heb alleen een hash van 4 karakters, eerste altijd alpha dus 1.213.056 combinaties wat voor dit project ruim voldoende is. Browsers tonen toch steeds vaker naar een versimpelde url, verder is er geen manier om content er uit te persen voor publiek
xaban06maandag 20 oktober 2014 @ 18:53
Wat is MySQL trouwens snel zeg als je de juiste indexes toepast :P factor 10 kwa snelheidswinst :D
Monolithmaandag 20 oktober 2014 @ 19:16
quote:
0s.gif Op maandag 20 oktober 2014 18:53 schreef xaban06 het volgende:
Wat is MySQL trouwens snel zeg als je de juiste indexes toepast :P factor 10 kwa snelheidswinst :D
Bij grote hoeveelheden data scheelt het nog veel meer, zeker in de worst case scenario's.
xaban06maandag 20 oktober 2014 @ 22:15
quote:
1s.gif Op maandag 20 oktober 2014 19:16 schreef Monolith het volgende:

[..]

Bij grote hoeveelheden data scheelt het nog veel meer, zeker in de worst case scenario's.
Tabel heeft nu 50.000 records, binnen enkele weken wordt dat een paar miljoen en zal vanaf dan dagelijks met ~800 records groeien.
Lightmaandag 20 oktober 2014 @ 22:20
quote:
0s.gif Op maandag 20 oktober 2014 22:15 schreef xaban06 het volgende:

[..]

Tabel heeft nu 50.000 records, binnen enkele weken wordt dat een paar miljoen en zal vanaf dan dagelijks met ~800 records groeien.
Dan ga je dat verschil wel merken. Eigenlijk zou je alle (select)queries een keer met explain moeten bekijken om te zien waar je nog winst kunt behalen.
Boze_Appelmaandag 20 oktober 2014 @ 22:26
quote:
0s.gif Op maandag 20 oktober 2014 18:53 schreef xaban06 het volgende:
Wat is MySQL trouwens snel zeg als je de juiste indexes toepast :P factor 10 kwa snelheidswinst :D
De juiste engine toepassen scheelt ook enorm. Veel mensen geilen op InnoDB vanwege contrainsts en dergelijke, maar gebruiken het niet of passen het toe op tabellen die amper inserts/updates krijgen maar enkel selects. Dan gewoon lekker naar MyIsam gaan en het scheelt een factor veel in snelheid.

Degelijke DBA bij grotere hoeveelheden is een kunstje apart.
xaban06maandag 20 oktober 2014 @ 22:29
quote:
7s.gif Op maandag 20 oktober 2014 22:26 schreef Boze_Appel het volgende:

[..]

De juiste engine toepassen scheelt ook enorm. Veel mensen geilen op InnoDB vanwege contrainsts en dergelijke, maar gebruiken het niet of passen het toe op tabellen die amper inserts/updates krijgen maar enkel selects. Dan gewoon lekker naar MyIsam gaan en het scheelt een factor veel in snelheid.

Degelijke DBA bij grotere hoeveelheden is een kunstje apart.
Professionals zullen het fijne er van weten verwacht ik. Ik doe het gewoon als hobby, op werk heb ik er niks mee te maken.
Ik gebruik ook InnoDB :@

Verhouding is bij mij denk ik 2-3:1 (select:insert).
Monolithmaandag 20 oktober 2014 @ 22:35
quote:
7s.gif Op maandag 20 oktober 2014 22:26 schreef Boze_Appel het volgende:

[..]

De juiste engine toepassen scheelt ook enorm. Veel mensen geilen op InnoDB vanwege contrainsts en dergelijke, maar gebruiken het niet of passen het toe op tabellen die amper inserts/updates krijgen maar enkel selects. Dan gewoon lekker naar MyIsam gaan en het scheelt een factor veel in snelheid.

Degelijke DBA bij grotere hoeveelheden is een kunstje apart.
De vraag is niet zozeer wat de verhouding is tussen selects en inserts / updates. MyISAM kent bijvoorbeeld geen transacties. Die heb je soms gewoon nodig.
Daarnaast kun je in plaats van MySQL ook gewoon bijvoorbeeld Postgresql gebruiken.
Boze_Appelmaandag 20 oktober 2014 @ 22:46
quote:
1s.gif Op maandag 20 oktober 2014 22:35 schreef Monolith het volgende:

[..]

De vraag is niet zozeer wat de verhouding is tussen selects en inserts / updates. MyISAM kent bijvoorbeeld geen transacties. Die heb je soms gewoon nodig.
Voor veel dingen dan ook weer niet. Het is uiteraard net de toepassing wat je nodig hebt.

quote:
Daarnaast kun je in plaats van MySQL ook gewoon bijvoorbeeld Postgresql gebruiken.
Zeker, of het alternatief voor MySQL, MariaDB.
KomtTijd...maandag 20 oktober 2014 @ 22:56
quote:
0s.gif Op maandag 20 oktober 2014 22:20 schreef Light het volgende:

[..]

Dan ga je dat verschil wel merken. Eigenlijk zou je alle (select)queries een keer met explain moeten bekijken om te zien waar je nog winst kunt behalen.
idd, zonder de juiste indexes wordt iedere database onwerkbaar traag met datsoort datasets.
Een flinke sloot geheugen in je server helpt ook.
Boze_Appelmaandag 20 oktober 2014 @ 23:01
quote:
14s.gif Op maandag 20 oktober 2014 22:56 schreef KomtTijd... het volgende:

[..]

idd, zonder de juiste indexes wordt iedere database onwerkbaar traag met datsoort datasets.
Een flinke sloot geheugen in je server helpt ook.
En je buffers goed instellen. Van de standaard configs van MySQL of PostgreSQL wordt geen grotere hoeveelheid data vrolijk.

Zonder indexes heb je gewoon een kaartenbak.
Monolithmaandag 20 oktober 2014 @ 23:04
quote:
7s.gif Op maandag 20 oktober 2014 23:01 schreef Boze_Appel het volgende:

[..]

En je buffers goed instellen. Van de standaard configs van MySQL of PostgreSQL wordt geen grotere hoeveelheid data vrolijk.

Zonder indexes heb je gewoon een kaartenbak.
Een kaartenbak heeft nou meestal juist wel een vorm van indexering. :P
xaban06maandag 20 oktober 2014 @ 23:04
Straks heb ik dus een paar miljoen aan records, deze records haal ik extern op (via http). Deze externe records kunnen dagelijks wijzigen. Deze wijzigingen wil ik meenemen in mijn database.

Per HTTP request kan ik maar 1 record checken, ik kan dus niet meedere records tegelijk controleren.

Ik dacht aan:
De hele dataset poepen naar een array.

Vervolgens met een loop over de array gaan, iedere keer wordt de data in de array vergeleken met de externe data.

Dus ja, er moet een paar miljoen HTTP requests plaatsvinden. Hier ontkom ik niet aan, maar het probleem zit hem in: De externe server is vrij traag, meestal resultaat na 1 seconde, maar soms ook 3-4 seconde.

Met een gemiddelde van 2s response tijd kom ik aan 43.200 requests per dag. Bij een dataset van 10.000.000 records heb ik dus 232 dagen nodig om de volledige dataset te controleren.

Oplossing?

/edit
Nu ik dit schrijf, meerdere HTTP requests tegelijk uitvoeren misschien?
TwenteFCmaandag 20 oktober 2014 @ 23:04
quote:
14s.gif Op maandag 20 oktober 2014 22:56 schreef KomtTijd... het volgende:

[..]

idd, zonder de juiste indexes wordt iedere database onwerkbaar traag met datsoort datasets.
Een flinke sloot geheugen in je server helpt ook.
Tegen die tijd is het misschien sowieso een idee om een aparte database server te hebben.
Boze_Appelmaandag 20 oktober 2014 @ 23:05
quote:
1s.gif Op maandag 20 oktober 2014 23:04 schreef Monolith het volgende:

[..]

Een kaartenbak heeft nou meestal juist wel een vorm van indexering. :P
Punt, maar je kan niet zoeken op de inhoud van de kaartenbak, alleen wat op het labeltje staat. Dat is an sich een index, maar alleen een primary dan. :P
Lightmaandag 20 oktober 2014 @ 23:12
quote:
14s.gif Op maandag 20 oktober 2014 22:56 schreef KomtTijd... het volgende:

[..]

idd, zonder de juiste indexes wordt iedere database onwerkbaar traag met datsoort datasets.
Een flinke sloot geheugen in je server helpt ook.
Een sloot geheugen is alleen zinvol als je ook goede indexes hebt.
Monolithmaandag 20 oktober 2014 @ 23:17
Sowieso kun je bij grote hoeveelheden data beter eens kijken of er niet een geschikt NoSQL database is waar je gebruik van kunt maken.
Drakiredinsdag 21 oktober 2014 @ 14:55
Vraagje:
Ik haal via een api bitcoinprijzen in USD op alsmede de exchange rate van USD naar EUR

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
    <?php
header
('Content-Type: text/html; charset=utf-8');
function 
extractData($url$clientName$curr)
{
$ch curl_init($url);
curl_setopt($chCURLOPT_REFERER'Mozilla/5.0 (compatible; ' $clientName' PHP client; '.php_uname('s').'; PHP/'.phpversion().')');
curl_setopt($chCURLOPT_USERAGENT"CakeScript/0.1");
curl_setopt($chCURLOPT_HEADER0);
curl_setopt($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
$json curl_exec($ch);
curl_close($ch);
$array json_decode($json,true);
return 
$array;

}

$url 'http://www.bitstamp.net/api/ticker/';
$clientName 'Bitstamp';
$bitstamp extractData($url,$clientName);
$url 'https://www.bitstamp.net/api/eur_usd/';
$clientName 'Blockchain';
$blockchain extractData($url,$clientName);
echo 
"<pre>";
print_r($bitstamp);

print_r($blockchain);
echo 
"</pre>";

?> 

Dit geeft het volgende resultaat:
6BckSmg.jpg

Nu wil ik het getal dat al resultaat bij high komt (388.00) delen door het getal dat bij sell staat (1.2771)

Alleen weet ik niet hoe ik deze waardes los terugkrijg in php zodat ik bijvoorbeeld
1
2
3
<?php
$price
$high $sell;
?>
kan doen.
KomtTijd...dinsdag 21 oktober 2014 @ 14:58
http://lmgtfy.com/?q=php+array
Aetherdinsdag 21 oktober 2014 @ 14:59
quote:
0s.gif Op dinsdag 21 oktober 2014 14:55 schreef Drakire het volgende:
Vraagje:
Ik haal via een api bitcoinprijzen in USD op alsmede de exchange rate van USD naar EUR
[ code verwijderd ]

Dit geeft het volgende resultaat:
[ afbeelding ]

Nu wil ik het getal dat al resultaat bij high komt (388.00) delen door het getal dat bij sell staat (1.2771)

Alleen weet ik niet hoe ik deze waardes los terugkrijg in php zodat ik bijvoorbeeld
[ code verwijderd ]

kan doen.
$bitstamp en $blockchain zijn beide array. Met $bitstamp['high'] kun je een waarde uitlezen:
1$price = $bitstamp['high'] / $bitchain['sell']
Drakiredinsdag 21 oktober 2014 @ 15:06
quote:
Had al gezocht maar kwam er niet uit vanwege de 2 verschillende arrays, achteraf is het toch best simpel :P.
quote:
7s.gif Op dinsdag 21 oktober 2014 14:59 schreef Aether het volgende:

[..]

$bitstamp en $blockchain zijn beide array. Met $bitstamp['high'] kun je een waarde uitlezen:
[ code verwijderd ]

thx.
wipes66woensdag 22 oktober 2014 @ 19:45
heeft iemand verstand van timezones? ik probeer "today 00:00" om te zetten in een timestamp, maar wel afhankelijk van een tijdzone (via DateTime). in de unittest vergelijk ik new-york, amsterdam en die van sydney. maar die van amsterdam blijkt lager te zijn dan die van new-york?

dit is de uitkomt:

America/New_York
string(31) "Wed, 22 Oct 2014 13:34:42 -0400"
int(1413950400)

Europe/Amsterdam
string(31) "Wed, 22 Oct 2014 19:34:42 +0200"
int(1413928800)

Australia/Sydney
string(31) "Thu, 23 Oct 2014 04:34:42 +1100"
int(1413982800)

new-york zou toch het laagst moeten zijn omdat daar het "begin van de dag" het meeste achterloopt?
KomtTijd...woensdag 22 oktober 2014 @ 20:06
Wat doe je precies dan?

Als ik het zo bekijk zouden ze allemaal dezelfde timestamp moeten hebben. Maar de timestamps die jij toont komen in de verste verte niet overeen met de daarbij genoemde datum/tijd, ook de minuten en secondes niet.
wipes66woensdag 22 oktober 2014 @ 20:10
quote:
14s.gif Op woensdag 22 oktober 2014 20:06 schreef KomtTijd... het volgende:
Wat doe je precies dan?

Als ik het zo bekijk zouden ze allemaal dezelfde timestamp moeten hebben. Maar de timestamps die jij toont komen in de verste verte niet overeen met de daarbij genoemde datum/tijd, ook de minuten en secondes niet.
nee de timestamp moet verschillend zijn want ik gebruik "today 00:00" en geen "today" of "-24 hours". de laatste 2 zijn relatief (in verhouding met de huidige timestamp) en zijn voor alle tijdzones hetzelfde, maar het moment van de eerste seconden van de dag moet per tijdzone verschillend zijn. ik dacht dat het westen dan het laagste moest zijn en meer richting het oosten hoger. je kan het zelf testen met:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$timezone 
= new DateTimeZone('America/New_York');
$date =  new DateTime('today 00:00'$timezone);
var_dump($date->format('r'));
var_dump($date->getTimestamp());
echo 
"\n\n";
            
$timezone = new DateTimeZone('Europe/Amsterdam');
$date =  new DateTime('today 00:00'$timezone);
var_dump($date->format('r'));
var_dump($date->getTimestamp());
echo 
"\n\n";
            
$timezone = new DateTimeZone('Australia/Sydney');
$date =  new DateTime('today 00:00'$timezone);
var_dump($date->format('r'));
var_dump($date->getTimestamp());
echo 
"\n\n";            
?>
KomtTijd...woensdag 22 oktober 2014 @ 20:15
Laatste keer dat ik checkte kwam de zon in het oosten op en ging deze in het westen onder :P Dus in het oosten is het eerder middennacht dan in het westen.
wipes66woensdag 22 oktober 2014 @ 20:27
quote:
14s.gif Op woensdag 22 oktober 2014 20:15 schreef KomtTijd... het volgende:
Laatste keer dat ik checkte kwam de zon in het oosten op en ging deze in het westen onder :P Dus in het oosten is het eerder middennacht dan in het westen.
maar de volgorde van de timestamp komt niet overeen met de volgorde van oost naar west, dat is wat ik niet snap :P
Monolithwoensdag 22 oktober 2014 @ 20:33
Gezien de tijden in je resultaten wordt 00:00 niet meegenomen.

Afgezien daarvan, wordt de string niet omgezet naar GMT oid en vervolgens omgerekend met de timezone, waarbij vervolgens de timestamp enkel de datum en tijd, maar niet de timezone meerekent?
Lightwoensdag 22 oktober 2014 @ 20:52
quote:
0s.gif Op woensdag 22 oktober 2014 20:33 schreef Monolith het volgende:
Gezien de tijden in je resultaten wordt 00:00 niet meegenomen.

Afgezien daarvan, wordt de string niet omgezet naar GMT oid en vervolgens omgerekend met de timezone, waarbij vervolgens de timestamp enkel de datum en tijd, maar niet de timezone meerekent?
Een timestamp kent geen tijdzone, maar als je van een tijd naar een timestamp gaat heb je die tijdzone wel nodig. De timestamp van 2014-10-22 18:00:00+0200 (Amsterdam) is anders dan die van 2014-10-22 18:00:00+0100 (Londen), hoewel het beide keren 18:00 vandaag is.
Aetherwoensdag 22 oktober 2014 @ 20:58
quote:
0s.gif Op woensdag 22 oktober 2014 20:52 schreef Light het volgende:

[..]

Een timestamp kent geen tijdzone
Een timestamp is altijd UTC.
Lightwoensdag 22 oktober 2014 @ 21:01
quote:
0s.gif Op woensdag 22 oktober 2014 19:45 schreef wipes66 het volgende:
heeft iemand verstand van timezones? ik probeer "today 00:00" om te zetten in een timestamp, maar wel afhankelijk van een tijdzone (via DateTime). in de unittest vergelijk ik new-york, amsterdam en die van sydney. maar die van amsterdam blijkt lager te zijn dan die van new-york?

dit is de uitkomt:

America/New_York
string(31) "Wed, 22 Oct 2014 13:34:42 -0400"
int(1413950400)

Europe/Amsterdam
string(31) "Wed, 22 Oct 2014 19:34:42 +0200"
int(1413928800)

Australia/Sydney
string(31) "Thu, 23 Oct 2014 04:34:42 +1100"
int(1413982800)

new-york zou toch het laagst moeten zijn omdat daar het "begin van de dag" het meeste achterloopt?
Nee. Om te beginnen kloppen die strings niet. En het probleem met "today" is dat je niet weet welke dat je krijgt. In AustraliŽ is 23 oktober al begonnen, dus krijg je die datum als je "today" gebruikt. In de andere gebieden is dat niet het geval en krijg je 22 oktober.

int(1413950400)
2014-10-22 00:00:00-0400

int(1413928800)
2014-10-22 00:00:00+0200

int(1413982800)
2014-10-23 00:00:00+1100

Eigenlijk zoek je voor Sydney deze tijd:
int(1413896400)
2014-10-22 00:00:00+1100