I want to implement an adaptive test (exam) using PHP. (So, like any
quiz, or any multi-page form, but using internal logic to decide
what question to serve next and deciding when the exam is done.) I
am a researcher (not a programmer) but I am familiar with Perl and
other programming languages and with some web application models.
It looks like the vast majority of the PHP examples use the page
(perhaps with parts dynamically injected using PHP) to represent the
"mode" (state) of the application. I definitely want to separate my
logic/code from presentation, but AFAICT the popular frameworks all
use a MVC pattern where the "mode" is encoded in the URL (which is
really the same since the URL specifies the page).
I don't think an exam fits well with either of these models. Even in
research, a test-taker completing an exam should proceed linearly
through a series of screens (consent, instructions, a series of
items, optionally some post-questionnaire questions, optionally some
exam results, some kind of "thank you"). And the examinee should not
have any ability to modify the sequence of screens or the
backend/underlying data by manipulating the URL.
Also, one of my design goals is to allow the researcher (who would
install and configure this software) to control whether the optional
pages appear and to modify templates to include their own content on
these pages.
My inclination is to create a large index.php file that examines the
user input and the current state and executes a subroutine that
serves the appropriate next page (by selecting the appropriate
template and filling it with appropriate information). I know this
is atypical and I'd appreciate thoughts about things I may be
overlooking as a newcomer to PHP and the PHP way of creating web
apps. If I'm reinventing any wheels, I'd appreciate pointers to
those frameworks.
I'm also having trouble finding a simple example of using a template
outside of a framework. But maybe that's my newness...
-Alan
--
Alan D. Mead, Ph.D.
President, Talent Algorithms
Inc.
science + technology = better workers
http://www.alanmead.org"You're
an interesting species. An interesting mix.
You're capable of such
beautiful dreams, and such
horrible nightmares. You feel so lost, so
cut off,
so alone, only you're not. See, in all our
searching,
the only thing we've found that makes
the emptiness bearable, is
each other."
-- Carl Sagan, Contact
I don't know how much you
know so I apologize if I am telling youi anything you already know.
You need to understand the fundamentals of how the HTTP protocol and
HTML work. Initially in the world wide web browsers would send a request
for a page to the server and the server would read the HTML file and
send it to the client (the browser). If that is new to you then there
are thousands of places you can learn more. The important thing is that
the server forgets about the request. There is nothing left in the
server. The server is done with the request.
Also in the early days of the internet HTML had forms but they were very
basic compared to how they are currently used. Initially a form would
have a submit button that would send the form contents to the server.
Normally the server would execute a Common Gateway Interface (CGI)
program. The CGI program would write out a HTML file that was sent to
the client. Alternatively the server would show a second HTML file but
that is not relevant here. The important thing is that PHP uses the same
CGI technology. PHP reads a HTML file (except with PHP in it) and
writes out a HTML file that is sent to the client. And here it gets
complicated. Over the years various techniques have been developed so
that server-side programming could retain and/or send data across
requests. One way is for data in a page to be sent as part of a request
that has the relevant data.
Well there is much more to the story. If any of that is new to you then
you have some reading to do.
There are two general possible solutions to your requirements, but there
are many more possibilities too. One possibility would be to send all
the data to the client and do all the work in the client using
_javascript_ or some client-side programming. That could provide the best
performance but requires you to use _javascript_ and would compromise
security. Another possibility is something called a post-back and that
is quite technical. It is however using technology much like an
old-style HTML form except generalized and made more technical.
Thanks. JS isn't an option because the adaptive algorithm needs to
score the items and I don't consider it secure to send the answer
keys of an exam to a client-side script.
So, if you were me, what PHP framework or app model would you use?
-Alan
On 7/1/2019 10:58 PM, Sam Hobbs wrote:
--
Alan D. Mead, Ph.D.
President, Talent Algorithms
Inc.
science + technology = better workers
http://www.alanmead.org"You're
an interesting species. An interesting mix.
You're capable of such
beautiful dreams, and such
horrible nightmares. You feel so lost, so
cut off,
so alone, only you're not. See, in all our
searching,
the only thing we've found that makes
the emptiness bearable, is
each other."
-- Carl Sagan, Contact