abonnement Unibet Coolblue
  Moderator / Redactie Sport zaterdag 7 november 2015 @ 18:37:45 #101
359864 crew  Nattekat
De roze zeekat
pi_157385533
quote:
0s.gif Op zaterdag 7 november 2015 18:32 schreef Light het volgende:

[..]

En dan moet je er nog rekening mee houden dat die class kan worden voorafgegaan en/of gevolgd door een andere class. En dat een afbeelding zonder die class gevolgd kan worden door een met die class, dan moet je wel de goede afbeelding verwijderen. En over een half jaar moet je ook nog snappen wat de regex doet (ook als het er niet in commentaar bij staat).
Dit is dan per DOM-element (wat sowieso al een aanrader is om te doen), even niet helemaal goed naar de vraag gekeken. In zo'n hele post is het bijna geen doen meer om nog een RE te gebruiken idd.
100.000 katjes
Maakte de 100.000e post in BIT
Er eens op uit?
pi_157385593
In het soort 'niet gevolgd door' scenario's gebruik je in regular expressions doorgaans negative lookahead:
http://regular-expressions.mobi/lookaround.html
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
  FOK!mycroftheld zaterdag 7 november 2015 @ 18:46:09 #103
128465 verified  bondage
niet meer aanwezig op FOK!
pi_157385697
quote:
0s.gif Op zaterdag 7 november 2015 18:03 schreef Light het volgende:

[..]

Some people, when confronted with a problem, think
“I know, I'll use regular expressions.” Now they have two problems. (bron / meer info)

Ik zou DOMDocument gebruiken, in combinatie met DOMNode::removeChild() (die je gewoon hebt, want DOMDocument extends DOMNode).
Dank, dat had ik zelf ook wel kunnen bedenken natuurlijk 8)7
pi_157386103
Vraagje, stel je hebt een formulier met gebruikersnaam en wachtwoord.

Beide elementen moeten voldoen aan veel eisen.

Naam ; minimaal 6, maximaal 30 tekens. Geen spaties en bepaalde karakters, Geen herhalingen van letters (3x een e achter elkaar bv). En minimaal 1 hoofdletter.
Wachtwoord: minimaal 6, maximaal 30 tekens. Geen spaties. Minimaal 1 teken, 1 cijfer en 1 hoofdletter.

Hoe ga je om met gevonden fouten als je het formulier controleert??
Just say hi!
pi_157386390
quote:
0s.gif Op zaterdag 7 november 2015 19:08 schreef Chandler het volgende:
Vraagje, stel je hebt een formulier met gebruikersnaam en wachtwoord.

Beide elementen moeten voldoen aan veel eisen.

Naam ; minimaal 6, maximaal 30 tekens. Geen spaties en bepaalde karakters, Geen herhalingen van letters (3x een e achter elkaar bv). En minimaal 1 hoofdletter.
Wachtwoord: minimaal 6, maximaal 30 tekens. Geen spaties. Minimaal 1 teken, 1 cijfer en 1 hoofdletter.

Hoe ga je om met gevonden fouten als je het formulier controleert??
Met zoveel eisen zou ik aan de voorkant met javascript sowieso realtime een "checklist" afvinken terwijl de gebruiker typt.

Wanneer een formulier foutief wordt gepost zou ik deze zelfde checklist natuurlijk weer zo actueel mogelijk bijwerken ondersteund met een lijstje van meldingen waarom de huidige input fout is.

Dit lijkt mij vrij standaard.
pi_157388523
quote:
0s.gif Op zaterdag 7 november 2015 19:08 schreef Chandler het volgende:
Vraagje, stel je hebt een formulier met gebruikersnaam en wachtwoord.

Beide elementen moeten voldoen aan veel eisen.

Naam ; minimaal 6, maximaal 30 tekens. Geen spaties en bepaalde karakters, Geen herhalingen van letters (3x een e achter elkaar bv). En minimaal 1 hoofdletter.
Wachtwoord: minimaal 6, maximaal 30 tekens. Geen spaties. Minimaal 1 teken, 1 cijfer en 1 hoofdletter.
Waarom maximaal 30 tekens en geen spaties voor een wachtwoord? Als het goed is, sla je ze toch goed gehashed op en dan maken spaties en het aantal tekens niet zo heel veel uit.
pi_157391948
quote:
11s.gif Op zaterdag 7 november 2015 18:46 schreef bondage het volgende:

[..]

Dank, dat had ik zelf ook wel kunnen bedenken natuurlijk 8)7
Ik heb ondertussen ook even geprobeerd dit op te lossen en er zijn een paar punten waar je rekening mee moet houden. Dit is mijn oplossing:
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
75
76
77
78
79
80
81
82
83
<?php
class FokDemo
{
    
/** @var DOMDocument */
    
private $document;

    
/**
     * FokDemo constructor.
     */
    
public function __construct()
    {
        
$this->document = new DOMDocument();
        
$this->document->preserveWhiteSpace true;
    }

    
/**
     * @param string $content
     */
    
public function setContent($content)
    {
        @
$this->document->loadHTML($content);
    }

    
/**
     * @return string
     */
    
public function getContent()
    {
        return 
$this->document->saveHTML();
    }

    
/**
     * @param string $tagName
     * @param array $exceptWithClass
     *
     * @return int The number of removed items
     */
    
public function removeElements($tagName, array $exceptWithClass = array())
    {
        
$removed 0;

        
$doc $this->document;

        
// This list is dynamic. Any change in the document will immediately be reflected here
        
$nodes $doc->getElementsByTagName($tagName);

        for (
$nodeIndex $nodes->length 1$nodeIndex >= 0$nodeIndex--) {
            
$node $nodes->item($nodeIndex);
            if (
$this->shouldNodeBeRemoved($node$exceptWithClass)) {
                
$parent $node->parentNode;
                
$parent->removeChild($node);
                
$removed++;
            }
        }

        return 
$removed;
    }

    
/**
     * @param DOMNode $node
     * @param array $exceptWithClass
     *
     * @return bool
     */
    
private function shouldNodeBeRemoved($node, array $exceptWithClass)
    {
        if (
$exceptWithClass === array()) {
            
$result true;
        } else {
            
$classAttribute $node->attributes->getNamedItem('class');
            if (
$classAttribute instanceof DOMAttr) {
                
$classNames explode(' '$classAttribute->value);

                
$result array_intersect($exceptWithClass$classNames) === array();
            } else {
                
$result true;
            }
        }

        return 
$result;
    }
}
?>
  FOK!mycroftheld zondag 8 november 2015 @ 06:52:31 #108
128465 verified  bondage
niet meer aanwezig op FOK!
pi_157395524
quote:
0s.gif Op zaterdag 7 november 2015 22:58 schreef Light het volgende:

[..]

Ik heb ondertussen ook even geprobeerd dit op te lossen en er zijn een paar punten waar je rekening mee moet houden. Dit is mijn oplossing:
[ code verwijderd ]

Dankje _O_ Ik wou er vandaag even mee aan de slag en dit komt goed van pas, hoef ik het zelf niet uit te zoeken.
pi_157395826
quote:
0s.gif Op zaterdag 7 november 2015 20:46 schreef Light het volgende:
Waarom maximaal 30 tekens en geen spaties voor een wachtwoord? Als het goed is, sla je ze toch goed gehashed op en dan maken spaties en het aantal tekens niet zo heel veel uit.
Was even een voorbeeld.
De ene keer geef je aan dat een element te kort of te lang is, een missende teken of andere problemen heeft, mijn huidige manier is dat ik alles meld, dus alle mogelijke fouten.

Maar goed, misschien dat mensen dit op verschillende manieren aanpakken.

Javascript check doen we niet aan :@
Just say hi!
  zondag 8 november 2015 @ 11:00:57 #110
230788 n8n
Pragmatisch
pi_157396936
Alleen de relevante fouten natuurlijk. Het liefst realtime (JS) en met propere feedback voor het input veld.

Bij wachtwoorden moet je minimaal 8 karakters doen en voorkomen dat men bij wijzigen een eerder gebruikt wachtwoord instelt. Alle verdere eisen zijn alleen maar irritant.


En waarom in godsnaam zulke eisen voor een naam.
Specialization is for insects”.—Robert Heinlein
pi_157397018
Sterker nog, als je dergelijke uitgebreide eisen hanteert kun je doorgaans beter gewoon zelf de wachtwoorden genereren.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
  FOK!mycroftheld zondag 8 november 2015 @ 12:28:20 #112
128465 verified  bondage
niet meer aanwezig op FOK!
pi_157398125
quote:
0s.gif Op zaterdag 7 november 2015 22:58 schreef Light het volgende:

[..]

Ik heb ondertussen ook even geprobeerd dit op te lossen en er zijn een paar punten waar je rekening mee moet houden. Dit is mijn oplossing:
[ code verwijderd ]

Inmiddels geïmplementeerd en werkt, mijn dank is groot. Heb wel een kleine wijziging aangebracht omdat ik (indien gewenst) het element graag wil vervangen.

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
<?php
    
