Drupal,开发自定义模块,这是正确的做法

时间:2011-02-27 14:17:05

标签: drupal drupal-6 drupal-modules

以下是drupal自定义模块,

请你确认一下,

是开发自定义模块的正确方法,

否则请告知,

<?php
/**
*  Implementation of hook_form_alter().
*/
function register_form_alter(&$form, $form_state, $form_id) {
  switch($form_id) {
      case 'user_register': // the value we stole from the rendered form
        // your customizations go here
         // drupal_set_message('Hey, we\'ve tapped into this form!');
         $form['account']['bharani'] = array(
            '#title' => 'bharani',
            '#type' => 'textfield',
            '#description' => t(' bharanikumar custom field '),
          );
         $form['#submit'][] = 'register_submit_handler'; // Add this

      break;
  }
}

function register_submit_handler($form, &$form_state) {
  $value = $form_state['values']['bharani'];
  $mail = $_POST['mail'];
  $query  = "UPDATE users SET language='$value' WHERE mail='$mail'";
  db_query($query);
}


?>

1 个答案:

答案 0 :(得分:5)

我不会回答“开发自定义模块的正确方法”问题的一部分,但这里有一个关于你正在进行SQL查询的方式的说明:

你正在使用这个:

$value = $form_state['values']['bharani'];
$mail = $_POST['mail'];
$query  = "UPDATE users SET language='$value' WHERE mail='$mail'";
db_query($query);

有了这个,您的代码将受SQL-injections的约束:无论用户将哪些内容发送到$_POST['mail'],它都会在查询中结束,不会转义!


使用Drupal和db_query(),您应该使用以下内容:

$value = $form_state['values']['bharani'];
$mail = $form_state['values']['mail'];;
$query  = "UPDATE users SET language='%s' WHERE mail='%s'";
db_query($query, $value, $mail);

这样,Drupal将负责逃避,保护您免受SQL注入。