2010-01-30 3 views
2

У меня сложная задача.Переменная JavaScript для переменной ColdFusion

С помощью <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> 

ответ

2

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

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

5

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

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

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

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

+0

Привет Дэн, спасибо Здесь вы можете увидеть весь код, если он может помочь вам http://www.inter-media.gr/ftp/add.txt – 2010-02-05 16:56:55

+0

Не забывайте использовать cfqueryparam тег на всех переменных внутри cfquery. –

1

Ваше неправильное представление начинается с этой мыслью:

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

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

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

Если он должен быть 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

Привет, Спасибо за ваш ответ. Кодирование MSSQL находится в iso-8859-7, а MySQL - в UTF, поэтому я считаю его совместимым. Причина, по которой я хочу запустить ее в CF, заключается в том, что пользователь отправляет значение, которое используется для запроса, а затем я беру значения запроса в MySQL db, а пользователь видит рулон процедуры на экране по одной записи. Вы правы насчет моего неправильного предположения. Я уверен, что есть другие способы изменить кодировку ... подумал, что я еще не знаю. Я видел, что если значения вначале вводятся в текст в форме, а затем я могу принять значение из формы, кодировка правильная – 2010-02-05 15:36:16

+0

Так как я не могу использовать формы для этой работы (несколько записей) Я думал взять значение текста на экране и получить его в переменной CF. Еще раз спасибо – 2010-02-05 15:37:25

1

Ну, ваш вопрос действительно так: Как взять строку из одной кодировки символов в другую в 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.

-2

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

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

Функция 'toScript' делает * не * конвертирует JavaScript в CFML. Он выводит переменную CF как полностью экранированную/квалифицированную строку, которая будет использоваться в JavaScript. Он также, по-видимому, включает точку с запятой в качестве части ее вывода, как указано в комментариях к док-те. http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-6e9d.html –

0

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

первую очередь, присвоить значение JS на вход с помощью JavaScript. после этого извлекать значение из этого ввода, отправив форму.

Смежные вопросы