public function removeElements($tagName, array $exceptWithClass = array(), $replaceWith = array()) {
        
$removed 0;

        
$doc $this->document;

        
// This list is dynamic. Any change in the document will immediately be reflected here
        
$nodes $doc->getElementsByTagName($tagName);

        for(
$nodeIndex $nodes->length 1$nodeIndex >= 0$nodeIndex--) {
            
$node $nodes->item($nodeIndex);
            if(
$this->shouldNodeBeRemoved($node$exceptWithClass)) {
                
$parent $node->parentNode;
                if(isset(
$replaceWith['element']) && isset($replaceWith['contents'])) {
                    
$replace_node $doc->createElement($replaceWith['element'], $replaceWith['contents']);
                    
$parent->replaceChild($replace_node$node);
                }else{
                    
$parent->removeChild($node);
                }

                
$removed++;
            }
        }

        return 
$removed;
    }
?>


[ Bericht 3% gewijzigd door bondage op 08-11-2015 12:36:17 (wijzigingen in code...) ]
  maandag 16 november 2015 @ 15:54:35 #113
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_157600741
Heeft iemand hier ervaring met utf-8 troubleshooting?
pi_157600846
quote:
0s.gif Op maandag 16 november 2015 15:54 schreef Ser_Ciappelletto het volgende:
Heeft iemand hier ervaring met utf-8 troubleshooting?
Iets specifieker ;)
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
  maandag 16 november 2015 @ 16:10:20 #115
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_157601141
quote:
7s.gif Op maandag 16 november 2015 15:58 schreef Aether het volgende:

[..]

Iets specifieker ;)
Ik heb een html-pagina die met require_once een php-scriptje aanroept, dat Griekse letters uit een MySQL-database queriet en in een tabel echoot.

De database is gecreëerd met DEFAULT CHARACTER SET "utf-8" en DEFAULT COLLATE utf8_general_ci. De default charset is in php.ini ingestelt op "utf-8". De HTML-pagina heeft in de header <meta charset="utf8"> staan. En nog krijg ik allemaal ????'jes in plaats Griekse letters...
pi_157601219
quote:
0s.gif Op maandag 16 november 2015 16:10 schreef Ser_Ciappelletto het volgende:

[..]

Ik heb een html-pagina die met require_once een php-scriptje aanroept, dat Griekse letters uit een MySQL-database queriet en in een tabel echoot.

De database is gecreëerd met DEFAULT CHARACTER SET "utf-8" en DEFAULT COLLATE utf8_general_ci. De default charset is in php.ini ingestelt op "utf-8". De HTML-pagina heeft in de header <meta charset="utf8"> staan. En nog krijg ik allemaal ????'jes in plaats Griekse letters...
Lastig om zo te zeggen waar het probleem zit.
Probeer eens bovenin je script:
1header('Content-Type: text/html; charset=utf-8');
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
  maandag 16 november 2015 @ 16:16:39 #117
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_157601311
quote:
7s.gif Op maandag 16 november 2015 16:13 schreef Aether het volgende:

[..]

Lastig om zo te zeggen waar het probleem zit.
Probeer eens bovenin je script:
[ code verwijderd ]

Die had ik al gevonden, maar dat helpt helaas niet. ;)
  † In Memoriam † maandag 16 november 2015 @ 16:23:42 #118
159335 Boze_Appel
Vrij Fruit
pi_157601459
quote:
0s.gif Op zaterdag 7 november 2015 19:08 schreef Chandler het volgende:
Vraagje, stel je hebt een formulier met gebruikersnaam en wachtwoord.

Beide elementen moeten voldoen aan veel eisen.

Naam ; minimaal 6, maximaal 30 tekens. Geen spaties en bepaalde karakters, Geen herhalingen van letters (3x een e achter elkaar bv). En minimaal 1 hoofdletter.
Wachtwoord: minimaal 6, maximaal 30 tekens. Geen spaties. Minimaal 1 teken, 1 cijfer en 1 hoofdletter.

Hoe ga je om met gevonden fouten als je het formulier controleert??
Websites die zulke eisen stellen aan wachtwoorden moeten door de internetshredder. Wat een ellende.
Carpe Libertatem
  maandag 16 november 2015 @ 17:33:53 #119
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_157603307
quote:
0s.gif Op maandag 16 november 2015 16:16 schreef Ser_Ciappelletto het volgende:

[..]

Die had ik al gevonden, maar dat helpt helaas niet. ;)
Dit toevoegen werkt om de een of andere reden wel...

1mysqli_set_charset($conn, "utf8");
pi_157632888
quote:
0s.gif Op maandag 16 november 2015 17:33 schreef Ser_Ciappelletto het volgende:

[..]

Dit toevoegen werkt om de een of andere reden wel...
[ code verwijderd ]

Aan te raden is om PDO te gebruiken i.p.v. mysqli.
  dinsdag 17 november 2015 @ 20:53:20 #121
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_157633018
quote:
1s.gif Op dinsdag 17 november 2015 20:50 schreef robin007bond het volgende:

[..]

Aan te raden is om PDO te gebruiken i.p.v. mysqli.
Wat is het verschil? Zijn die commando's verder hetzelfde?
pi_157633353
quote:
0s.gif Op dinsdag 17 november 2015 20:53 schreef Ser_Ciappelletto het volgende:

[..]

Wat is het verschil? Zijn die commando's verder hetzelfde?
PDO heeft ondersteuning voor meerdere databases en is objectgeoriënteerd. Eigenlijk is PDO een abstractielaag.
  dinsdag 17 november 2015 @ 21:09:05 #123
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_157633556
quote:
1s.gif Op dinsdag 17 november 2015 21:03 schreef robin007bond het volgende:

[..]

PDO heeft ondersteuning voor meerdere databases en is objectgeoriënteerd. Eigenlijk is PDO een abstractielaag.
Hmm, die syntax ziet er in ieder geval al een stuk logischer uit dan die van mysqli.
pi_157633925
quote:
0s.gif Op dinsdag 17 november 2015 21:09 schreef Ser_Ciappelletto het volgende:

[..]

Hmm, die syntax ziet er in ieder geval al een stuk logischer uit dan die van mysqli.
En als je migreert naar een andere database hoef je maar één tekstregeltje veranderen. Dat is een groot voordeel.

Wil je beschermen tegen SQL-injecties, kijk dan ook naar het gebruik van bindParam.

