2011-02-27 24 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

相關問題