2011-02-27 4 views
1

아래 드루팔 맞춤형 모듈입니다드루팔은 사용자 정의 모듈을 개발, 그것은

이 유를 확인하시기 바랍니다 수

는 사용자 정의 모듈을 개발하는 올바른 방법입니다,하고 올바른 방법 오전입니다

다른 조언을 바랍니다,

<?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'], 그것은 이스케이프 처리되지 않은 쿼리에서 막을 것입니다!

드루팔와


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); 

이 방법은 드루팔은 SQL-주사에서 당신을 보호합니다 이스케이프 처리됩니다.

+0

덕분에 drupal module customaisation에 대한 훌륭한 튜토리얼을 볼 수 있는데, 무료 튜토리얼 사이트/pdf – Bharanikumar

+1

을 참조 할 수 있습니다. 미안 해요. Drupal의 웹 사이트 *를 통해 많은 것을 배웠습니다. , 그리고 다른 모듈의 코드를 읽는 것. –

+1

또한, $ _POST가 아닌 $ form_state에서 메일 주소를 받아야합니다. – Berdir

관련 문제