[ Bericht 1% gewijzigd door #ANONIEM op 17-11-2015 21:19:35 ]
pi_157635605
quote:
15s.gif Op maandag 16 november 2015 16:23 schreef Boze_Appel het volgende:

[..]

Websites die zulke eisen stellen aan wachtwoorden moeten door de internetshredder. Wat een ellende.
Met zulke wachtwoordeisen hoef je je sowieso geen zorgen te maken om de functies om een nieuwe gebruiker aan te maken. Die worden dan toch nooit aangeroepen ^O^

En idd PDO ^O^
De enige reden om geen PDO te gebruiken is als je een ORM gebruikt (die dan vast en zeker weer PDO gebruikt)
pi_157635922
Yeahhhh Doctrine.
pi_157635949
Alleen wordt het soms wel een clusterfuck met al die annotations. Django's ORM vind ik een stuk mooier.
pi_157637818
quote:
1s.gif Op dinsdag 17 november 2015 21:19 schreef robin007bond het volgende:

[..]

En als je migreert naar een andere database hoef je maar één tekstregeltje veranderen. Dat is een groot voordeel.
En dan hopen dat je andere database hetzelfde SQL-dialect spreekt. Dat is, ook bij relationele databases, niet gegarandeerd.
pi_157639715
quote:
9s.gif Op dinsdag 17 november 2015 22:15 schreef robin007bond het volgende:
Alleen wordt het soms wel een clusterfuck met al die annotations. Django's ORM vind ik een stuk mooier.
Ik weet niet wat de Django ORM gebruikt, maar bij Doctrine kun je ook gebruik maken van yaml of xml of gewoon php voor je mapping. Niet dat het daar overzichtelijker van wordt, maar 't kan wel :)
  woensdag 18 november 2015 @ 11:07:12 #130
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_157643572
Is het zo dat je in PHP vanuit een function geen beroep kan doen op een eerder geopende connectie? Hoe is dat het makkelijkste op te lossen zonder in iedere function terug die connectie te moeten openen?

Oh, en ik kan niet dezelfde functie tweemaal achtereen aanroepen met verschillende argumenten? Als ik ze allebei heb staan, werkt alleen de eerste. Als ik de eerste wegcomment, werkt de tweede perfect. --> oplossing was om de connectie correct te sluiten. :')

[ Bericht 25% gewijzigd door Ser_Ciappelletto op 18-11-2015 12:57:22 ]
pi_157647112
quote:
0s.gif Op woensdag 18 november 2015 11:07 schreef Ser_Ciappelletto het volgende:
Is het zo dat je in PHP vanuit een function geen beroep kan doen op een eerder geopende connectie? Hoe is dat het makkelijkste op te lossen zonder in iedere function terug die connectie te moeten openen?

Oh, en ik kan niet dezelfde functie tweemaal achtereen aanroepen met verschillende argumenten? Als ik ze allebei heb staan, werkt alleen de eerste. Als ik de eerste wegcomment, werkt de tweede perfect. --> oplossing was om de connectie correct te sluiten. :')
Voor dergelijke connections gebruik je in PHP vaak een Singleton, zie dit voorbeeldje.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
  woensdag 18 november 2015 @ 14:13:21 #132
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_157647396
quote:
0s.gif Op woensdag 18 november 2015 13:59 schreef Monolith het volgende:

[..]

Voor dergelijke connections gebruik je in PHP vaak een Singleton, zie dit voorbeeldje.
Zo te zien heb ik daar niets aan, want het zijn verbindingen met twee verschillende databases. Als !$dbConn == false, kan er nog een nieuwe verbinding aangemaakt moeten worden voor de andere database.
pi_157656294
quote:
0s.gif Op woensdag 18 november 2015 13:59 schreef Monolith het volgende:

[..]

Voor dergelijke connections gebruik je in PHP vaak een Singleton, zie dit voorbeeldje.
Nee, met een singleton kun je maar 1 instance hebben dus dan ga je nooit connecties naar 2 databases kunnen hebben. Die beperking is niet handig.

Je kunt gewoon meer dan 1 PDO connectie openen:
1
2
3
4
<?php
$db1 
= new PDO('mysql://dbname=db1;host=localhost''user1''pass1');
$db2 = new PDO('mysql://dbname=db2;host=my.external.db.server''user2''pass2');
?>
pi_157656495
quote:
0s.gif Op woensdag 18 november 2015 20:10 schreef Light het volgende:

[..]

Nee, met een singleton kun je maar 1 instance hebben dus dan ga je nooit connecties naar 2 databases kunnen hebben. Die beperking is niet handig.

Je kunt gewoon meer dan 1 PDO connectie openen:
[ code verwijderd ]

Dat hoeft niet hoor. Met een singleton kun je best meerdere connection objecten beheren als je dat zou willen. Die eis had ik overigens gemist in het oorspronkelijke verhaal.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_157656571
quote:
0s.gif Op woensdag 18 november 2015 11:07 schreef Ser_Ciappelletto het volgende:
Is het zo dat je in PHP vanuit een function geen beroep kan doen op een eerder geopende connectie? Hoe is dat het makkelijkste op te lossen zonder in iedere function terug die connectie te moeten openen?
Iedere class die db-toegang nodig heeft, moet als constructor-parameter hebben voor een database-verbinding (of een setter om dat in te stellen, maar dan heb je meer kans dat het vergeten wordt). Dat wordt een class property en daar kun je vanuit iedere method in die class bij. En in plaats van een PDO-object kun je ook een wrapper maken om PDO of op een andere manier een abstractielaag gebruiken. PDO extenden is een slecht idee.
quote:
Oh, en ik kan niet dezelfde functie tweemaal achtereen aanroepen met verschillende argumenten? Als ik ze allebei heb staan, werkt alleen de eerste. Als ik de eerste wegcomment, werkt de tweede perfect. --> oplossing was om de connectie correct te sluiten. :')
Een functie twee maal aanroepen met verschillende argumenten, hoort gewoon te werken, maar als het mis gaat door database-connecties kan het wel zijn dat het aantal openstaande connecties tegen het maximum van de database-server zit...
pi_157657950
quote:
1s.gif Op woensdag 18 november 2015 20:15 schreef Monolith het volgende:

[..]

Dat hoeft niet hoor. Met een singleton kun je best meerdere connection objecten beheren als je dat zou willen. Die eis had ik overigens gemist in het oorspronkelijke verhaal.
Misschien had ik het oorspronkelijke verhaal in eerste instantie ook niet goed gelezen.

Maar ik ben sowieso geen fan van singletons. Het voorbeeld in het artikel is geschikt voor 1 database-verbinding. Als je met 2 databases wilt kunnen verbinden, zul je waarschijnlijk veel code moeten copy-pasten (duplicate code, antipattern). (En wat nou als ik morgen een use-case heb met 10 databases? Alles maar 10x copy-pasten?)

Verder zijn de gegevens voor het maken van de verbinding hardcoded, da's ook niet handig (misschien alleen gedaan met het oog op het voorbeeld, maar toch). Die credentials moeten ergens vandaan komen, en je kunt ze slecht aanleveren. Maar als die DbConn zelf op zoek moet naar de credentials die ergens in een config file staan, gaat dat ten koste van herbruikbaarheid.

Verder wordt er bij de singleton gebruik gemaakt van static method calls en die zijn notoir slecht te mocken voor gebruik in tests. Als je een object van class Foo verwacht, kan ik je ook een object van Bar geven als Bar extends Foo. Dan moet ik alleen zorgen dat de methods die je aanroept wel iets teruggeven waar je mee verder kunt. Bij static method calls lukt dat niet, omdat overal in de code wordt verwezen naar de class Foo en mijn mock methods in Bar dus niet worden aangeroepen.

En ja, bij testen wil ik mocks kunnen gebruiken. Helemaal van iets als een database-connection. Als ik iets doe met het resultaat van een functie van een andere class, wil ik in mijn test niet weten hoe die andere class dat resultaat heeft bedacht maar alleen of mijn method goed kan omgaan met het gegeven resultaat.
pi_157661731
quote:
0s.gif Op woensdag 18 november 2015 20:55 schreef Light het volgende:

[..]

Misschien had ik het oorspronkelijke verhaal in eerste instantie ook niet goed gelezen.

Maar ik ben sowieso geen fan van singletons. Het voorbeeld in het artikel is geschikt voor 1 database-verbinding. Als je met 2 databases wilt kunnen verbinden, zul je waarschijnlijk veel code moeten copy-pasten (duplicate code, antipattern). (En wat nou als ik morgen een use-case heb met 10 databases? Alles maar 10x copy-pasten?)

Verder zijn de gegevens voor het maken van de verbinding hardcoded, da's ook niet handig (misschien alleen gedaan met het oog op het voorbeeld, maar toch). Die credentials moeten ergens vandaan komen, en je kunt ze slecht aanleveren. Maar als die DbConn zelf op zoek moet naar de credentials die ergens in een config file staan, gaat dat ten koste van herbruikbaarheid.

Verder wordt er bij de singleton gebruik gemaakt van static method calls en die zijn notoir slecht te mocken voor gebruik in tests. Als je een object van class Foo verwacht, kan ik je ook een object van Bar geven als Bar extends Foo. Dan moet ik alleen zorgen dat de methods die je aanroept wel iets teruggeven waar je mee verder kunt. Bij static method calls lukt dat niet, omdat overal in de code wordt verwezen naar de class Foo en mijn mock methods in Bar dus niet worden aangeroepen.

En ja, bij testen wil ik mocks kunnen gebruiken. Helemaal van iets als een database-connection. Als ik iets doe met het resultaat van een functie van een andere class, wil ik in mijn test niet weten hoe die andere class dat resultaat heeft bedacht maar alleen of mijn method goed kan omgaan met het gegeven resultaat.
Als ik een fatsoenlijke applicatie wil maken, dan gebruik ik geen PHP. Maar dat terzijde. :P

Een singleton is een pattern met als doel iets te maken waar je er slechts één van kunt hebben. In het geval van PHP is dat vaak een DB connectie.
Dat zegt natuurlijk verder niets over hoe je credentials injecteert. Doorgaans gebruik je daar gewoon vormen van property of dependency injection voor.

Ik heb al te lang niet veel met PHP gedaan om nog echt te weten welke mocking frameworks PHP heeft, maar doorgaans niet het mocken van static functies niet zo'n punt zijn. Bovendien, Singletons subsclasses is doorgaans niet de bedoeling. Ik zou ze ook gewoon final maken.

Ik kan overigens zo legio manieren bedenken om zonder duplicate code een wat uitgebreidere singleton instantie te maken die een verzameling aan connecties bijhoudt.
Bij voorkeur gebruik je gewoon een framework met een beetje fatsoenlijke ORM of OGM support natuurlijk.

[ Bericht 1% gewijzigd door Monolith op 19-11-2015 09:37:55 ]
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
  donderdag 19 november 2015 @ 16:01:15 #138
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_157671282
Oké, even een serieuze vraag:

voor mijn site moet ik telkens drie elementen op een pagina hebben: een titel, een grammatica-tabel en een bijschrift met uitleg enzo. Om praktische redenen (met name dat ik geen 20+ enorme html-tabellen wil typen) is het geen optie om voor ieder fenomeen een eigen html-pagina aan te maken. Daarom gebruik ik PHP om dingen uit te lezen.

Momenteel heb ik dat zo opgezet dat de titel en het bijschrift uit een .txt-bestandje in een map worden gelezen en de tabel als tabel uit een MySQL-database gehaald wordt. Maar eigenlijk vind ik dat best wel een stomme oplossing. Het liefst zou ik dat allemaal in een database zetten.

Het probleem is dat er in die tabel dus een andere tabel vervat moet zijn. Dan kan ik die aan de hand van het ID uitlezen en op de site plaatsen. Het houdt alles een stuk meer centraal en overzichtelijk. De My-SQL-tabel zou er dan zo uit moeten zien:

1
2
3
4
5
6
7
8
+-----+ ----------+----------+--------------+
| ID  | Titel     | Tabel    | Bijschrift   |
+-----+-----------+----------+--------------+
| 1   | Eerste    | Tabel1   | Bladiebla    |
| 2   | Tweede    | Tabel2   | Lalalala     |
| 3   | Derde     | Tabel3   | Nogmeer      |
| 4   | Vierde    | Tabel4   | Yapyapyp     |
+-----+-----------+----------+--------------+
En die Tabel# zou dan een grammatica-tabel moeten zijn (zoals in de pics die ik eerder postte).

Ik heb overwogen om in Tabel# gewoon de ganse HTML-tabel in te lezen maar dat lijkt me overdreven veel werk en bijzonder onelegant. Zijn hier betere methoden voor?
pi_157688693
Nooit van joins gehoord?
  vrijdag 20 november 2015 @ 10:58:19 #140
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_157688710
quote:
14s.gif Op vrijdag 20 november 2015 10:56 schreef KomtTijd... het volgende:
Nooit van joins gehoord?
Nope. :P

Ik zal me daar eens in inlezen, bedankt. ;)
pi_157689651
quote:
14s.gif Op vrijdag 20 november 2015 10:56 schreef KomtTijd... het volgende:
Nooit van joins gehoord?
Je vraagt je af of mensen zich überhaupt wel eens de vraag hebben gesteld waarom die dingen RELATIONELE databases heten. :P
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
  vrijdag 20 november 2015 @ 19:50:07 #142
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_157700197
Heel leuk die joins, maar hoe zet ik nou de ene tabel in de andere? Beter gezegd: wat moet ik in mijn tabel 'compleet' onder 'tabel' zetten om de tabel 'lidwoorden' op te roepen?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
+----+------------+-------+------------------------+
| id | titel      | tabel | bijschrift             |
+----+------------+-------+------------------------+
|  1 | Lidwoorden |       | Dit zijn de lidwoorden |
+----+------------+-------+------------------------+

