You are here

把数据存储到数据库表中(4)

Drupal创建了用来存储数据的annotations表以后,我们需要修改一下我们的代码。其一,我们将需要添加一些逻辑代码,这样在用户输入注释并且点击更新按钮以后,它可以用来负责对输入数据的处理工作。我们的表单提交函数如下所示:

 
/**
 * Handle submission of the annotation form and saving
 * of the data to the database.
 */
function annotate_entry_form_submit($form, $form_state) {
    global $user;
 
    $note = $form_state['values']['note'];
    $nid = $form_state['values']['nid'];
 
    db_query('DELETE FROM {annotations} WHERE nid = %d AND uid = %d',
        $nid, $user->uid);
    db_query("INSERT INTO {annotations} (nid, uid, note, created) VALUES
        (%d, %d, '%s', %d)", $nid, $user->uid, $note, time());
    drupal_set_message(t('Your annotation has been saved.'));
}
 
 由于我们在一个节点上只允许一个用户有一个注释,所以我们可以安全的删除以前的注释(如果有的话),然后把我们自己的插入到数据库中。对于我们与数据库的交互,需要注意以下几点。首先,我们不需要考虑数据库连接,这是因为Drupal在它的引导指令中已经为我们完成了这一工作。第二,在我们使用一个数据库表时,我们需要把它放到花括号里{}.这样就可以无缝的实现数据库表的前缀化(关于表前缀化的更多详细,可参看文件sites/default/settings.php中的注释)。第三,我们在查询语句中使用了占位符,并为其提供了相应的变量,这样Drupal内置的查询安全清理机制就可以帮助我们阻止SQL注入攻击。占位符%d用于数字,而占位符%s用于字符串。最后,我们使用drupal_set_message()来将一条消息隐藏在用户的会话中,在用户查看的下一个页面时,它就会被Drupal作为一个通知显示给用户。这样,用户就获得一些反馈信息。
 
老葛的Drupal培训班 Think in Drupal
 

Drupal版本:

评论