Переменная JavaScript в переменную ColdFusion - PullRequest
2 голосов
/ 30 января 2010

У меня есть хитрый.

С помощью <cfoutput query="…"> я перечисляю некоторые записи на странице из базы данных SQL Server.

К концу каждой строки просмотра я пытаюсь добавить это в запись в базе данных MySQL. Как видите, все просто, потому что я могу использовать точные переменные из выходного запроса в моем новом операторе INSERT INTO.

НО: rsPick.name исходит из базы данных с другим набором символов, и единственный способ поместить его прямо в мою новую базу данных - это прочитать его с веб-страницы, а не из значения, полученного в выходном запросе.

Поэтому я прочитал это значение с помощью небольшого JavaScript-кода, который я создал, и поместил его в переменную myValue, а затем я хочу, чтобы ColdFusion прочитал эту переменную, чтобы поместить ее в мой оператор SQL.

 <cfoutput query="rsPick">
  <tr>
    <td>#rsPick.ABBREVIATION#</td>
    <td id="square"> #rsPick.name# </td>

    <td>#rsPick.Composition#</td>
    <td> Transaction done...
      <script type="text/javascript">
        var myvalue = document.getElementById("square").innerHTML
      </script>
    </td>

  <cfquery datasource="#Request.Order#">
     INSERT INTO products (iniid, abbreviation, clsid, cllid, dfsid, dflid, szsid, szlid, gross, retail, netvaluebc, composition, name)
     VALUES ( #rsPick.ID#, '#rsPick.ABBREVIATION#', #rsPick.CLSID#, #rsPick.CLLID#, #rsPick.DFSID#, #rsPick.DFLID#, #rsPick.SZSID#, #rsPick.SZLID#, #rsPick.GROSSPRICE#, #rsPick.RETAILPRICE#, #rsPick.NETVALUEBC#, '#rsPick.COMPOSITION#','#MYVALUE#' )
  </cfquery>
 </tr>
</cfoutput>

Ответы [ 6 ]

5 голосов
/ 30 января 2010

ColdFusion обрабатывается на сервере перед обслуживанием страницы. JavaScript обрабатывается в браузере после обслуживания страницы. Следовательно, единственный способ для JavaScript передать значение ColdFusion - это либо:

a) Установите переменную в поле формы и затем отправьте страницу обратно на сервер.

b) Отправьте переменную обратно в Coldfusion через Ajax.

Я думаю, что есть более безопасный и надежный способ сделать то, что вам нужно, без JavaScript. Можете ли вы дать нам больше информации о данных, может быть, даже пример?

2 голосов
/ 30 января 2010

Если вы создаете страницу, вы бы знали, что находится в элементе DOM "квадрат", потому что вы поместили его там. Если вы делаете это, основываясь на динамическом вводе данных пользователем, вам потребуется использовать CFAJAXPROXY или просто отправить форму на другую страницу для вставки.

Также страшно брать неантифицированный ввод из DOM и вставлять в базу данных. Используйте cfqueryparam для защиты от инъекционных атак.

1 голос
/ 02 февраля 2010

Что ж, ваш вопрос действительно так: как мне перевести строку из одной кодировки символов в другую в ColdFusion?

Можете ли вы использовать тип NVARCHAR в SQL Server (не уверен, что то же самое в MySQL) - и просто хранить символьные данные как UTF8?

Кроме того, Java прекрасно справляется с различными кодировками и даже предоставляет помощь в классе String и в классе CharsetDecoder для работы с различными кодировками:

String s = new String("Hello, World!");
byte[] bytes = s.getBytes("UTF-8");
String utf = new String(bytes, "UTF-8");

ColdFusion имеет очень ограниченную поддержку для работы с несколькими наборами символов в одном запросе. Вам почти наверняка придется полагаться на базовые классы Java для решения этой проблемы внутри ColdFusion.

1 голос
/ 01 февраля 2010

Ваше заблуждение начинается с этой мысли:

«Единственный способ сделать это правильно - это прочитать значение с веб-страницы через JavaScript».

Извините, если сейчас это звучит грубо, но это полная чушь. Забудь эту идею. Невозможно прочитать переменную JavaScript из ColdFusion так, как вы ее пытаетесь, и даже не нужно.

Для начала, я не уверен, почему именно через ColdFusion вы должны перемещать значения из одной базы данных в другую. Серверы баз данных могут напрямую общаться друг с другом, например, с помощью функции «Связанный сервер» в MS SQL Server (, см. Это руководство ).

Если это должен быть ColdFusion, попробуйте это:

<cfoutput query="rsPick">
  <cfquery datasource="#Request.Order#">   
     INSERT INTO products (
       iniid, 
       /* … etc … */
       name
     )
     VALUES (
       <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#rsPick.ID#">,
       /* … etc … */
       <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#rsPick.name#">
     )
  </cfquery>
</cfoutput>

Пока типы данных таблиц и соединения с обеими базами данных установлены правильно, ColdFusion будет прозрачно обрабатывать кодировку символов. Обратите внимание, что целевые поля БД не должны быть «менее способными», чем исходные поля, например, источником не должен быть Unicode, если целью является US ASCII.

0 голосов
/ 05 августа 2010

Итак, если вы хотите конвертировать значение JS в CFM, я чувствую, что нужно сделать несколько шагов:

прежде всего, назначьте ваше значение JS для ввода через javascript.после этого получите значение из этого ввода, отправив форму.

0 голосов
/ 04 августа 2010

Используйте JSString для преобразования переменной Javascript в переменную CFML.

<cfoutput>
    var #toScript(myCFMLVaraible, "jsVar")#;
</cfoutput>
...