+-------------+-----------+------------+-----------+
| Naamval     | Mannelijk | Vrouwelijk | Onzijdig  |
+-------------+-----------+------------+-----------+
| Nominativus | ὁ         | ἡ          | τό        |
| Genitivus   | τοῦ       | τῆς        | τοῦ       |
| Dativus     | τῷ        | τῇ         | τῷ        |
| Accusativus | τόν       | τήν        | τό        |
| Nominativus | οἱ        | αἱ         | τά        |
| Genitivus   | τῶν       | τῶν        | τῶν       |
| Dativus     | τοῖς      | ταῖς       | τοῖς      |
| Accusativus | τούς      | τάς        | τά        |
+-------------+-----------+------------+-----------+

Ik kan trouwens 'lidwoorden' neerzetten en dat terug invoeren in een query om die tabel op te vragen, maar is daar geen makkelijkere oplossing voor?
pi_157701111
Doe eens een stap terug, wat wil je nu precies laten zien op de pagina?
pi_157701228
Wat me vooral niet helemaal duidelijk is, is de structuur van de tweede tabel. Ik begrijp dat je min of meer meerdere tabellen hebt met woorden in alle naamvallen, maar hoe sla je die precies op in je SQL database?
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_157709892
quote:
0s.gif Op woensdag 18 november 2015 23:16 schreef Monolith het volgende:

[..]

Als ik een fatsoenlijke applicatie wil maken, dan gebruik ik geen PHP. Maar dat terzijde. :P
PHP heeft voor- en nadelen. Maar laten we hier geen discussietopic over maken over of je wel of niet php moet gebruiken.
quote:
Een singleton is een pattern met als doel iets te maken waar je er slechts één van kunt hebben. In het geval van PHP is dat vaak een DB connectie.
Dat zegt natuurlijk verder niets over hoe je credentials injecteert. Doorgaans gebruik je daar gewoon vormen van property of dependency injection voor.
Vaak, dus niet altijd. Een goede ORM staat je toe om meer dan 1 db-connectie te maken. Daarnaast gaat credential injection niet handig werken als je een private constructor hebt (om een singleton te bouwen). Je weet immers niet wanneer de singleton wordt aangemaakt.
quote:
Ik heb al te lang niet veel met PHP gedaan om nog echt te weten welke mocking frameworks PHP heeft, maar doorgaans niet het mocken van static functies niet zo'n punt zijn. Bovendien, Singletons subsclasses is doorgaans niet de bedoeling. Ik zou ze ook gewoon final maken.
In php kun je classes niet final maken. Dat kan wel met methods. De de facto standaard voor Unit Tests in PHP is PhpUnit, uit de xUnit familie. En het mocken van static methods is niet het grootste probleem, het zorgen dat die methods worden aangeroepen wel.

Voorbeeld (pseudo-code, want ik vergeet vast dingen)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class DbSingleton {
    private 
$connection;
    private static 
$instance;

    private 
__construct() {
        
$this->connection = new PDO(...)
    }

    public static function 
getConnection() {
        if (
self::$instance === null) {
            
self::$instance = new self();
        }
    }
}

class 
Foo {
    public function 
bar() {
        
$result DbSingleton::getConnection()->query(...)->fetchAll()
        return 
$result;
    }
}
?>
Als ik de functie bar in de class Foo wil testen, ben ik niet geïnteresseerd in wat er daadwerkelijk in de database staat. Sterker, ik wil helemaal niet dat de database benaderd wordt. Maar er wordt altijd gebruik gemaakt van de method getConnection in DbSingleton. Die class name staat daar hardcoded, dus je heb niets aan een mock.

