2011-02-27 19 views
1

下面是Drupal的自定义模块,的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); 
} 


?> 

回答

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-注射。

+0

感谢,我看起来很好的教程为Drupal模块customaisation,你可以参考一些免费教程网站/ pdf – Bharanikumar

+1

不是真的,对不起:我主要学会通过Drupal的网站*(有大量的文档,那里)* ,并阅读其他模块的代码。 –

+1

此外,您应该从$ form_state获取邮件地址,而不是$ _POST。 – Berdir

相关问题