Datum från html-formulär till datumfält i Filemaker

Tråden skapades och har fått 9 svar. Det senaste inlägget skrevs .
1

Jag försöker få ett html-formulärfält (en textruta) att behandlas av Lasso för att läggas in i ett datumfält i en Filemaker-databas. Datum skrivs in för hand i formatet: ÅÅÅÅ-MM-DD. Jag stöter på patrull och Filemaker vägrar ta emot datan. Väljer jag att ändra fälttyp från datum till text så fungerar det fint. Varför går det inte och hur kan jag få det att fungera?

Felet är att data inte är i det format som FileMaker tycker att det skall vara på ett datum-fält. Du kan testa dig fram genom att prova att skicka in varianter på datum i datum-fältet, för att se vad FileMaker accepterar. Var noga med att inte stöpa om datumet genom date format-taggen. Prova dig igenom både svenska och amerikanska datumformat. Tex

2003/25/12
12/25/09 - US
25/12/09 - UK
03-12-25

När du vet det kan du sedan skapa en date-format-tagg som fungerar. Som tar data ur formuläret, formaterar om det, anger typen datum på det och skickar in det i fältet i FileMaker.

Kom ihåg att bara för att data ser ut som ett datum, betyder inte det att Lasso/FileMaker tycker det. Alla data från webbformulär till Lasso är text. Du måste specifikt tala om det.

Senast redigerat 2009-06-26 01:22

Okej, det verkar rätt logiskt och jag hade en misstanke om att just det sätt datumet skrevs in i html-formuläret skulle avgöra om Filemaker kunde förstå det eller inte. Jag får återkomma med testresultat när jag har haft möjlighet att testa olika inmatningsformat.

Själva Lasso-taggen [Date->format] ger mig dock lite mer huvudbry (då jag är väldigt grön på Lasso). Formuläret finns på en html/lasso-sida som skickar vidare parameter-informationen till nästa sida där Lasso-taggen -Add finns för att lägga en ny post till Filemaker-databasen. Kan jag lägga in följande sträng före -Add?:
[Action_Param: 'datum_i_formularet'->(Format: '%D')]
Men hur kan Lasso förstå att ett datum i formatet 2009-06-26 som jag matar in i ett textfält på html-formuläret faktiskt är ett datum?

Ah, ok då förstår jag hur du jobbar. Det finns väldiga nackdelar med det sättet att skriva Lasso-kod som du arbetar med. Formulärdata hamnar direkt i en inline på svarssidan som skapar en post i databasen. Inte alls bra och när det gäller SQL-databaser sårbart för sk SQL-injection.

http://sv.wikipedia.org/wiki/SQL-injektion (Svenska)
http://en.wikipedia.org/wiki/SQL_injection (Engelska)

Bättre: Alla formulärdata läggs in i variabler på svarssidan och när behov finns (tex gällande just datum), formateras de om, kontrolleras för olika typer av fel, rättas till osv. Sedan kan man ha en ifsats som inte skapar posten om det är massa fel, och inuti den if-satsen kan man sedan om allt är OK, ha inlinen som skapar posten. Den inlinen gör det med hjälp av korrekt formaterade och "masserade" data som finns i variabler, inte formulärdata. Förstod du det där?

Delarna i svarssidan är alltså:

1. Tag alla formulärdata, lägg in i variabler.
2. Formatera om vissa data.
3. Kontroll av data - sätt en eller flera variabeler (som vi kan kalla för flagga). Här filtrerar man bort saker som inte får stoppas in i databasen, konstiga tecken, text in i nummerfält, och man kollar att nummer är inom bestämda värden. Kanske man inte skall acceptera en order där antalet är 10.000.000?
4. Om kontrollen gick bra, skapa posten.
5. Om kontrollen inte gick bra, visa felmeddelande. Om du är duktig på Lasso, kan du här inkludera samma formulär igen, med allt som användaren skrev in, ifyllt i formuläret och med felmeddelanden utskrivna i samband med formuläret och fältet det är fel på.

Det förvånar mig inte att databasinmatningssättet inte var direkt optimal. Jag arbetar med ändringar i redan existerande databaser och html/lasso-sidor. Eftersom jag inte har någon gedigen grund i min Lasso-kunskap jobbar jag efter principen att lära genom den kod som redan finns där. Jag vet tyvärr inget sätt att söka efter kod-exempel genom Google. Lasso Reference är en bra uppslagskälla, men knappast en steg-för-steg guide att lära sig grunderna genom. (Varför finns inte Lasso som en kurs hos Lynda.com?) Det låter logiskt och smart att lägga formulärdata som variabler. Jag får försöka lista ut hur man gör det. Men jag förstår fortfarande inte hur Lasso kan formatera om datan ”2009-06-25” till det faktiska datumet i format som Filemaker förstår.

