[php] sla if voorwaarde op in db voor hergebruik

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Een rare vraag wellicht mensen,

Hoe sla ik een if voorwaarde op in mijn mysql database. Ik wil de voorwaarde kunnen gebruiken in mijn php code als ik deze uit de database heb gehaald.

Dus hoe sla ik in de database op bijvoorbeeld:

if($var == "hallo")

ook zou kunnen:

$var == "hallo"

Zodat ik deze later dus kan implementeren in de rest van mijn code.

?????????

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Dat is mogelijk met eval. Dit is echter ten zeerste af te raden omdat het niet ten goede komt aan de onderhoudbaarheid van je code.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

djluc:
Dat is mogelijk met eval. Dit is echter ten zeerste af te raden omdat het niet ten goede komt aan de onderhoudbaarheid van je code.
Mja, en dat lijkt me ook de meest vreemde benadering van de zaak. Wat de TS eigenlijk vraagt is hoe hij/zij een boolean in de database opslaat, oftewel:

PHP:
1
2
3
4
5
6
7
8
$query = "SELECT voorwaarde FROM tabel WHERE id=169;"
$res = mysql_query ( $query );
$row = mysql_fetch_assoc ( $query );
if ( $row [ 'voorwaarde' ] ) {
   // voorwaarde true
} else {
   // voorwaarde niet true (false)
}


En daar zijn heel wat manieren op te bedenken. Om het direct in PHP true/false te laten evalueren is een INT kolom die op 0 of niet 0 staat, of een CHAR(1) die leeg of niet leeg is het makkelijkst.

Voor het mooi kies ik zelf altijd voor een ENUM('true','false'). Dan mag de kolom 'true' of 'false' bevatten, en zet ik m'n php code altijd iets van
code:
1
2
3
if ( $row [ 'some_boolean_field' ] == 'true' ) {
   // ...
}

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Als je zijn vraag gewoon letterlijk leest:
Dus hoe sla ik in de database op bijvoorbeeld:
if($var == "hallo")
ook zou kunnen:
$var == "hallo"
Dan zou er minimaal de gehele vergelijking in de database moeten komen te staan. Jouw manier zal natuurlijk nooit op basis van $var de vergelijking uit gaan voeren, terwijl dit wel gebeurt met eval. Het is dus een beetje een dubieuze vraag imo.

  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 02-09 19:22

GraasGast

Analogue Heaven

Als $var altijd zo heet, kan je ook alleen de waarde waartegen gecheckt word opslaan, in dit geval "Hallo"

PHP:
1
2
3
if ($var == $row['value']) {
    //iets
}

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

djluc:
Als je zijn vraag gewoon letterlijk leest:
[...]

Dan zou er minimaal de gehele vergelijking in de database moeten komen te staan. Jouw manier zal natuurlijk nooit op basis van $var de vergelijking uit gaan voeren, terwijl dit wel gebeurt met eval. Het is dus een beetje een dubieuze vraag imo.
Mja, je kan zeggen wat je wilt, maar alles wat binnen de haakjes binnen een if ( ) staat evalueert uiteindelijk toch naar een boolean. Dus je kan de condition ook aan een boolean toekennen en dus ook opslaan in een database.

voorbeeldje:
PHP:
1
2
3
4
5
6
7
8
9
$bool = ( $a == 'b' && $c == 'woei' || $spef != 'knel' );
echo gettype ( $bool ), '<br />'; // geeft dus 'boolean' als output

// en vervolgens in een database zetten
$query = sprintf ( 
   "INSERT INTO tabel(some_boolean_field) VALUES('%s')",
   $bool ? 'true' : 'false'
);
// o.i.d.

