
I dessa självstudier lär du känna nyckelfunktionerna i FileMaker API for PHP. Självstudierna består av 6 lektioner som har utformats för att visa dig hur du kan använda programmeringsgränssnittet (API) för att integrera en FileMaker Pro-databas med ett PHP-webbprogram. I varje lektion introduceras en viss funktion i programmeringsgränssnittet, med en förklaring av hur koden är skriven och hur den fungerar.
Självstudiedatabasen består av ett FileMaker-frågeformulärssystem (questionnaire.fp7). Varje post i ett frågeformulär kan ha flera relaterade frågor. Varje fråga kan ha flera relaterade svar. Endast ett frågeformulär kan väljas att vara aktivt frågeformulär. När användarna använder PHP-webbprogrammet erbjuds de att använda det aktiva frågeformuläret. När en användare fyller i ett frågeformulär online läggs en post för respondent till för användaren, och dennes svar läggs till som relaterade poster.
I självstudierna får du gradvis bygga upp ett PHP-webbprogram. Varje lektion bygger på den föregående enligt följande:
Den här självstudien täcker inte in alla funktionerna i programmeringsgränssnittet. När du är klar med de här lektionerna, kommer du dock att ha en god grund att stå på. Om du vill veta mer om API:et kan du gå till FileMaker API for PHP-dokumentationen.
Du tar fram FileMaker API for PHP-dokumentationen genom att gå till startsidan för FileMaker Server Admin Console och klicka på "PHP Site Assistant and XSLT Site Assistant Tools." På sidan för webbpubliceringsverktyg klickar du på "FileMaker API for PHP-dokumentation". Använd dokumentationen som referens medan du går igenom självstudien. Den hjälper dig att upptäcka hur du kan utnyttja alla egenskaper hos FileMaker API for PHP.
Du bör också bekanta dig med questionnaire.fp7-databasen. Upptäck hur den fungerar och hur man bygger upp frågeformulär genom att skapa frågor med flera svarsalternativ. Dina kunskaper om utformningen av questionnaire.fp7 är en viktig del av din förståelse av hur PHP-självstudieprogrammet använder programmeringsgränssnittet.
Du måste ha installerat FileMaker Server 9, som måste vara värd för databasen questionnaire.fp7. Den webbserver som ingår i FileMaker Server-distributionen måste vara värd för självstudiemappen.
Mer information om installation och distribution av FileMaker Server 9 finns i FileMaker Server startbok. Mer information om FileMaker API for PHP finns i FileMaker Server, anpassad webbpublicering med PHP.
Du bör ha viss kännedom om HTML-programmering. Detta gäller HTML-uttryck, huvuden och elementmarkörer. Om du vill ha mer information om hur man programmerar webbsidor med HTML, kan du gå till XHTML Tutorial på W3Schools.
Du bör ha viss kännedom om PHP-programmering. Detta gäller standardutdata, variabler, samlingar, villkorliga loopar, objekt, metoder och funktioner. Om du vill ha mer information om hur man programmerar med PHP, kan du gå till PHP Tutorial på W3Schools.
Du bör kunna använda ett textredigeringsprogram med HTML och PHP. I den här självstudien förväntas du använda ett textredigeringsprogram för att visa och redigera HTML- och PHP-kod.
Du bör ha aktiva kunskaper om FileMaker Pro-databasdesign. Detta omfattar fält, relationer, layouter, portaler och containerfält. Mer information om hur du utformar databaser med FileMaker Pro finns i dokumentationen till FileMaker Pro.
När du redigerar poster i FileMaker Pro bör du komma ihåg att lämna eller aktivera posten för att ändringarna ska träda i kraft. Webbsidor visar inte ändringar som har gjorts i databasen förrän posterna har stängts.
För att du ska kunna visa PHP-sidorna för respektive lektion i din webbläsare måste du ange fullständig sökväg för att PHP-koden ska exekveras. Om filerna t.ex. ligger på din lokala dator riktar du webbläsaren mot en URL som börjar med "http://localhost/...". Använd inte den lokala filsökvägen som kanske börjar med "file:///Volumes/...". Om du använder en sökväg som börjar med "file://" resulterar detta i att PHP-koden visas, inte att den exekveras. Kontrollera alltid att URL:en börjar med "http", eller "https" om du har ställt in SSL på din webbserver.
Lektion 1 ger grunderna för hur du använder FileMaker API for PHP i två PHP-filer: home.php och dbaccess.php. Filen home.php fungerar som startpunkt för webbläsaren, och filen dbaccess.php tillhandahåller ett FileMaker-objekt som representerar databasen. Dessa sidor ger de grundläggande stegen för hur du instantierar FileMaker-databasobjekt, anger nyckelegenskaper och genomför en sökning i questionnaire.fp7-databasen.
Du visar självstudiexemplet genom att rikta webbläsaren mot home.php i Lesson1-mappen. Den här sidan visar välkomstskärmen för FileMaker-frågeformulärsystemet. När sidan laddas skapas en anslutning mellan PHP och Web Publishing Engine, vilket resulterar i en funnen post i questionnaire.p7-databasen.
Öppna filen home.php i Lektion 1-mappen i ett textredigeringsverktyg. Sök efter följande kod precis efter huvudmarkören.
<?php include ("dbaccess.php"); ?>
Detta PHP-uttryck inkluderar, eller laddar, filen dbaccess.php. Filen dbaccess.php innehåller funktioner som konfigurerar FileMaker-databasobjektet och förbereder det för databasoperationer. Följaktligen fungerar inte API-metoderna i home.php utan den. Även om metoderna i dbaccess.php kunde ha skrivits i filen home.php har de separerats för att underlätta felsökning och underhåll.
Filen dbaccess.php innehåller kod för att konfigurera FileMaker-databasobjektet. Den spelar en avgörande roll i skapandet av frågeformulärprogrammet. Följ följande steg när du konfigurerar FileMaker-objektet:
Öppna filen dbaccess.php i Lesson1-mappen i ett textredigeringsverktyg, och följ beskrivningen av respektive steg nedan.
FileMaker API:et måste först ha lästs in i PHP-minnet för att kunna användas. Detta gör du med ett require-uttryck.
require_once ('FileMaker.php');
När du väl har laddat den kan du skapa instanser av FileMaker-databasklassen, och använda dem för databasanslutningar i ditt webbprogram. Ett försök att använda API:et utan att först ladda den resulterar i ett fel.
Du måste skapa en instans av FileMaker-databasklassen innan den kan användas. Den måste även tilldelas till en variabel som refererar till den i koden.
$fm = new FileMaker();
Koden ovan genereras som en instans av FileMaker-databasobjektet. Den refereras till som variabeln $fm.
FileMaker-databasobjektet har en uppsättning egenskaper som du kan konfigurera när som helst. Vissa egenskaper måste dock konfigureras innan några databasoperationer kan göras. Här är koden som konfigurerar de egenskaper som behövs för denna självstudie.
$fm->setProperty('database', 'questionnaire');
$fm->setProperty('username', 'web');
$fm->setProperty('password', 'web');
Obs! - Databasnamnet questionnaire behöver inte tillägget fp7 i parametern.
Obs! - I FileMaker API for PHP-dokumentationen finns en lista med FileMaker-databasklassegenskaper och beskrivningar av dem.
Filen dbaccess.php innehåller väldigt lite kod, men den förbereder effektivt FileMaker-objektetet för användning. Efter det att filen har laddats kan FileMaker-objektet användas som variabeln $fm och nyckelegenskaperna ges sina nödvändiga värden. Filen dbaccess.php gör det möjligt för filen home.php att kommunicera med databasen questionnaire.fp7.
Filen home.php utför två databasoperationer: Visa alla (Visa alla poster) och Sök. Du visar koden för dessa operationer genom att öppna filen home.php i ditt textredigeringsverktyg. Du visar databasen för dessa operationer genom att öppna filen questionnaire.fp7 på FileMaker Server.
Databasen questionnaire.fp7 innehåller en layout som kallas Active Questionnaire. Denna layout fungerar som ett gränssnitt. Den innehåller bara en post i tabellen. I denna layout väljer användarna vilket frågeformulär som ska vara aktivt. Webbprogrammet måste hämta ID:t för detta aktiva frågeformulär.
Det aktiva frågeformulärets ID hämtas genom att en sökning (Visa alla poster) genomförs i layouten Active Questionnaire. Den här åtgärden använder kommandoobjektet FileMaker_Command_FindAll.
Obs! - I FileMaker API for PHP-dokumentationen finns en lista med kommandoobjekt och deras metoder.
En instans av objektet FileMaker_Command_FindAll skapas genom att $fm (FileMaker-databasinstansen) exekverar newFindAllCommand()-metoden, och (inom parentes) specificerar layoutens namn Active Questionnaire. Layouten fastställer vilken tabellförekomst (kontext) som används och vilka fält som ska returneras (resultat).
Instansen FileMaker_Command_FindAll måste tilldelas till en variabel så som följande exempel visar.
$findCommand = $fm->newFindAllCommand('Active Questionnaire');
Koden ovan tilldelar ett nytt FileMaker_Command_FindAll-objekt till variabeln $findCommand. Kommandot Visa alla genomförs med metoden execute(). Sökresultatet måste vara en variabel.
$result = $findCommand->execute();
Det är möjligt att ett fel uppstår när kommandot körs Om det uppstår ett fel (eller inga matchande poster hittas), tilldelas variabeln $result ett FileMaker_Error-objekt. Kontrollera FileMaker_Error-objektet med följande kod. Du visar felmeddelandet med metoden getMessage().
if (FileMaker::isError($result)) {
echo "<p>Error: " . $result->getMessage() . "</p>";
exit;
}
Om inget fel har inträffat innehåller variabeln $result en samling av FileMaker_Record-objekt, ett för varje post som har påträffats i uppsättningen. Använd variabeln $result för att hämta den första posten i Visa alla-resultetet. Eftersom PHP-samlingarna indexeras numeriskt som standard, kan du hämta en första posten genom att använda följande kod.
$record = $records[0];
Den här koden tilldelar ett FileMaker_Record-objekt som innehåller den första posten i uppsättningen till variabeln $record. Du kan hämta innehållet i questionnaire_id från den här posten genom att använda metoden getField(). Resultatet till metoden getField() måste tilldelas till en variabel.
$active_questionnaire_id = $record->getField('questionnaire_id');
Den här variabeln innehåller nu ID:t för det aktiva frågeformuläret. I nästa steg används den här variabeln som parameter i nästa sökning.
Obs! - I FileMaker API for PHP-dokumentationen finns en lista med objekt och deras metoder.
Nu när du har ID för det aktiva frågeformuläret kan du använda det för att söka efter frågeformulärsposten. Koden för denna operation finns mot slutet av filen home.php. Den här åtgärden använder kommandoobjektet FileMaker_Command_Find.
En instans av objektet FileMaker_Command_Find skapas genom att $fm (FileMaker-databasinstansen) exekverar newFindCommand()-metoden, och (inom parentes) specificerar layoutens namn Active Questionnaire. Layouten fastställer vilken tabellförekomst i sökningen som används och vilka fält som ska returneras i resultatet.
Instansen FileMaker_Command_Find måste tilldelas till en variabel så som följande exempel visar.
$findCommand =& $fm->newFindCommand('questionnaire');
Du lägger till villkor genom att använda metoden addFindCriterion(). Metoden addFindCriterion() använder två parametrar: fieldName och searchParameter. Sänd fältnamnet "Questionnaire ID" (enligt definitionen i FileMaker Pro) och variabeln $active_questionnaire_id som parametrar.
$findCommand->addFindCriterion('Questionnaire ID', $active_questionnaire_id);
Obs! - Metoden addFindCriterion() kan anropas flera gånger och simulera det logiska AND som inträffar när man anger flera sökvillkor i samma begäran i FileMaker Pro.
När sökvillkoren har lagts till används metoden execute() för att genomföra sökningen. Resultatet till metoden execute() måste tilldelas till en variabel.
$result = $findCommand->execute();
Variabeln $result innehåller nu en samling FileMaker_Record-objekt. Eftersom sökningen gjordes i layouten questionnaire, innehåller varje post i $result värdena för varje fält i layouten questionnaire.
Den slutliga koden på den här sidan använder PHP echo-uttryckt och metoden getField() för att ta fram fälten Questionnaire Name och Description på sidan home.php.
Lektion 2 tar upp den kod som krävs för att visa FileMaker Pro containterbilder på webben. Om du lagrar webbkompatibla bilder i en FileMaker Pro-databas kan du använda FileMaker API for PHP för att hämta dessa bilder och visa dem på din webbplats.
Öppna självsstudiedatabasen questionnaire.fp7 för FileMaker API och se till att det aktiva formuläret har en webbkompatibel bild i containerfältet. Visa sedan PHP-självstudieexemplet genom att öppna Lesson2 home.php-filen i din webbläsare. Sidan visar bilden för det aktiva frågeformuläret. Försök att ändra containerbild i FileMaker-databasen. Lämna posten när du är klar. Uppdatera webbläsaren och se hur webbplatsen uppdateras med den nya bilden.
Du ser hur API:et används för denna åtgärd genom att öppna filen home.php i Lesson2-mappen. Titta på det sista PHP-uttrycket i filen, och var särskilt uppmärksam på <img>-markören (bild) och dess src-attribut (källa).
Var uppmärksam på följande.
echo '<img src="ContainerBridge.php?path=' . urlencode($record->getField('Graphic')) . '">';
Eftersom en HTML <img>-markör (bild) måste ha en filsökväg som sitt src-attribut (källa), använder den här lektionen en separat fil för att hämta bilden. Filen som hämtar containterbilden heter ContainerBridge.php, och dess filnamn visas inutisrc-attibutet för bildmarkören <img> (image).
Filen ContainerBridge.php vet inte vilken bild som du vill visa. För att specificera bilden måste du lägga till fältvärdet Graphic i slutet av käll-URL:en src. I HTML kallas detta GET-metoden.
Använd ett name/value-par och börja med ett frågetecken och sammanlänka den önskade strängen. name sätts till "sökväg" och value sätts till metodresultatet getField() och sänder containerfältets namn (Graphic) inom parentes.
Obs! - Resultatet getField() sänds till PHP-funktionen urlencode() för att kontrollera att specialtecknen kodas korrekt för URL:en.
Öppna filen ContainerBridge.php i Lesson2-mappen i ditt textredigeringsverktyg. Detta enkla manus använder FileMaker_Record-metoden getContainerData() för att hämta den faktiska bilden.
För att getContainerData() ska fungera måste du sända fältresultatet från getField() (för ett containerfält) till metoden getContainerData() inom parentes. I home.php sänds resultatet från getField() för fältet Graphic via URL:en. I ContainerBridge.php hämtas resultatet från URL:en via path-element för samlingen $_GET och sänds till metoden getContainerData().
echo $fm->getContainerData($_GET['path']);
Filen ContainerBridge.php hämtar helt enkelt sökvägen för den specificerade bilden från FileMaker Pro-databasen, så att filen home.php kan använda den i markören <img> för att visa bilden i webbläsaren.
Obs! - I FileMaker API for PHP-dokumentationen finns en lista med FileMaker_Record-objektmetoder.
Lektion 3 tar upp den kod som krävs för att skapa dynamiska webbformulär i FileMaker-layoutobjekt. Den tar även upp den kod som krävs för att lägga till nya FileMaker-poster från ett webbformulär. I den här lektionen används två ytterligare PHP-filer: Respondent.php och handle_form.php. Filen Respondent.php används för att dynamiskt skapa ett webbformulär, medan filen handle_form.php används för att verifiera formulärposter och lägga in dem i databasen questionnaire.fp7 som nya poster.
Öppna frågeformulärswebbplatsen genom rikta webbläsaren till home.php-filen i Lesson3-mappen. I den här versionen av sidan visas knappen Continue som du använder för att starta frågeformulärsprogrammet. När du klickar på Continue omdirigeras du till filen Respondent.php. Fyll i informationen i webbformuläret och klicka på Submit. Gör om det om du inte angav tillräckligt med information. När ditt formulär verifieras visas ett Thank You och den information som du har angett läggs till i databasen questionnaire.fp7 som en ny post.
Du kan se hur det här programmet fungerar genom att öppna filen Respondent.php i ditt textredigeringsverktyg. Observera att filen dbaccess.php visas högt upp. Som redan nämnts i lektion 1, garanterar include-uttrycket att du har en instans av FileMaker-databasklassen, och att den instansen kan användas som variabeln $fm.
Observera alternativknappsformulärelementet Respondent.php som kallas "prefix". Det här elementet hämtar sina värden från FileMaker Pro-databasen questionnaire.fp7 FileMaker Pro genom att använda dess värdelista med samma namn. Den här tekniken gör det möjligt att skapa ett dynamiskt formulärelement som baseras på en värdelista som har definierats i FileMaker-databasen. På det här viset behöver du inte uppdatera din PHP-kod varje gång som värdelistan ändras i databasen. Denna teknik implementeras i följande steg:
$layout =& $fm->getLayout('Respondent');
$values = $layout->getValueList('prefixes');
foreach($values as $value){
echo '<input type= "radio" name= "prefix" value= "'. $value .'">' . $value . ' ';
}
Obs! - I FileMaker API for PHP-dokumentationen finns en lista med FileMaker_Layout-objektmetoder.
Obs! - Formuläret i Respondent.php innehåller även flera dolda formulärelement. Ett, med namnet "active_questionnaire_id", innehåller frågeformulärs-ID:t från home.php. Det här formuläret sänder ID:t till handle_form.php där det används i lektion 4.
När formuläret Respondent.php har skickat data, sänds värdena till åtgärdssidan handle_form.php via POST-metoden. Öppna filen handle_form.php i Lesson3-mappen med ditt textredigeringsverktyg.
Observera att data som skickats av användaren läggs i en samling som tilldelas variabeln $respondent_data. I denna samling motsvaras Key för varje element av namnet på det FileMaker-fält som informationen ska skickas till. Value för varje element motsvaras av de värden som har skickats från HTML-formulärelementet i $_POST-samlingen. Denna $respondent_data-samling används av FileMaker-objektet när databasposten skapas.
Efter det att datasamlingen har skapats genomför PHP-koden vissa enkla kontroller. Dessa verifieringsmetoder använder PHP-kod explicit. FileMaker Server genomför ingen verifiering under denna åtgärd.
När användarinformationen har verifierats kan en ny post skapas i två enkla steg:
$newRequest =& $fm->newAddCommand('Respondent', $respondent_data);
$result = $newRequest->execute();
Tänk på att när du skapar ett nytt FileMaker_Command_Add-objekt måste du specificera layoutens namn. Layoutnamnet fastställer vilken tabellförekomst (kontext) som används och vilka fält som ska returneras (resultat). De fält som du använder för att ange data måste finnas i layouten.
I lektion 4 kommer sidan handle_form.php att utökas så att den nya posten används och den första frågan visas.
Lektion 4 tar upp den kod som krävs för att hämta en FileMaker-post via dess ID och hämta relaterade poster från en portal. Portaler är kraftfulla kontroller som används i FileMaker Pro-lösningar. FileMaker API for PHP har speciella metoder för att arbeta med portaldata. I den här lektionen kommer vissa av dessa funktioner att tas upp.
Öppna FileMaker Pro-databasen questionnaire.fp7 som ligger på FileMaker Server. Klicka på knappen Edit Questionnaire och kontrollera att det aktiva formuläret har minst en post i portalen Question. Öppna Lektion 4 home.php-filen i din webbläsare. Klicka på Continue och ange svarandeinformationen.
Efter det får du den första frågan i det aktiva formuläret. Öppna FileMaker Pro-databasen questionnaire.fp7 igen. Leta reda på den första frågan i det aktiva frågeformuläret. Försök att ändra den första frågetypen. Klicka på knappen Edit Answers och lägg till tänkbara svar. Uppdatera din webbläsare så att den uppdaterade frågan visas.
I den här lektionen får du stifta bekantskap med två nya uppgifter: hämta en post via dess ID och hämta en uppsättning relaterade poster från en portal.
Öppna filen handle_form.php i Lesson4-mappen med ditt textredigeringsverktyg. Bläddra ned en tredjedel i filen handle_form.php till den punkt där lektion 3 avslutades. Observera att i den här lektionen läggs kod till som frågar efter postobjektet för en ny svarandepost. Denna begäran är nödvändig eftersom fältet Respondent ID har definierats med alternativet automatisk inmatning av löpnummer i FileMaker Pro och du måste hämta ett nummer för automatisk inmatning.
Liksom med sök-funktionerna i lektion 1, kan du hämta en ny post genom att använda metoderna getRecord() och getField().
$records = $result->getRecords();
$record = $records[0];
$respondent_recid = $record->getField('Respondent ID');
Nästa uppgift blir att hämta det aktiva formulärets namn. Detta gör du genom att använda metoden getRecordById() för FileMaker-instansen ($fm).
När du använder getRecordById() sände det interna FileMaker-post-ID:t och namnet för layouten. Layouten fastställer vilken tabellförekomst (kontext) som används och vilka fältvärden som ska returneras (resultat). Koden på den här sidan skickar active_questionnaire_id för $_POST-samlingen till filen för svarandeformuläret Respondent.php.
$active_questionnaire_id = $_POST['active_questionnaire_id'];
$active_questionnaire = $fm->getRecordById('questionnaire',$active_questionnaire_id);
$questionnaire_name = $active_questionnaire->getField('Questionnaire Name');
Obs! - Varje postobjekt som returneras från en API-åtgärd innehåller ett internt FileMaker-post-ID som kan hämtas med metoden getRecordId().
Nästa uppgift blir att hämta frågeformulärsposterna och visa den första frågan. Sök efter alla frågor som matchar det aktiva formulärets ID. Denna sökning genomförs mot Questions layout.
$findCommand =& $fm->newFindCommand('Questions');
$findCommand->addFindCriterion('Questionnaire ID', $active_questionnaire_id);
$result = $findCommand->execute();
$records = $result->getRecords();
$question = $records[0];
Frågeformulärsdatabasen har utformats så att varje fråga har en specifik typ (t.ex. text, radio eller textbox). Om typen gäller flervalsalternativ kan varje fråga har flera svarsalternativ. Layouten Questions innehåller en portal som visar de möjliga svaren. Om en fråga har ett eller flera svar visar följande kod svarsalternativen med den specificerade "typen".
Anta att frågan är av typen radio. Bläddra nedåt i dokumentet handle_form.php tills du ser villkoret else if som söker efter frågor av typen radio eller ranking.
else if ($question_type =="radio" || $question_type =="ranking")
Om villkoret är true hämtar följande kod relaterade svarsalternativ och visar dem som alternativknappsformulärelement. Du kan hämta svarsposter från portalen med FileMaker_Record-objektmetoden getRelatedSet().
När metoden getRelatedSet() anropas måste namnet på den relaterade tabellen sändas inom parentes och den portal som har definierats med denna relation måste finnas i den layout som används när posten $question hämtas.
$relatedSet = $question->getRelatedSet('question_answers');
Variabeln $relatedSet innehåller nu en samling postobjekt från den relaterade portalen. Loopa dig igenom samlingen och skicka fältvärdena för varje påträffad post.
foreach ($relatedSet as $relatedRow)
{
$possible_answer = $relatedRow->getField('question_answers::answer');
echo '<input type= "radio" name= "radio_answer" value= "'. $possible_answer .'">' . $possible_answer . '<br/>';
}
Du skulle kunna ha hämtat de relaterade posterna genom att genomföra en sökning, men det är mycket lättare att använda getRelatedSet() med en portal som redan innehåller den relaterade uppsättningen.
Lektion 5 behandlar den kod som krävs för att lägga till relaterade poster. Om du har definierat en portal på en layout som tillåter att relaterade poster skapas, kan du använda FileMaker API for PHP för att lägga till relaterade poster från webben.
Öppna din webbläsare på sidan home.php som finns i Lesson5-katalogen. Klicka på Continue och fyll i onlineöversikten. Öppna FileMaker-databasen questionnaire.fp7 som ligger på FileMaker Server. Välj Review Responses och navigera till den sista posten i tabellen. Den här posten innehåller den svarandeinformation som du har angett. Varje svar sparas som en post i portalen Responses.
Du kan lägga till rader med FileMaker API for PHP i fyra steg:
Öppna filen handle_form.php i Lesson5-mappen med ditt textredigeringsverktyg. Bläddra nedåt och sök efter koden som hämtar svarandeposten:
$respondent_rec = getRespondentRecordFromRespondentID($respondent_recid);
Koden använder en funktion som har lagts till filen dbaccess.php. Om du öppnar dbaccess.php i ditt textredigeringsverktyg kan du se funktionens definition nästan längst ned. Inuti funktionsdefinitionen kan du se att metoden newFindCommand() använder layouten Respondent för kontexten.
$find = $fm->newFindCommand('Respondent');
Den här funktionen tilldelar postobjektet till variabeln $respondent_rec. Det refereras till variabeln i layouten Respondent eftersom den layouten utgör kontexten för sökkommandot. Därför startar alla metoder som använder variabeln $respondent_rec från kontexten för layouten Respondent.
I filen handle_form.php börjar nästa kodrad skapa den nya relaterade posten.
$new_response = $respondent_rec->newRelatedRecord('Responses');
När den här raden exekveras tilldelas variabeln $new_response ett tomt postobjekt (någon ny post har ännu inte skapats i FileMaker-databasen).
Det är viktigt att du förstår kontexten för denna åtgärd. Den här koden startar fån layouten för det anropande postobjektet (Responses) och den specificerade relationen för en portal i den layouten. Därefter sänder koden det relaterade tabellnamnet till metoden newRelatedRecord().
Efter det att du har lagt till en ny tom post och vet vilken portalkontext som posten tillhör kan du börja ange data med metoden setField(). Den här metoden använder två parametrar: field name och field value. Eftersom detta är en relaterad post måste fältnamnet uttryckas med relationsnamnet och fältnamnet, separerade med två kolon.
$new_response->setField('Responses::Question ID', $cur_question);
$new_response->setField('Responses::Response', $translatedAnswer);
När du har skapat den nya relaterade posten och har lagt till data till rätt fält kan du aktivera posten.
Obs! - Du behöver inte ange fältdata innan du aktiverar den nya tomma posten.
Inga nya postobjekt skapas i FileMaker-databasen förrän de har aktiverats. Metoden commit() infogar objektet FileMaker_Record i FileMaker-databasen questionnaire.fp7.
$result = $new_response->commit();
Variabeln $result tilldelas nu FileMaker_Record-objektet för den nya posten, och den nya posten har skapats i FileMaker-databasen. Om något fel uppstår innehåller variabeln $result ett FileMaker_Error-objekt. Det är lämpligt att kontrollera om det finns några fel när man använder metoden commit().
Lektion 6 behandlar den kod som behövs för att visa relaterade fältdata från en portal Här introduceras även grunderna för överlappande formatmallar (Cascading Style Sheets, CSS) och hur du använder dem för att ändra utseendet på ditt webbprogram.
Öppna din webbläsare på sidan home.php som finns i Lesson6-katalogen. Lägg märke till webbplatsens utseende. Denna formatering kommer från en CSS-sida. CSS-formatmallar kan användas för att formatera HTML-kod som används i ditt webbprogram. De diskuteras i slutet av lektionen.
Klicka på Continue och fyll i onlineöversikten. Observera att sidan thankyou.php visar en sammanfattning av de frågor som du har besvarat. Dessa frågor och svar är från layouten Respondent i databasen questionnaire.fp7. Om en FileMaker-layout innehåller portaldata, kan den visas på webben med FileMaker API for PHP.
Öppna sidan thankyou.php i Lesson6-katalogen med ditt textredigeringsverktyg. Bläddra till slutet av filen och sök efter den sista HTML-tabellen.
Lägg märke till koden ovanför tabellen som hämtar svarandeposterna.
$respondent_record = getRespondentRecordFromRespondentID($respondent_recid);
Funktionen getRespondentRecordFromRespondentID() definieras på sidan dbaccess.php. Dess kontext är layouten Respondent i databasen questionnaire.fp7.
I HTML-tabellen ser du att variabeln $respondent_record används för att hämta en uppsättning relaterade poster. Detta görs med metoden getRelatedSet(). För att kunna använda metoden getRelatedSet() måste du specificera det relaterade tabellnamnet för den önskade portalen och den önskade portalen måste finnas i layouten Respondent.
$response_related_set = $respondent_record->getRelatedSet('Responses');
Koden ovan tilldelar en samling som innehåller posterna från portalen Responses till variabeln$response_related_set. Varje svar är ett FileMaker_Record-objekt. Koden använder metoden getField() för FileMaker_Record-objektet för att skicka portalraderna i en HTML-tabell. Tänk på att använda den relaterade tabellens fullständiga namn och fältnamnet separerat med två kolon när du skickar relaterade fält.
Här är loopen som beskriver den relaterade uppsättningen i HTML.
foreach ($response_related_set as $response_related_row)
{
$question = $response_related_row->getField('Questions 2::question');
$answer = $response_related_row->getField('Responses::Response');
//konverterar alla radmatningar i svaret till kommatecken
$answer = str_replace("\n",", ",$answer);
echo '<tr><td>' . $question . '</td>';
echo '<td>' . $answer . '</td></tr>';
}
Du kan formatera dina webbprogram med hjälp av CSS-formatmallar (cascading style sheets). Öppna filen style.css i Lesson6-mappen i ett textredigeringsverktyg, och granska formatmallarna som har definierats för vissa av HTML-taggarn. CSS-formatmallarna kan tillämpas på alla THML-taggar, vilket gör det möjligt att formatera flera objekt på flera sidor med hjälp av bara en definition.
Om du vill tillämpa formatering på en viss HTML-tagg måste du deklarera taggens namn. Efter taggens namn måste du ange formatattribut inom klammerparenteser. Som i PHP måste varje uttryck avslutas med ett semikolon.
body {
background-color: #333333;
padding: 20px;
color: #ffffff;
font-family:Verdana, Arial, Helvetica, sans-serif;
}
När du har skapat en CSS-fil kan du tillämpa den på vilket HTML- eller PHP-dokument du vill. Om du vill tillämpa externa formatmallar måste du inkludera eller länka formatmallen till dokumentet: använd taggen <link> (länk) i HTML-huvudet.
Öppna filen thankyou.php i Lektion 6-mappen med ditt textredigeringsverktyg. Kontrollera vilken <link>-tagg (länk) i huvudtaggen som talar om för webbläsaren att style.css-formatering ska tillämpas. När du använder <link>-taggen bör du vara noga med att ge rätt sökväg eller href till din CSS-sida.
<link rel="stylesheet" type="text/css" href="style.css" />
Formatmallar kan användas i flera program och varje program kan använda flera formatmallar. Mer information om CSS-formatmallar och deras attribut hittar du på CSS2 reference på W3Schools.