(Veel PHP-native classes zijn ook niet te mocken, dus als je het goed wilt doen, bouw je een wrapper om die native classes. Dan heb je naar buiten toe duidelijke methods (zoals getUsers) en kun je ook eenvoudig zorgen dat je niet overal en nergens in je code de database rechtstreeks kunt benaderen.

quote:
Ik kan overigens zo legio manieren bedenken om zonder duplicate code een wat uitgebreidere singleton instantie te maken die een verzameling aan connecties bijhoudt.
Bij voorkeur gebruik je gewoon een framework met een beetje fatsoenlijke ORM of OGM support natuurlijk.
Yep. Doctrine comes to mind. Geen singletons, wel veel gebruikt, goed getest en actief in ontwikkeling.

Er is niets mis met het zelf bouwen van een framework / cms / database abstraction layer / etc. Dat zijn best leerzame projecten. Je moet je echter ook realiseren dat er meer bij komt kijken dan waar je in eerste instantie aan dacht en dat je code dus niet geschikt is voor productie.
  FOK!-Schrikkelbaas zaterdag 21 november 2015 @ 08:02:48 #146
862 Arcee
Look closer
pi_157710866
quote:
0s.gif Op vrijdag 20 november 2015 19:50 schreef Ser_Ciappelletto het volgende:
Heel leuk die joins, maar hoe zet ik nou de ene tabel in de andere? Beter gezegd: wat moet ik in mijn tabel 'compleet' onder 'tabel' zetten om de tabel 'lidwoorden' op te roepen?
[ code verwijderd ]

Ik kan trouwens 'lidwoorden' neerzetten en dat terug invoeren in een query om die tabel op te vragen, maar is daar geen makkelijkere oplossing voor?
Wat je moet doen is het id van de ene tabel opnemen als extern veld in de andere tabel. Dat ziet er dan zo uit:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
+----+------------+------------------------+
| id | titel      | bijschrift             |
+----+------------+------------------------+
|  1 | Lidwoorden | Dit zijn de lidwoorden |
+----+------------+------------------------+

+----------+-------------+-----------+------------+-----------+
| tabel_id | Naamval     | Mannelijk | Vrouwelijk | Onzijdig  |
+----------+-------------+-----------+------------+-----------+
|     1    | Nominativus | ὁ         | ἡ          | τό        |
|     1    | Genitivus   | τοῦ       | τῆς        | τοῦ       |
|     1    | Dativus     | τῷ        | τῇ         | τῷ        |
|     1    | Accusativus | τόν       | τήν        | τό        |
|     1    | Nominativus | οἱ        | αἱ         | τά        |
|     1    | Genitivus   | τῶν       | τῶν        | τῶν       |
|     1    | Dativus     | τοῖς      | ταῖς       | τοῖς      |
|     1    | Accusativus | τούς      | τάς        | τά        |
+----------+-------------+-----------+------------+-----------+

Het veld 'tabel' kan dus weg uit de eerste tabel en het veld 'tabel_id' is toegevoegd aan de tweede. In dat laatste veld komen dus de id's uit de eerste tabel (de records in 'lidwoorden' zouden eventueel ook een eigen id kunnen krijgen, trouwens)

Je linkt ze dan als volgt aan elkaar:

1
2
select * from lidwoorden
join compleet on compleet.id=lidwoorden.tabel_id

Ik heb voor de duidelijkheid de tabellen geen alias gegeven, maar vaak doe je zo:

1
2
select * from lidwoorden l
join compleet c on c.id=l.tabel_id

Je 'zet' dus niet de ene tabel in de andere, maar relateert ze aan elkaar met een join (en met 'select * from' haal je er gegevens uit).

Zo haal je alle velden van beide tabellen op, maar je kunt ook uit beide tabellen alleen bepaalde velden selecteren, bijvoorbeeld zo:

1
2
select l.Naamval, l.Mannelijk, c.titel, c.bijschrift from lidwoorden l
join compleet c on c.id=l.tabel_id


[ Bericht 0% gewijzigd door Arcee op 21-11-2015 08:10:32 ]
  zaterdag 21 november 2015 @ 12:35:09 #147
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_157713356
quote:
0s.gif Op zaterdag 21 november 2015 08:02 schreef Arcee het volgende:

[..]

Wat je moet doen is het id van de ene tabel opnemen als extern veld in de andere tabel. Dat ziet er dan zo uit:
[ code verwijderd ]

Het veld 'tabel' kan dus weg uit de eerste tabel en het veld 'tabel_id' is toegevoegd aan de tweede. In dat laatste veld komen dus de id's uit de eerste tabel (de records in 'lidwoorden' zouden eventueel ook een eigen id kunnen krijgen, trouwens)

Je linkt ze dan als volgt aan elkaar:
[ code verwijderd ]

Ik heb voor de duidelijkheid de tabellen geen alias gegeven, maar vaak doe je zo:
[ code verwijderd ]

Je 'zet' dus niet de ene tabel in de andere, maar relateert ze aan elkaar met een join (en met 'select * from' haal je er gegevens uit).

Zo haal je alle velden van beide tabellen op, maar je kunt ook uit beide tabellen alleen bepaalde velden selecteren, bijvoorbeeld zo:
[ code verwijderd ]

Juist, dat ga ik eens proberen. Bedankt voor de hulp!
  zondag 22 november 2015 @ 14:20:49 #148
118585 Crutch
Filantroop || Taalzwengel
pi_157738226
quote:
0s.gif Op zaterdag 21 november 2015 08:02 schreef Arcee het volgende:

[..]

Wat je moet doen is het id van de ene tabel opnemen als extern veld in de andere tabel. Dat ziet er dan zo uit:
[ code verwijderd ]

Het veld 'tabel' kan dus weg uit de eerste tabel en het veld 'tabel_id' is toegevoegd aan de tweede. In dat laatste veld komen dus de id's uit de eerste tabel (de records in 'lidwoorden' zouden eventueel ook een eigen id kunnen krijgen, trouwens)

Je linkt ze dan als volgt aan elkaar:
[ code verwijderd ]

Ik heb voor de duidelijkheid de tabellen geen alias gegeven, maar vaak doe je zo:
[ code verwijderd ]

Je 'zet' dus niet de ene tabel in de andere, maar relateert ze aan elkaar met een join (en met 'select * from' haal je er gegevens uit).

Zo haal je alle velden van beide tabellen op, maar je kunt ook uit beide tabellen alleen bepaalde velden selecteren, bijvoorbeeld zo:
[ code verwijderd ]

Hulde voor de tijd nemen om het helder en compleet uit te leggen. ^O^
Je moeder is een hamster
  dinsdag 1 december 2015 @ 21:58:42 #149
118011 BrainOverfloW
Fok! around the Clock!
pi_157955868
Even een kort vraagje. Ik heb de volgende code:

1
2
3
4
5
6
7
8
$array = ["One","Two","Three"];

echo serialize($array);

unset($array[1]);
array_values($array);

echo serialize($array);

De eerste echo geeft me:
1a:3:{i:0;s:3:"One";i:1;s:3:"Two";i:2;s:5:"Three";}

De tweede echo geeft me:
1a:2:{i:0;s:3:"One";i:2;s:5:"Three";}

Het verwijderen van het element uit de array gaat op zich dus goed. Maar hoe krijg ik het voor elkaar dat die index (ik neem aan dat die "i" daar voor staat) weer netjes doornummert van 0 naar 1 ipv naar de originele 2.

Alvast bedankt :)
Whether or not you can become great at something, you can always become better.
And one day you'll wake up and find out how good you actually became, having transcended whatever limits you might have thought you couldn't pass.
Neil Degrasse Tyson
pi_157955965
quote:
0s.gif Op dinsdag 1 december 2015 21:58 schreef BrainOverfloW het volgende:
Even een kort vraagje. Ik heb de volgende code:
[ code verwijderd ]

De eerste echo geeft me:
[ code verwijderd ]

De tweede echo geeft me:
[ code verwijderd ]

Het verwijderen van het element uit de array gaat op zich dus goed. Maar hoe krijg ik het voor elkaar dat die index (ik neem aan dat die "i" daar voor staat) weer netjes doornummert van 0 naar 1 ipv naar de originele 2.

Alvast bedankt :)
array_values geeft een array terug. Als je het resultaat gebruikt zou je een element 0 en 1 moeten hebben.
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
  dinsdag 1 december 2015 @ 22:03:08 #151
118011 BrainOverfloW
Fok! around the Clock!
pi_157955994
quote:
1s.gif Op dinsdag 1 december 2015 22:02 schreef Aether het volgende:

[..]

array_values geeft een array terug. Als je het resultaat gebruikt zou je een element 0 en 1 moeten hebben.
^O^ Het zijn altijd de kleine details :)
Whether or not you can become great at something, you can always become better.
And one day you'll wake up and find out how good you actually became, having transcended whatever limits you might have thought you couldn't pass.
Neil Degrasse Tyson
  woensdag 2 december 2015 @ 15:27:59 #152
230788 n8n
Pragmatisch
pi_157965755
Simpel vraagje, in JS kan je een variabele gebruiken wanneer deze bestaat en met dubbele pipes een backup aangeven:

var a = foo || bar; of console.log( foo || bar );

Als foo bestaat wordt deze gebruikt, en anders bar (of als laatst optie false).

Met php wanneer ik <?= $foo || $bar ?> krijg ik een 1 wanneer er een ‘true’ waarde in zit, of 0 als beide ‘false’ zijn. Is er een vergelijkbare constructie als in JS? Een ternary operator kan ook, maar is veel langer.
Specialization is for insects”.—Robert Heinlein
  woensdag 2 december 2015 @ 15:29:30 #153
91039 mstx
2x1/2 = 1/2 x 1/2
pi_157965799
Ja dat zit in PHP7.

<?= $foo ?? $bar ?>
Op donderdag 2 juli 2009 22:41 schreef RTB het volgende:
als ik elk rap"liedje" een kans moest geven was ik aan het eind van dit millennium nog bezig met het tempo waarin die kotshoop uitgebraakt wordt.
👾
  woensdag 2 december 2015 @ 15:31:00 #154
230788 n8n
Pragmatisch
pi_157965827
quote:
14s.gif Op woensdag 2 december 2015 15:29 schreef mstx het volgende:
Ja dat zit in PHP7.

<?= $foo ?? $bar ?>
Ik helemaal blij...

...oh in 7. ;(

Dankjewel, heb er nu niks aan maar beter dat het er aan komt ?? eindelijk is.
Specialization is for insects”.—Robert Heinlein
  woensdag 2 december 2015 @ 16:26:52 #155
12221 Tijn
Powered by MS Paint
pi_157966771
Je kunt er wel vrij makkelijk zelf een functie voor klussen natuurlijk.

1
2
3
4
5
<?php
function def($a$b) {
  return (
$a) ? $a $b;
}
?>

1<?php echo def($foo$bar); ?>


[ Bericht 11% gewijzigd door Tijn op 02-12-2015 16:54:44 ]
pi_157966927
quote:
3s.gif Op woensdag 2 december 2015 16:26 schreef Tijn het volgende:
Je kunt er wel vrij makkelijk zelf een functie voor klussen natuurlijk.
[ code verwijderd ]

[ code verwijderd ]

Of je voegt even een eigen operator toe. :P
Zie bijvoorbeeld deze uitleg.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_158061628
Hallo!

Ik opende net een topic met de vraag of iemand misschien wist hoe ik mijn contact formulier werkend kan krijgen en toen werd ik doorverwezen naar dit topic, dus zal mijn post even ordinair kopiëren :P:

Ik moet voor mijn studie mijn eerste website maken met html en css. Ik heb het mezelf lekker makkelijk gemaakt door een template te gebruiken, maar nu blijk ik mijn contact formulier niet werkend te krijgen.

Ik heb een contact.html, een MailHandler.php, een libmail.php en een TMForm.js bestand die er volgens mij allemaal mee te maken hebben.
Wanneer ik een mail wil versturen, verschijnt er een gifje die laat zien dat die aan het laden is, maar in plaats van dat er "succes" verschijnt, blijft het voor eeuwig laden. Ik ontvang ook geen mail verder. Hopelijk is er een Fokker die me uit de brand kan helpen. :)

Zo ziet het formulier eruit voor en nadat ik een mail stuur:

SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
Dit is de code:
Ik heb mijn mail adres in de HTML en PHP code even verandert naar mail@email.nl.
SPOILER: HTML
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
SPOILER: MailHandler.php
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
SPOILER: TMForm.js
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
Bij voorbaat dank!

[ Bericht 5% gewijzigd door Cikx op 07-12-2015 01:19:45 ]
pi_158069438
Post gewoon je code en/of een link naar je testsetup, die plaatjes zijn onleesbaar.

