2009-09-17 3 views
2

У меня есть файл Excel, который мне нужно отправить данные из моей базы данных Drupal MySql. Чтобы сделать это, я использую POST HTTP из в VBA моего листа Excel следующим образом:Drupal 6 анализирует входящие данные POST

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
     URL = "http://localhost:8082/acquia-drupal/node/2" 
     objHTTP.Open "POST", URL, False 
     objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
     objHTTP.send ("string=testdata") 

Я хочу использовать страницу Drupal, которая будет анализировать вне данные POST и записать его в таблицу в База данных Drupal MySql.

Вот что я начал с того,

<?php 
if (isset($_POST['string'])) 
{ 
    $trans = $_POST['string']; 
    db_query("INSERT INTO {excel} (ExcelData) VALUES (%d')", 
    $trans); 
} 

Является ли это правильное направление, чтобы войти? Кроме того, может ли кто-нибудь предоставить некоторые рекомендации по фрагментам кода для правильной обработки данных POST?

+0

Что вы подразумеваете под «страницей Drupal»? Вы хотите, чтобы вы отправляли данные на узел, который будет дублировать содержимое в вашей схеме базы данных? – Grayside

ответ

5

Обработка входящих данных $ _POST, как вы обрисовываете, это немного похоже на ручную доставку собственного веб-сервиса. Это не плохо, обязательно, и иногда это лучший способ заставить друг друга говорить друг с другом.

Я бы сказал, что вы несете ответственность за собственную безопасность, очистку данных и защиту от SQL-инъекций, если вы используете такой код в опубликованном фрагменте.

Также, как отмечено в комментарии Эли, кажется, что вы можете помещать это в узел. Это относительно опасный способ сделать это, так как каждый может легко открыть этот узел и запустить firehosing $ _POST данные в вашу базу данных. Создание модуля, используя hook_menu(), чтобы определить URL-адрес для вашего кода импорта, а также установить некоторые ограничения на доступ к определенному URL-адресу, сделают вещи более безопасными.

+0

Я немного устал, но что вы подразумеваете под «SQL injection protection»? Я подумал, что db_query достаточно хорошо экранирует, если вы используете параметры (как это сделал Майк) –

+1

Да - очень важно быть скрупулезным в том, что при выполнении сырых вставок из входящих $ \ _ POST данных, и это одна из вещей которые часто обходятся при взломе быстрых утилит. Я не имел в виду, что конкретный запрос, который был опубликован выше, был небезопасным, я просто использовал для поощрения паранойи ... – Eaton

+0

Спасибо за комментарии. Хотя, я напал на эту проблему по-другому, эта информация была очень полезной. В то время я был новичком в Drupal и разработке пользовательских модулей для Drupal. –

1

На данный момент похоже, что вы просто пишете этот код на странице с фильтром PHP.

Если это действительно так, это не очень хорошая идея. По крайней мере, напишите настраиваемый модуль, возможно, с некоторым кодом POST-parsing в hook_view (или просто простую пользовательскую функцию) и с помощью hook_menu, чтобы установить адрес страницы.

Что касается анализа POST, это массив PHP key => value ... Я не нашел способ использования Drupal-ish, и некоторые популярные модули, безусловно, используют его как есть.