Проблема с ColdFusion, связывающимся с базой данных MySQL - PullRequest
0 голосов
/ 25 марта 2010

Я работал над переносом некоммерческого веб-сайта с локального сервера (под управлением Windows XP) на учетную запись хостинга GoDaddy (под управлением Linux). Большинство страниц написано в ColdFusion. Дела пошли гладко, до этого момента. На сайте есть флэш-форма (см. Эту страницу: http://www.preservenet.cornell.edu/employ/submitjob.cfm), которая, когда она будет завершена, переводит посетителя на эту страницу: submitjobaction.cfm. Я не совсем уверен, что делать с этой ошибкой, поскольку я скопировал именно то, что было в старой базе данных MySQL, и файлы .cfm точно такие же, какими они были, когда работали на старом сервере. Я что-то упустил?

Ниже приведен код из базы данных, на которую, похоже, ссылается ошибка. Когда я изменяю «Positionlat» на какое-то значение по умолчанию в базе данных, как это предлагается в сообщении об ошибке, он говорит, что другому полю нужно значение по умолчанию, и это бесконечная цепочка ошибок, когда я пытаюсь исправить это.

Вероятно, это глупая ошибка, которую я упускаю, но я работал над ней несколько дней и не могу найти то, что мне не хватает. Буду очень признателен за любую помощь.

Спасибо!

1011 * Грег *


УДАЛИТЬ СТОЛ, ЕСЛИ СУЩЕСТВУЕТ employopp;

CREATE TABLE employopp (

POSTID int (10) NOT NULL auto_increment,

USERID varchar (10) collate latin1_general_ci default NULL,

STATUS varchar (10) collate latin1_general_ci NOT NULL по умолчанию 'ACTIVE',

TYPE varchar (50) collate latin1_general_ci по умолчанию 'professional',

JOBTITLE varchar (70) collate latin1_general_ci default NULL,

NUMBER varchar (30) collate latin1_general_ci default NULL,

SALARY varchar (40) collate latin1_general_ci default NULL,

ORGNAME varchar (70) collate latin1_general_ci default NULL,

DEPTNAME varchar (70) collate latin1_general_ci default NULL,

ORGDETAILS набор символов среднего текста utf8 collate utf8_unicode_ci,

ORGWEBSITE varchar (200) collate latin1_general_ci default NULL,

ADDRESS varchar (60) collate latin1_general_ci по умолчанию 'нет данных',

ADDRESS2 varchar (60) collate latin1_general_ci default NULL,

CITY varchar (30) collate latin1_general_ci default NULL,

STATE varchar (30) collate latin1_general_ci default NULL,

COUNTRY varchar (3) collate latin1_general_ci default "USA",

POSTALCODE varchar (10) collate latin1_general_ci default NULL,

EMAIL varchar (75) collate latin1_general_ci default NULL,

NOMAIL varchar (5) collate latin1_general_ci default NULL,

PHONE varchar (20) collate latin1_general_ci default NULL,

FAX varchar (20) collate latin1_general_ci default NULL,

WEBSITE varchar (200) collate latin1_general_ci default NULL,

POSTDATE varchar (10) collate latin1_general_ci default NULL,

POSTUNTIL varchar (20) collate latin1_general_ci по умолчанию 'выберите дату',

POSTUNTILFILLED varchar (20) collate latin1_general_ci NOT NULL по умолчанию «до заполнения»,

texteHTML набор символов среднего текста utf8 collate utf8_unicode_ci,

HOWTOAPPLY набор символов среднего текста utf8 collate utf8_unicode_ci,

CONFIRSTNM varchar (30) collate latin1_general_ci default NULL,

CONLASTNM varchar (60) collate latin1_general_ci default NULL,

POSITIONCITY varchar (30) collate latin1_general_ci default NULL,

POSITIONSTATE varchar (30) collate latin1_general_ci default NULL,

POSITIONCOUNTRY varchar (3) collate latin1_general_ci default "USA",

POSITIONLAT varchar (50) collate latin1_general_ci NOT NULL,

POSITIONLNG varchar (50) collate latin1_general_ci NOT NULL,

ПЕРВИЧНЫЙ КЛЮЧ (POSTID)

) ENGINE = MyISAM AUTO_INCREMENT = CHARSET DEFAULT 2007 = latin1 COLLATE = latin1_general_ci;


UPDATE:


Где я думаю, что страница submitjobaction.cfm связывается с базой данных:

   <CFINSERT DATASOURCE="mysqlcf_preservenet" TABLENAME="employopp" FORMFIELDS=" TYPE, JOBTITLE, NUMBER, SALARY, ORGNAME, DEPTNAME, ORGDETAILS, ORGWEBSITE, ADDRESS, ADDRESS2, CITY, STATE, COUNTRY, POSTALCODE, EMAIL, NOMAIL, PHONE, FAX, WEBSITE, POSTDATE, POSTUNTIL, texteHTML, HOWTOAPPLY, CONFIRSTNM, CONLASTNM, POSITIONCITY, POSITIONSTATE, POSITIONCOUNTRY">
          <CFINSERT DATASOURCE="mysqlcf_preservenet" TABLENAME="user" FORMFIELDS=" ORGNAME, WEBSITE, ADDRESS, ADDRESS2, CITY, STATE, COUNTRY, POSTALCODE, EMAIL, PHONE, FAX, CONFIRSTNM, CONLASTNM" >

Ответы [ 2 ]

1 голос
/ 25 марта 2010

Я не использую ни одного из mysql, cfform или cfinsert, поэтому ymmv с этим ответом, но, похоже, проблема в конфигурации базы данных.

В этом блоге от 2007 года предлагается изменить настройку ini для sql-mode. Вам нужно будет поговорить со своим хостом, чтобы проверить текущее значение и попытаться изменить его.

Похоже, что форма отправляет значения нулевой длины для неотвеченных полей, а база данных отклоняет эти значения.

Другой подход заключается в замене cfinsert обычным cfquery - это даст вам больше гибкости при использовании «пустых» значений.

0 голосов
/ 25 марта 2010

Я получаю следующее сообщение об ошибке:


Ошибка выполнения запроса к базе данных.

Поле 'CONFIRSTNM' не имеет значения по умолчанию

Ресурсы:

...

Похоже, что здесь происходит то, что какое-то поле формы (названное CONFIRSTNM - я предполагаю, что это имя контакта) пусто в POST, и в базе данных не установлено значение по умолчанию. Поскольку ваш код cf использует CFINSERT, вы на самом деле не пишете код SQL самостоятельно, но CF должен сделать это за вас. Трудно отлаживать на расстоянии, но я думаю, что вы должны сделать так, чтобы база данных была переведена 1: 1 из старой среды в новую. Не уверен, как была выполнена миграция, но она могла потерять некоторую информацию в процессе.

Еще одно предложение для хорошей практики кодирования - переписать CFINSERT с тегом CFQUERY и самостоятельно написать оператор SQL. Также убедитесь, что вы используете CFQUERYPARAM для всех входящих параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...