Tevens moet je gewoon beginnen met debuggen. Zoek uit waar je script op vastloopt. Wordt het client-side script goed doorlopen (gebruik je JS console!)? Wordt de request naar de server uitgevoerd? Worden de juiste parameters hierbij meegestuurd? Krijg je een foutmelding terug? Zo nee, staat display_errors en error_reporting hoog genoeg? Zo ja, zorg dat je de foutmeldingen begrijpt (googlen!)... Etc etc etc.

Scripts werken (bijna) nooit in één keer goed, zonder bovenstaande stappen goed onder de knie te krijgen kom je nergens.
pi_158071462
quote:
14s.gif Op zondag 6 december 2015 22:53 schreef KomtTijd... het volgende:
Post gewoon je code en/of een link naar je testsetup, die plaatjes zijn onleesbaar.

Tevens moet je gewoon beginnen met debuggen. Zoek uit waar je script op vastloopt. Wordt het client-side script goed doorlopen (gebruik je JS console!)? Wordt de request naar de server uitgevoerd? Worden de juiste parameters hierbij meegestuurd? Krijg je een foutmelding terug? Zo nee, staat display_errors en error_reporting hoog genoeg? Zo ja, zorg dat je de foutmeldingen begrijpt (googlen!)... Etc etc etc.

Scripts werken (bijna) nooit in één keer goed, zonder bovenstaande stappen goed onder de knie te krijgen kom je nergens.
Heb de de plaatjes vervangen door de code. :)

Heb overigens geprobeerd te doen wat je zei en dit keer staat er wel succes! wanneer ik een mail stuur, het komt alleen niet aan. Ik krijg verder ook geen error melding bij de JS console. Misschien dat het aan die SMTP server settings ligt.. Ik weet niet goed wat ik daar nou mee aanmoet.
pi_158076570
Verder met debuggen dus. Zorg dat je zeker weet dat je php error reporting aan en hoog genoeg staat, en kijk hoe ver je script wél komt door af-en-toe iets te echo'en.
  vrijdag 11 december 2015 @ 13:05:09 #161
25889 Sitethief
Fulltime Flapdrol
pi_158170109
:( Collega's die Many-to-Many in MySQL niet snappen...

Gebruikers zijn gekoppeld aan objecten, gebruikers kunnen meerdere objecten hebben. Dus dit gaat via een koppeltabel.
Een gebruiker heeft binnen een object op drie verschillende onderdelen een van 3 verschillende rechtenniveau's

Had die collega van mij gewoon voor ieder onderdeel én rechteniveau een aparte entry in die koppeltabel. Waardoor een gebruiker dus in maar liefst 9 entries aan hetzelfde object gekoppeld was. En ik kreeg hem maar niet aan het verstand waarom dat niet handig is...
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_158172283
Jamaar een database werkt toch net als een spreadsheet?
  † In Memoriam † vrijdag 11 december 2015 @ 15:14:40 #163
159335 Boze_Appel
Vrij Fruit
pi_158172647
quote:
17s.gif Op vrijdag 11 december 2015 14:58 schreef KomtTijd... het volgende:
Jamaar een database werkt toch net als een spreadsheet?
Helaas maar al te waar voor de meeste kaartenbakken databases.
Carpe Libertatem
  vrijdag 11 december 2015 @ 16:03:27 #164
25889 Sitethief
Fulltime Flapdrol
pi_158173756
quote:
17s.gif Op vrijdag 11 december 2015 14:58 schreef KomtTijd... het volgende:
Jamaar een database werkt toch net als een spreadsheet?
_O-

Ik wijt het aan onervarenheid, hij werkt nu net 6 maanden als Dev bij ons. Maar ja, dan bied ik mijn eigen ervaringen aan zodat hij niet in dezelfde valkuilen loopt en dan is meneer te koppig om van mij aan te nemen dat dit later problemen oplevert...
Tis jammer de de tijd en ruimte er nu niet is om hem zelf die valkuil in en uit te laten gaan.
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_158174033
quote:
9s.gif Op vrijdag 11 december 2015 15:14 schreef Boze_Appel het volgende:

[..]

Helaas maar al te waar voor de meeste kaartenbakken databases.
Ach, zo'n Cassandra of Mongo database is ook niet veel meer dan een veredelde kaartenbak. :P
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_158179959
quote:
0s.gif Op zondag 6 december 2015 17:48 schreef Cikx het volgende:
Hallo!

Ik opende net een topic met de vraag of iemand misschien wist hoe ik mijn contact formulier werkend kan krijgen en toen werd ik doorverwezen naar dit topic, dus zal mijn post even ordinair kopiëren :P:

Ik moet voor mijn studie mijn eerste website maken met html en css. Ik heb het mezelf lekker makkelijk gemaakt door een template te gebruiken, maar nu blijk ik mijn contact formulier niet werkend te krijgen.

Ik heb een contact.html, een MailHandler.php, een libmail.php en een TMForm.js bestand die er volgens mij allemaal mee te maken hebben.
Wanneer ik een mail wil versturen, verschijnt er een gifje die laat zien dat die aan het laden is, maar in plaats van dat er "succes" verschijnt, blijft het voor eeuwig laden. Ik ontvang ook geen mail verder. Hopelijk is er een Fokker die me uit de brand kan helpen. :)

Zo ziet het formulier eruit voor en nadat ik een mail stuur:

SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
Dit is de code:
Ik heb mijn mail adres in de HTML en PHP code even verandert naar mail@email.nl.
SPOILER: HTML
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
SPOILER: MailHandler.php
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
SPOILER: TMForm.js
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
Bij voorbaat dank!
:P Je hebt het jezelf al makkelijk gemaakt door een template te pakken, en het laatste stukje wat je zelf moet doen vraag je nu hier?
pi_158180016
Iemdand zijn of haar app al getest met PHP7?

Zelf nog niet verder gekomen dan dit, met nginx 1.9.3

:o
pi_158181710
quote:
19s.gif Op vrijdag 11 december 2015 20:53 schreef TwenteFC het volgende:

[..]

:P Je hebt het jezelf al makkelijk gemaakt door een template te pakken, en het laatste stukje wat je zelf moet doen vraag je nu hier?
Het is nou eenmaal mijn eerste site en het werd sterk aangeraden om een template te gebruiken, aangezien de site voornamelijk wordt beoordeeld op de toegankelijkheid en hoe het eruit ziet. Overigens heb ik toch wel zo'n 15-20 uur aan de site zitten sleutelen om uit te vogelen hoe alles werkt en om het naar wens te laten functioneren. Dus het is zeker niet zo dat dit het enige is wat ik hoef te doen en het uit luiigheid hier maar vraag, mocht dat zo overkomen. :P De PHP-code kost me nou eenmaal wat moeite om onder de knie te krijgen en na flink wat gegoogled te hebben leek het me handiger om de specifieke vraag hier maar te stellen in plaats van mogelijk nog tot in den treure naar oplossingen te zoeken, zeker als het betrekkelijk simpel is voor jullie.

Maar goed, heb veel gehad aan de tips om de foutmeldingen op te sporen. Het blijkt nu zo te zijn dat ik een host nodig heb voor het mailverkeer. M'n tutor heeft echter pas geleden laten weten dat PHP zaken zoals zoekbalken of contact formulieren niet nodig zijn. Ik ben dus maar van plan om eerst de rest helemaal uit te werken en mocht ik nog tijd over hebben dan ga ik er maar weer voor zitten. Overigens heeft een andere Fokker zijn hulp aangeboden dus dat is erg tof. :)
pi_158192552
quote:
0s.gif Op vrijdag 11 december 2015 21:45 schreef Cikx het volgende:

[..]

Het is nou eenmaal mijn eerste site en het werd sterk aangeraden om een template te gebruiken, aangezien de site voornamelijk wordt beoordeeld op de toegankelijkheid en hoe het eruit ziet. Overigens heb ik toch wel zo'n 15-20 uur aan de site zitten sleutelen om uit te vogelen hoe alles werkt en om het naar wens te laten functioneren. Dus het is zeker niet zo dat dit het enige is wat ik hoef te doen en het uit luiigheid hier maar vraag, mocht dat zo overkomen. :P De PHP-code kost me nou eenmaal wat moeite om onder de knie te krijgen en na flink wat gegoogled te hebben leek het me handiger om de specifieke vraag hier maar te stellen in plaats van mogelijk nog tot in den treure naar oplossingen te zoeken, zeker als het betrekkelijk simpel is voor jullie.

Maar goed, heb veel gehad aan de tips om de foutmeldingen op te sporen. Het blijkt nu zo te zijn dat ik een host nodig heb voor het mailverkeer. M'n tutor heeft echter pas geleden laten weten dat PHP zaken zoals zoekbalken of contact formulieren niet nodig zijn. Ik ben dus maar van plan om eerst de rest helemaal uit te werken en mocht ik nog tijd over hebben dan ga ik er maar weer voor zitten. Overigens heeft een andere Fokker zijn hulp aangeboden dus dat is erg tof. :)
Ah kijk dat wist ik niet, zoeken en vragen is ook een groot onderdeel van ontwikkelen, tot op een zekere hoogte, dus dat neem ik je niet kwalijk hoor ;).
pi_158192808
quote:
0s.gif Op vrijdag 11 december 2015 21:45 schreef Cikx het volgende:

