我一直在努力将非营利性网站从本地服务器(运行Windows XP)迁移到GoDaddy托管帐户(运行Linux)。大多数页面都是用ColdFusion编写的。事情进展顺利,直至这一点。网站中有一个Flash表单(请参阅此页面:http://www.preservenet.cornell.edu/employ/submitjob.cfm),完成后会将访问者带到此页面:submitjobaction.cfm。我不太确定该错误是什么,因为我完全复制了旧MySQL数据库中的内容,而.cfm文件与他们在旧服务器上工作时完全一样。我错过了什么吗?
以下是错误似乎指的数据库中的代码。当我在错误中建议将“Positionlat”更改为数据库中的某个默认值时,它表示另一个字段需要一个默认值,并且当我尝试纠正它时,它是一个无休止的错误链。
这可能是一个我错过的愚蠢错误,但我已经在这里工作了好几天,却找不到我所缺少的东西。我真的很感激任何帮助。
谢谢!
-Greg
DROP TABLE IF EXISTS employopp
;
CREATE TABLE employopp
(
POSTID
int(10)NOT NULL auto_increment,
USERID
varchar(10)collate latin1_general_ci默认为NULL,
STATUS
varchar(10)collate latin1_general_ci NOT NULL默认'ACTIVE',
TYPE
varchar(50)整理latin1_general_ci默认'专业',
JOBTITLE
varchar(70)collate latin1_general_ci默认为NULL,
NUMBER
varchar(30)collate latin1_general_ci默认为NULL,
SALARY
varchar(40)collate latin1_general_ci默认为NULL,
ORGNAME
varchar(70)collate latin1_general_ci默认为NULL,
DEPTNAME
varchar(70)collate latin1_general_ci默认为NULL,
ORGDETAILS
mediumtext字符集utf8 collate utf8_unicode_ci,
ORGWEBSITE
varchar(200)collate latin1_general_ci默认为NULL,
ADDRESS
varchar(60)collate latin1_general_ci默认'none given',
ADDRESS2
varchar(60)collate latin1_general_ci默认为NULL,
CITY
varchar(30)collate latin1_general_ci默认为NULL,
STATE
varchar(30)collate latin1_general_ci默认为NULL,
COUNTRY
varchar(3)整理latin1_general_ci默认'美国',
POSTALCODE
varchar(10)collate latin1_general_ci默认为NULL,
EMAIL
varchar(75)collate latin1_general_ci默认为NULL,
NOMAIL
varchar(5)collate latin1_general_ci默认为NULL,
PHONE
varchar(20)collate latin1_general_ci默认为NULL,
FAX
varchar(20)collate latin1_general_ci默认为NULL,
WEBSITE
varchar(200)collate latin1_general_ci默认为NULL,
POSTDATE
varchar(10)collate latin1_general_ci默认为NULL,
POSTUNTIL
varchar(20)整理latin1_general_ci默认'选择日期',
POSTUNTILFILLED
varchar(20)collate latin1_general_ci NOT NULL默认'直到填充',
texteHTML
mediumtext字符集utf8 collate utf8_unicode_ci,
HOWTOAPPLY
mediumtext字符集utf8 collate utf8_unicode_ci,
CONFIRSTNM
varchar(30)collate latin1_general_ci默认为NULL,
CONLASTNM
varchar(60)collate latin1_general_ci默认为NULL,
POSITIONCITY
varchar(30)collate latin1_general_ci默认为NULL,
POSITIONSTATE
varchar(30)collate latin1_general_ci默认为NULL,
POSITIONCOUNTRY
varchar(3)整理latin1_general_ci默认'美国',
POSITIONLAT
varchar(50)collate latin1_general_ci NOT NULL,
POSITIONLNG
varchar(50)collate latin1_general_ci NOT NULL,
PRIMARY KEY(POSTID
)
)ENGINE = MyISAM AUTO_INCREMENT = 2007 DEFAULT CHARSET = latin1 COLLATE = latin1_general_ci;
更新:
我认为“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" >
答案 0 :(得分:1)
我没有使用mysql,cfform或cfinsert这样的ymmv这个答案,但似乎问题出在数据库配置中。
2007年的This blog post建议更改sql-mode的ini设置。您需要与主持人联系以检查当前值并尝试将其更改。
看起来表单正在为未答复字段发送零长度值,数据库拒绝这些值。
另一种方法是用正常的cfquery替换cfinsert - 这将为你提供更多的“空”值提供灵活性。
答案 1 :(得分:0)
我收到以下错误消息:
执行数据库查询时出错。
字段'CONFIRSTNM'没有默认值
资源:
这里似乎发生的是,某些表单字段(名为CONFIRSTNM - 我认为是Contact Firstname)在POST中为空,并且数据库没有设置默认值。因为您的cf代码使用的是CFINSERT,所以您实际上并没有自己编写SQL代码,但CF应该为您执行此操作。很难从远处调试,但我认为你应该做的是确保数据库从旧环境1:1迁移到新环境。不确定迁移是如何完成的,但它可能在此过程中丢失了一些信息。
良好编码实践的另一个建议是使用CFQUERY标记重写CFINSERT并自己编写SQL语句。另外,请确保对所有传入参数使用CFQUERYPARAM。