Drupal, разрабатываю пользовательский модуль, это правильно я делаю - PullRequest
1 голос
/ 27 февраля 2011

Ниже приведены пользовательские модули 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 Ответ

5 голосов
/ 27 февраля 2011

Я не буду отвечать на «правильный способ разработки пользовательского модуля» часть вопроса, но вот примечание о том, как вы выполняете свой SQL-запрос:

Вы используете это:

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

При этом ваш код подвергается SQL-инъекциям : независимо от того, что пользователи отправят в $_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-инъекций.

...