[..]

Maar goed, heb veel gehad aan de tips om de foutmeldingen op te sporen. Het blijkt nu zo te zijn dat ik een host nodig heb voor het mailverkeer.
^O^ Goed dat je dat inmiddels zelf uitgevonden hebt! En dat je het hier laat weten, vinden de mensen die je helpen ook weer leuk om te horen ;)
  FOK!-Schrikkelbaas woensdag 16 december 2015 @ 13:59:35 #171
1972 Swetsenegger
Egocentrische Narcist
pi_158282211
Ik loop even klem, ik denk dat ik een subquery moet gaan bouwen, maar even controleren met jullie :)

Ik heb een UPDATE query waarbij de WHERE clause een rijtje ID's is die uit een formulier submit komt:

1
2
3
4
5
<?php
$productIDs 
array_values($_POST['assigned']);
$query "UPDATE products SET seasonAction=1 WHERE id IN (".implode(', ',$productIDs).")";
$result=mysql_query($query);
?>

Dat werkt uiteraard prima, maar nu wil een volgorde meegeven tijdens deze update actie. Nu dacht ik slim te zijn door gewoon de array key mee te geven zodat ik ze later op dezelfde volgorde kan uitlezen, maar... Hoe krijg ik in deze query bij elk individueel product ID de array key weggeschreven?

1
2
3
4
5
6
<?php
$productIDs 
array_values($_POST['assigned']);
$priority array_keys($_POST['assigned']);
$query "UPDATE products SET seasonAction=1, priority = ".en wat nu hier?." WHERE id IN (".implode(', ',$productIDs).")";
$result=mysql_query($query);
?>

Kortom, ik krijg een POST binnen met bv de volgende array

[code]
[0] => [338], [1] => [256], [2] => [479]

Dan wil ik dus bij alle 3 de productID's het veld seasonAction op 1 zetten en bij productID 338, priority op 0. Bij productID 256, priority op 1 en bij productID 479, priority op 2.

[ Bericht 2% gewijzigd door Swetsenegger op 16-12-2015 14:11:46 ]
pi_158282442
Voor zover ik weet dan dat alleen:
1) door meerdere UPDATE queries
2) één ingewikkelde query met CASE .. WHEN .. THEN, waarbij je een WHEN hebt voor elk product
Schuimpje... mijn liefste. Verlaat mij nimmer weer...
pi_158282479
quote:
5s.gif Op woensdag 16 december 2015 13:59 schreef Swetsenegger het volgende:
Ik loop even klem, ik denk dat ik een subquery moet gaan bouwen, maar even controleren met jullie :)

Ik heb een UPDATE query waarbij de WHERE clause een rijtje ID's is die uit een formulier submit komt:
[ code verwijderd ]

Dat werkt uiteraard prima, maar nu wil een volgorde meegeven tijdens deze update actie. Nu dacht ik slim te zijn door gewoon de array key mee te geven zodat ik ze later op dezelfde volgorde kan uitlezen, maar... Hoe krijg ik in deze query bij elk individueel product ID de array key weggeschreven?
[ code verwijderd ]

Dat kan niet in een enkele UPDATE. Dit is alleen mogelijk door de UPDATE voor iedere combinatie opnieuw uit te voeren via een foreach.

Het is wel via een andere constructie te doen maar dat lijkt me hier wat overkill.
Zie: http://stackoverflow.com/questions/3432/multiple-updates-in-mysql
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
  FOK!-Schrikkelbaas woensdag 16 december 2015 @ 14:12:22 #174
1972 Swetsenegger
Egocentrische Narcist
pi_158282523
Hmz ja, dat dacht ik al. Das wel gezeik.
pi_158282752
En wat als de volgende post een bepaald product_id niet meer bevat en de waarde hiervan nog wel op 9 staat bijvoorbeeld? Of post je altijd alle producten?
  FOK!-Schrikkelbaas woensdag 16 december 2015 @ 14:24:25 #176
1972 Swetsenegger
Egocentrische Narcist
pi_158282848
quote:
19s.gif Op woensdag 16 december 2015 14:20 schreef TwenteFC het volgende:
En wat als de volgende post een bepaald product_id niet meer bevat en de waarde hiervan nog wel op 9 staat bijvoorbeeld? Of post je altijd alle producten?
Bij de verwerking van de post reset ik nu eerst alle seasonActions naar 0, daarna ga ik de nieuwe zetten.

Aan de voorkant haal ik alleen de combinatie op, dus alle producten waarbij seasonItem op 1 staat en dan wil ik ze dus op volgorde van priority tonen. Nu worden ze gewoon ascending op basis van product ID getoond.
pi_158283150
Ik zou een transactie bouwen en daarin alle benodigde queries uitvoeren.
Schuimpje... mijn liefste. Verlaat mij nimmer weer...
pi_158283224
quote:
14s.gif Op woensdag 16 december 2015 14:24 schreef Swetsenegger het volgende:

[..]

Bij de verwerking van de post reset ik nu eerst alle seasonActions naar 0, daarna ga ik de nieuwe zetten.

Aan de voorkant haal ik alleen de combinatie op, dus alle producten waarbij seasonItem op 1 staat en dan wil ik ze dus op volgorde van priority tonen. Nu worden ze gewoon ascending op basis van product ID getoond.
Krijgen deze seasonactions altijd een priority of hoeft dat niet? Dus het kan voorkomen dat je bijvoorbeeld gewoon 3 speciale producten per se bovenaan wilt zetten en de rest maakt niet?
  FOK!-Schrikkelbaas woensdag 16 december 2015 @ 14:46:22 #179
1972 Swetsenegger
Egocentrische Narcist
pi_158283377
quote:
19s.gif Op woensdag 16 december 2015 14:41 schreef TwenteFC het volgende:

[..]

Krijgen deze seasonactions altijd een priority of hoeft dat niet? Dus het kan voorkomen dat je bijvoorbeeld gewoon 3 speciale producten per se bovenaan wilt zetten en de rest maakt niet?
Allemaal die gepost worden.
pi_158283622
quote:
0s.gif Op woensdag 16 december 2015 14:46 schreef Swetsenegger het volgende:

[..]

Allemaal die gepost worden.
Oké dan zou ik het denk ik voor mezelf niet moeilijker maken dan het hoeft te zijn, en de sorteer volgorde gewoon in een aparte tabel gooien. en tijdens het ophalen van deze producten hier op sorteren.

Wat ook nog wel zou kunnen, wanneer je van te voren toch al van alles gaat updaten is de sorteervolgorde op 0 zetten voor alles en dmv een batch insert tijdens de ON DUPLICATE KEY enkel de sorteervolgorde en de seasonAction aanpassen.

Maar dit is wel wat gevaarlijk, mocht het product niet bestaan.
  FOK!-Schrikkelbaas woensdag 16 december 2015 @ 15:00:31 #181
1972 Swetsenegger
Egocentrische Narcist
pi_158283712
quote:
19s.gif Op woensdag 16 december 2015 14:57 schreef TwenteFC het volgende:

[..]

Oké dan zou ik het denk ik voor mezelf niet moeilijker maken dan het hoeft te zijn, en de sorteer volgorde gewoon in een aparte tabel gooien. en tijdens het ophalen van deze producten hier op sorteren.

Wat ook nog wel zou kunnen, wanneer je van te voren toch al van alles gaat updaten is de sorteervolgorde op 0 zetten voor alles en dmv een batch insert tijdens de ON DUPLICATE KEY enkel de sorteervolgorde en de seasonAction aanpassen.
Het zit er al in met een foreach. In plaats van 1 query heb ik nu natuurlijk de hoeveelheid queries van producten die gepost worden, maar heel spannend is het niet.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
//Set all previous items to NULL to disconnect from frontpage and priority. Then set new items
if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['submitSeasonAction'])){
    
$query="UPDATE products SET seasonAction=0, priority=NULL";
    
$result=mysql_query($query);
    if(isset(
$_POST['assigned']) && count($_POST['assigned'])!=0){
        foreach (
$_POST['assigned'] as $key => $value) {
            
$key ++;
            
$query "UPDATE products SET seasonAction=1, priority=".$key." WHERE id=".$value;
            
$result=mysql_query($query);
        }
    }
    
header("location:".$_SERVER['PHP_SELF']."?actie=seizoensActie");
}
?>
pi_158283802
quote:
0s.gif Op woensdag 16 december 2015 15:00 schreef Swetsenegger het volgende:

[..]

Het zit er al in met een foreach. In plaats van 1 query heb ik nu natuurlijk de hoeveelheid queries van producten die gepost worden, maar heel spannend is het niet.
[ code verwijderd ]

:o Dan nog even iets anders, is dit een testprojectje of iets wat daadwerkelijk in productie gaat komen? Ik zou persoonlijk als ik jou was eens gaan kijken naar PDO/mysqli.
  FOK!-Schrikkelbaas woensdag 16 december 2015 @ 15:05:45 #183
