2014-11-29, 17:44
  #13
Medlem
Citat:
Ursprungligen postat av AlexanderAnka
I fallet med e-post så är det enkelt, men hur och var anger jag bäst att en modul kräver fälten firstname && zip && (lastname || address) eller ännu mer komplexa kriterier?

Spara den texten i databasen.

Läs den, byt ut alla `([[:alnum:]]+)` mot `isset($_POST["\1"])` med en regsub-operation (som jag antar att PHP har) och kör eval på resultatet.
Citera
2014-11-29, 20:03
  #14
Medlem
Citat:
Ursprungligen postat av den.femte.kaparen
Läs den, byt ut alla `([[:alnum:]]+)` mot `isset($_POST["\1"])` med en regsub-operation (som jag antar att PHP har) och kör eval på resultatet.
Tack! Den lösningen fungerar, men jag hade helst önskat en lösning utan eval(). Känns som en nödlösning.
Citera
2014-11-29, 21:10
  #15
Medlem
Citat:
Ursprungligen postat av AlexanderAnka
Tack! Den lösningen fungerar, men jag hade helst önskat en lösning utan eval(). Känns som en nödlösning.

Antingen kör du eval, eller skriver själv koden för att parse:a. Det är liksom alternativen.
Citera
2014-11-29, 21:46
  #16
Medlem
Citat:
Ursprungligen postat av den.femte.kaparen
Antingen kör du eval, eller skriver själv koden för att parse:a. Det är liksom alternativen.
Jag vill helst parse:a. Frågan som jag har försökt förmedla sedan trådstart utan att lyckas särskilt bra är vilket format jag ska spara mitt logiska uttryck i, och hur jag sedan parsar detta på ett så bra och smidigt sätt som möjligt :-)

Jag gör ett försök i inlägg#4 som både är omständligt och inte klarar hantera nästlad logik. Är övertygad om att det går att göra bättre. Problemet lär inte vara unikt.
Citera
2014-11-30, 01:53
  #17
Medlem
Citat:
Ursprungligen postat av AlexanderAnka
Jag vill helst parse:a. Frågan som jag har försökt förmedla sedan trådstart utan att lyckas särskilt bra är vilket format jag ska spara mitt logiska uttryck i, och hur jag sedan parsar detta på ett så bra och smidigt sätt som möjligt :-)

Jag gör ett försök i inlägg#4 som både är omständligt och inte klarar hantera nästlad logik. Är övertygad om att det går att göra bättre. Problemet lär inte vara unikt.

Kanske en klass med attributen...

* Operand 1
* Sträng - AND, OR osv...
* Operand 2

...där operanderna antingen är objekt av samma klass (referenser eller vad nu PHP använder) eller en sträng - firstname, zip osv... EDIT: Strängarna ska nog också vara objekt så att man kan hantera båda typer av operander på samma sätt.

Och googla "PHP serialize".

Evaluerar det gör du rekursivt:

Kod:
bool myEval(expr) {
    if (exprtypen är sträng) {
        return isset(...);
    } else {
        switch (expr.operator) {
            case AND:
                return myEval(operand1) && myEval(operand2);
                break;
            case OR:
                return myEval(operand1) || myEval(operand2);
                break;
        }
    }
}
__________________
Senast redigerad av den.femte.kaparen 2014-11-30 kl. 02:24.
Citera
2014-11-30, 13:33
  #18
Medlem
Några har nog sagt det innan. Om svaret är eval så ställer du fel fråga.
Citera
2014-11-30, 20:21
  #19
Medlem
Citat:
Ursprungligen postat av newone
Om svaret är eval så ställer du fel fråga.
Det där var en väldigt korkad mening.

Om man inte på förhand vet svaret på en fråga så kan man ju inte heller döma frågan som "fel" på grund av svaret.

Du kan kalla mig för idiot eller kritisera att min fråga är dåligt formulerad med mera. Men att säga att frågan är "fel" pga att svaret är eval är dumt. Riktigt dumt.
Citera
2014-12-02, 13:37
  #20
Medlem
Jag har inte riktigt förstått grundproblemet, tror jag. Varför behöver det sparas i en databas?

Kan inte varje modul själv ha uttrycken direkt som kod? När användaren sen väljer en modul är det bara att köra modulens valideringsfunktion mot formulärsfälten?

Något i stil med
[php]
$formFields = getFormFields();
while ($row = mysqli_fetch_assoc($resAllModules)) {
//Pudelns kärna. Jag vill kunna spara ett logiskt uttryck
// i "requiredFields" som jag kan jämföra mot $formFields
// för att avgöra om kunden får välja denna modul eller ej.
if($moduleFormFieldValidators[$row["moduleName"]]($formFields)){
echo "<input type='checkbox' value='{$row["moduleID"]}'> {$row["moduleName"]}";
}
else{
echo "{$row["moduleName"]} kan ej väljas eftersom ditt formulär saknar fält som krävs";
}
}
[/php]
Det förutsätter ju att varje modul registrerat en validator i $moduleFormFieldValidators, vilket inte borde vara ett problem då modulen redan är inkluderad.

(Sen kanske det är snyggare att göra något lämpligt objekt av $moduleFormFieldValidators istället för en array, men beror ju helt på dina behov och hur din kod idag ser ut.)
Citera
2014-12-02, 19:52
  #21
Medlem
Citat:
Ursprungligen postat av AVGASBARN
Jag har inte riktigt förstått grundproblemet, tror jag. Varför behöver det sparas i en databas?
Jag har gjort mitt bästa för att försöka förklara det men uppenbarligen misslyckats. Det är inget stort problem och jag hittar på någon annan lösning.

Tack för att ni försökte, tråden kan stängas.
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in