Tack för dina snabba svar!

Det finns massa kodexempel i manualen och på http://www.lassosoft.com/ webbsida.

Tillägg: Lite mera specifikt så finns det flera bra kategorier här, tex Novice och Best Practices:

http://www.lassotech.com/

I den senare finns denna artikel som visar exakt vad jag pratar om:

[TotW] Parameters, Defaults, Variables, and Sessions (Det är ett tip of the week, och dessa är läsvärda och finns på egen plats. Tip of the Week.

Här finns en till bra:
http://pageblocks.org/refc/refc_security#validation (länk direkt till plats i artikel som talar om input validation)

För att svara på din specifika fråga som jag formulerar mera generellt: Hur omvandlar man tex till data av en viss typ, så vill jag peka dig till referens-databasen i vilken du hittar tags som skapar variabler, omformar text och hanterar datum. Då kan tex använda första fyra tecknen från formuläret, avläst via en string-tag, i en variabel du kallar för theyear och den används sedan i en annan tag som skapar ett datum av textdata. Möjligtvis behöver du inte gå omvägen, kolla på taggen date och experimentera i andra filer.

Senast redigerat 2009-06-26 13:44
Ursprungligen av Taz_1999:

Det finns massa kodexempel i manualen och på LassoSoft webbsida.

Tillägg: Lite mera specifikt så finns det flera bra kategorier här, tex Novice och Best Practices:

LassoTech : Home

I den senare finns denna artikel som visar exakt vad jag pratar om:

[TotW] Parameters, Defaults, Variables, and Sessions (Det är ett tip of the week, och dessa är läsvärda och finns på egen plats. Tip of the Week.

Här finns en till bra:
pageblocks Secure Coding (länk direkt till plats i artikel som talar om input validation)

Jag har läst igenom de länkade sidorna ovan och de är helt klart intressanta. Jag känner mig dock fortfarande osäker på hur en faktiskt validering skrivs i Lassokod som inte bara handlar om att ett fälts värde ska vara heltal mellan x och y eller en korrekt formaterad e-postadress. Det tycks inte finnas så mycket om detta i Lasso 8.5 Language Guide eller på deras site. Säg till exempel att jag i ett tänkt fält för efternamn inte vill ha några udda tecken eller kommandosträngar. Jag vill alltså förbjuda []()*/%&;:'@£$# osv. Hur skulle detta kunna se ut? Har du något annat exempel som enligt din erfarenhet ofta är användbart?

Jag är mycket tacksam för dina tips om var jag kan hitta mer information och länkar till dessa platser! Jag ska ta och läsa på när jag kommer hem i kväll.

Just i fråga om datum kanske det kan vara en bättre lösning att skapa tre olika fält på formuläret, år, månad och datum. Sedan kan jag skapa ett beräkningsfält i Filemaker som lägger ihop och skapar ett datum från dessa tre. Vad säger du?

Jag testade att fylla i datum i formatet MM/DD/ÅÅÅÅ och vips så accepterade Filemaker det som ett datum! Inte för att det löser något för mig i nuläget, jag måste först se till att lära mig hur jag kan modifiera datumet genom Lasso, men det är fint att veta att det går.

Lasso skall förstå datum i den formen, läs mera här, notera att man kan direkt ta en sträng i valfritt format, och ange det som ett datum (data-typen datum).

Date - Lasso reference

Att plocka ut bitar av en sträng kan man göra med dessa:

String Extract - Lasso reference

Substring - Lasso reference

Du kan alltså plocka ut och sätta ihop vad du vill med Lassos sträng-hanterings-kommandon. Kolla kapitlet i manualen som har med strängar och text att göra. Det finns många flera fiffiga kommandon.

Tips för rationell utveckling.
Skapa en ny lasso-sida som bara hanterar det här problemet, du skan skippa formulär och skippa skapa post i databas. Bara ange en variabel i koden med ett datum i det önskade formatet, konvertera det till ett riktigt datum.

Experimentera tills den delen fungerar.

Lägg sedan till ett formulär och att stoppa in formulärets datum i variabeln.

Experimentera tills det fungerar.

Sedan kan du lägga till skapa post i databasen, experimentera tills det fungerar.

Nu har du hela kedjan - formulär - variabel - kontroll/massage - till post i databas. Kopiera in den fungerande koden i din "riktiga" sida.

Detta är en vanlig metod att jobba för utvecklare, dela upp ett problem i små delar, lös en del i taget, lägg till, tills kedjan funkar.

Senast redigerat 2009-06-26 17:26
1
Bevaka tråden