[ Voor 25% gewijzigd door drm op 11-12-2003 16:43 . Reden: quote added ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 02-09 19:22

GraasGast

Analogue Heaven

Niet als de variabele veranderd, dan kan de boolean ook veranderen

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

GraasGast:
Niet als de variabele veranderd, dan kan de boolean ook veranderen
Ja, op die fiets... dan moet je die variabele in de database zetten :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Als dat zo is dan is de aanpak sowieso verkeerd

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • sirdupre
  • Registratie: Maart 2002
  • Laatst online: 27-04 09:36
ik snap nog steeds niet precies wat de TS nou wil, en wat zijn doel ervan is :P.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 11 december 2003 @ 16:14:
Een rare vraag wellicht mensen,
Inderdaad :)
Hoe sla ik een if voorwaarde op in mijn mysql database. Ik wil de voorwaarde kunnen gebruiken in mijn php code als ik deze uit de database heb gehaald.
Ik betwijfel of je in de praktijk het nut ervan kan ondervinden, de overhead van dat in je database opslaan is dusdanig veel groter dan het opnieuw uitvoeren van dezelfde if dat je het beter niet kan doen.

Dus mijn advies is iig om het gewoon niet te doen, als je stukken code niet op tig plaatsen hetzelfde wilt hebben, dan moet je met functies en evt objecten gaan werken... niet met rare dingen als het opslaan van je if's in je database :)

Verwijderd

Topicstarter
Ok, ik zal wat duidelijker zijn.

Ik moet een vragenlijst die is gegenereert met de programmeer taal Metacard uit een text bestand halen en opslaan in de database. Ik moet later de vragenlijst op internet kunnen reproduceren mbv. php. De vragen en antwoordsets zijn gewone tekst dus zover geen probleem. De voorwaarden echter zijn in het text bestand opgeslagen in daadwerkelijke Metacard code / syntax. Ik zal deze voorwaarden echter ook op een of andere manier moeten opslaan om de vragenlijst helemaal compleet werkend te krijgen.

Dit is een voorbeeld van de Metacard code (van de voorwaarde van een vraag):

antwoord("SKL.EF01") is not 0 AND antwoord("SKL.EF01X01")+antwoord("SKL.EF01X02")+antwoord("SKL.EF01X03")+\
antwoord("SKL.EF01X04")+antwoord("SKL.EF01X05")+antwoord("SKL.EF01X06")+\
antwoord("SKL.EF01X07")+antwoord("SKL.EF01X08")+antwoord("SKL.EF01X09")+\
antwoord("SKL.EF01X10")+antwoord("SKL.EF01X11") is not 0 AND antwoord("SKL.EF01X12") is not 0

[ Voor 16% gewijzigd door ACM op 11-12-2003 17:21 ]


  • sirdupre
  • Registratie: Maart 2002
  • Laatst online: 27-04 09:36
Het eerste wat me zo te binnen schiet is die zooi als string opslaan en dan maar zelf een parser ervan schrijven ofzo....
Of wil je wat anders dan die vragenlijst webbased aan mensen voor kunnen leggen?

[ Voor 7% gewijzigd door sirdupre op 11-12-2003 17:41 ]


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Ik zou eens gaan proberen om inderdaad een soort van parser hiervoor te gaan schrijven. Je zou eens kunnen beginnen met een aantal malen exploden. Bijvoorbeeld op +, is not, AND enzovoorts. Je kunt als je en beetje secuur werkt dan een nette PHP implementatie hiervan maken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zal inderdaad de MC code moeten parsen naar php code. Een lastige ingewikkelde aangelegenheid, maar dit zou toch moeten lukken. Dan sla ik dus de php code op in de database. Als ik dan de code nodig heb haal ik deze uit de database en activeer 'm dmv. eval().

Maar eerst ... ... ... . . WEEKEND !!

ps. bedankt voor alle reacties en het meedenken.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Verwijderd schreef op 12 december 2003 @ 17:07:
Ik zal inderdaad de MC code moeten parsen naar php code. Een lastige ingewikkelde aangelegenheid, maar dit zou toch moeten lukken. Dan sla ik dus de php code op in de database. Als ik dan de code nodig heb haal ik deze uit de database en activeer 'm dmv. eval().
Als je dan toch zelf een parser gaat schrijven dan hoef je natuurlijk al helemaal geen eval meer te gebruiken!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil alle kansen op foutmeldingen en errors afvangen bij het opslaan in de database. Bij het reproduceren van de vragenlijst kan ik dit risico niet lopen. Ik moet dus eerst naar goedwerkende php code parsen, dan met een ingebouwd stukje script testen of het werkt met eval() en vervolgens opslaan in de database. Ik sla dan dus de php code op die al werkte met eval() en niet de MC code.
Pagina: 1