1972 Swetsenegger
Egocentrische Narcist
pi_158283837
quote:
19s.gif Op woensdag 16 december 2015 15:04 schreef TwenteFC het volgende:

[..]

:o Dan nog even iets anders, is dit een testprojectje of iets wat daadwerkelijk in productie gaat komen? Ik zou persoonlijk als ik jou was eens gaan kijken naar PDO/mysqli.
Ja moet ik nog omzetten inderdaad!
pi_158283860
quote:
14s.gif Op woensdag 16 december 2015 15:05 schreef Swetsenegger het volgende:

[..]

Ja moet ik nog omzetten inderdaad!
En vergeten dat mysql_query bestaat :P
  FOK!-Schrikkelbaas woensdag 16 december 2015 @ 15:11:08 #185
1972 Swetsenegger
Egocentrische Narcist
pi_158283960
quote:
19s.gif Op woensdag 16 december 2015 15:06 schreef TwenteFC het volgende:

[..]

En vergeten dat mysql_query bestaat :P
De voorkant van deze site heb ik al omgezet naar mysqli :@
pi_158284068
quote:
0s.gif Op woensdag 16 december 2015 15:11 schreef Swetsenegger het volgende:

[..]

De voorkant van deze site heb ik al omgezet naar mysqli :@
Gebruik je composer? Je kan desnoods een package pakken welke een wrapper is hiervoor.

https://github.com/illuminate/database

Is misschien even een uurtje werk, maar vanaf dan hoef jij jezelf er ook niet meer druk om te maken. Naast deze zijn er ook genoeg anderen om uit te kiezen.

https://packagist.org/
pi_158285913
quote:
0s.gif Op woensdag 16 december 2015 15:11 schreef Swetsenegger het volgende:

[..]

De voorkant van deze site heb ik al omgezet naar mysqli :@
Als je toch bezig bent, waarom dan niet gewoon gelijk makkelijk doen en PDO gebruiken?
Edit: Of een ORM idd, ben zelf van de Doctrine.
Edit2: En herschrijven moet je sowieso want wat je hier aan code geplakt hebt zit barstensvol SQL injectie mogelijkheden.
  FOK!-Schrikkelbaas woensdag 16 december 2015 @ 17:09:00 #188
1972 Swetsenegger
Egocentrische Narcist
pi_158286843
quote:
14s.gif Op woensdag 16 december 2015 16:29 schreef KomtTijd... het volgende:

[..]

Als je toch bezig bent, waarom dan niet gewoon gelijk makkelijk doen en PDO gebruiken?
Edit: Of een ORM idd, ben zelf van de Doctrine.
Edit2: En herschrijven moet je sowieso want wat je hier aan code geplakt hebt zit barstensvol SQL injectie mogelijkheden.
Dit is backend waar 1 gebruiker toegang heeft.
pi_158286895
quote:
0s.gif Op woensdag 16 december 2015 17:09 schreef Swetsenegger het volgende:

[..]

Dit is backend waar 1 gebruiker toegang heeft.
:P Maar als je login/authenticatie script er ook zo uit ziet. Daarnaast ben jij jezelf nu ook aan het belemmeren wat betreft het updaten van jouw PHP versie in de toekomst, in PHP7 bijvoorbeeld bestaat de hele mysql_query niet meer.

Het zijn uiteindelijk maar goed bedoelde tips natuurlijk, wat en of je er iets mee gaat doen is aan jou.
  FOK!-Schrikkelbaas woensdag 16 december 2015 @ 17:13:23 #190
1972 Swetsenegger
Egocentrische Narcist
pi_158286909
quote:
19s.gif Op woensdag 16 december 2015 17:11 schreef TwenteFC het volgende:

[..]

:P Maar als je login/authenticatie script er ook zo uit ziet.
Nee dus :)

quote:
Daarnaast ben jij jezelf nu ook aan het belemmeren wat betreft het updaten van jouw PHP versie in de toekomst, in PHP7 bijvoorbeeld bestaat de hele mysql_query niet meer.

Het zijn uiteindelijk maar goed bedoelde tips natuurlijk, wat en of je er iets mee gaat doen is aan jou.
Ik ga het ook vervangen. Zoals gezegd is het grootste deel al klaar. Ik heb 4 back-end pagina's die ik moet aanpassen.
  FOK!-Schrikkelbaas woensdag 16 december 2015 @ 17:35:35 #191
1972 Swetsenegger
Egocentrische Narcist
pi_158287271
Dus geen zorgen jongens. Ik ben niet de beste programmeur, maar procedureel kan ik aardig uit de voeten.

Ik sanitize m'n input, ik preg match inkomende email adressen, ik intval als ik een integer verwacht, ik mysqli_real_escape_string inkomende vars, ik sla passwords gehashed en gesalt op....

Ik ben niet de beste programmeur, maar ik lees hier al een tijdje mee. Sterker nog.... Ik ben deze reeks begonnen :P



[ Bericht 7% gewijzigd door Swetsenegger op 16-12-2015 17:44:03 ]
  donderdag 17 december 2015 @ 17:52:19 #192
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_158311341
Garpig en revelant:

pi_158315321
quote:
0s.gif Op donderdag 17 december 2015 17:52 schreef Ser_Ciappelletto het volgende:
Garpig en revelant:

[ afbeelding ]
:D
  zondag 20 december 2015 @ 19:10:08 #194
230788 n8n
Pragmatisch
pi_158387309
php maakt onderscheid tussen strings in enkele en dubbele quotes. Kan je in een functie checken of een parameter met enkele of dubbele quotes is ingevoerd?

1
2
3
4
5
<?php
function quote($string){
  return 
'$string heeft X quotes'
}
?>

waar X ", of ' kan zijn
Specialization is for insects”.—Robert Heinlein
  Moderator / Redactie Sport zondag 20 december 2015 @ 19:24:29 #195
359864 crew  Nattekat
De roze zeekat
pi_158387613
quote:
14s.gif Op zondag 20 december 2015 19:10 schreef n8n het volgende:
php maakt onderscheid tussen strings in enkele en dubbele quotes. Kan je in een functie checken of een parameter met enkele of dubbele quotes is ingevoerd?
[ code verwijderd ]

waar X ", of ' kan zijn
Staan ze in de string zelf? Dan is het te achterhalen, anders niet (of er is een hele omslachtige manier waar ik geen weet van heb)
100.000 katjes
Maakte de 100.000e post in BIT
Er eens op uit?
pi_158387654
quote:
14s.gif Op zondag 20 december 2015 19:10 schreef n8n het volgende:
php maakt onderscheid tussen strings in enkele en dubbele quotes. Kan je in een functie checken of een parameter met enkele of dubbele quotes is ingevoerd?
[ code verwijderd ]

waar X ", of ' kan zijn
Ik begrijp niet helemaal wat je wilt.
Je wilt weten hoe $string was opgebouwd?
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
  zondag 20 december 2015 @ 19:47:59 #197
12221 Tijn
Powered by MS Paint
pi_158388177
quote:
14s.gif Op zondag 20 december 2015 19:10 schreef n8n het volgende:

php maakt onderscheid tussen strings in enkele en dubbele quotes.
Volgens mij heeft PHP maar een string type. Of je zo'n string met enkele of dubbele quotes aanmaakt, heeft invloed op variabelen die in de string worden geparsed of niet, maar daarna wordt de string opgeslagen als het enige type string dat PHP kent.
  zondag 20 december 2015 @ 20:21:01 #198
230788 n8n
Pragmatisch
pi_158389121
quote:
0s.gif Op zondag 20 december 2015 19:24 schreef Nattekat het volgende:

[..]

Staan ze in de string zelf? Dan is het te achterhalen, anders niet (of er is een hele omslachtige manier waar ik geen weet van heb)
quote:
3s.gif Op zondag 20 december 2015 19:47 schreef Tijn het volgende:

[..]

Volgens mij heeft PHP maar een string type. Of je zo'n string met enkele of dubbele quotes aanmaakt, heeft invloed op variabelen die in de string worden geparsed of niet, maar daarna wordt de string opgeslagen als het enige type string dat PHP kent.
Ok duidelijk

v
quote:
7s.gif Op zondag 20 december 2015 19:26 schreef Aether het volgende:

[..]

Ik begrijp niet helemaal wat je wilt.
Je wilt weten hoe $string was opgebouwd?
Ik wilde weten of quote("string") of quote('string') werd aangeroepen.
Specialization is for insects”.—Robert Heinlein
  FOK!-Schrikkelbaas zondag 20 december 2015 @ 20:26:28 #199
1972 Swetsenegger
Egocentrische Narcist
pi_158389318
Wat probeer je precies op te lossen dan?
pi_158389403
quote:
14s.gif Op zondag 20 december 2015 20:21 schreef n8n het volgende:

[..]

[..]

Ok duidelijk

v

[..]

Ik wilde weten of quote("string") of quote('string') werd aangeroepen.
Dat kun je niet achterhalen.
De functie die aangeroepen wordt krijgt "een" string binnen en weet niet hoe of waar deze vandaan komt (bijvoorbeeld uit een database of bestand).
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')