如何向用户询问一些数据(一些字段可以在之后修改),将其存储在数据库中,然后将收集到的一些数据显示给站点用户,以便所有 db 内容都不会暴露在页面源代码中?
这是一个完整的示例,在页面重新加载后,所有数据都在页面源中可见:
import stdlib.crypto
type user= {md5sum: string; name: string; email: string; is_achy: bool }
db /users : stringmap(user);
db /users[_]/is_achy = {false}
setup_page()=
(
<div id=#users>
<div class="container">
<table id=#lista >
<tr>
<th>Name</th>
<th>Headache?</th>
</tr>
{list_db()}
</table>
</div>
</div>
<div class="container">
<p>
Not on the list? Add it here.
</p>
<p>
<input id=#username value="default"/>
<input id=#email_address value="default@def.ault/>
<input type="button" value="Add" onclick={_ -> add_user()} />
</p>
</div>
)
list_db()=
(
List.map(
users -> <tr> <th>{users.name}</th> <th><input type="checkbox" id=#{users.md5sum} onclick={_ -> is_achy(users.md5sum)}/></th></tr>, StringMap.To.val_list(/users)
)
)
add_user() =
(
name = Dom.get_value(#username)
md5sum = Crypto.Hash.md5(name)
email = Dom.get_value(#email_address)
if name != "" then
do /users[md5sum] <- {~md5sum ~name ~email is_achy=false}
Dom.transform([{Dom.select_body()} <- setup_page()])
)
is_achy(md5sum) =
(
/users[md5sum]/is_achy <- Dom.is_checked(Dom.select_id(md5sum))
)
server = one_page_server("Achy head?", setup_page)