2012-05-01 54 views
-1

我正在构建一个简单的表单,让用户请求耗材,但是在提交时它一直给我一个通用的错误。我看不出我的错误是...mysql查询没有插入到数据库中

 CREATE TABLE `teacherrequests` (
    `name` varchar(64) NOT NULL, 
    `binder` varchar(3) NOT NULL, 
    `binderpage` varchar(2) NOT NULL, 
    `binderdiv` varchar(2) NOT NULL, 
    `calcr` varchar(2) NOT NULL, 
    `chalkcolor` varchar(2) NOT NULL, 
    `chalkwhite` varchar(2) NOT NULL, 
    `chalkeraser` varchar(2) NOT NULL, 
    `colpencil` varchar(2) NOT NULL, 
    `dryerasecleaner` varchar(2) NOT NULL, 
    `dryeraser` varchar(2) NOT NULL, 
    `dryerasemarkers` varchar(2) NOT NULL, 
    `filefolders` varchar(2) NOT NULL, 
    `gluesticks` varchar(2) NOT NULL, 
    `hangingfile` varchar(2) NOT NULL, 
    `highlightermulti` varchar(2) NOT NULL, 
    `highlighterone` varchar(2) NOT NULL, 
    `holepunch3` varchar(2) NOT NULL, 
    `holepunch1` varchar(2) NOT NULL, 
    `index35` varchar(2) NOT NULL, 
    `index57` varchar(2) NOT NULL, 
    `markers` varchar(2) NOT NULL, 
    `papergraph` varchar(2) NOT NULL, 
    `paperlegal` varchar(2) NOT NULL, 
    `papersteno` varchar(2) NOT NULL, 
    `paperwhitelined` varchar(2) NOT NULL, 
    `paperclipsbindlg` varchar(2) NOT NULL, 
    `paperclipsbindmd` varchar(2) NOT NULL, 
    `paperclipsbindsm` varchar(2) NOT NULL, 
    `paperclipslg` varchar(2) NOT NULL, 
    `paperclipsmd` varchar(2) NOT NULL, 
    `paperclipssm` varchar(2) NOT NULL, 
    `pencil` varchar(2) NOT NULL, 
    `pencilsharp` varchar(2) NOT NULL, 
    `pensblack` varchar(2) NOT NULL, 
    `pensblue` varchar(2) NOT NULL, 
    `pensgreen` varchar(2) NOT NULL, 
    `pensred` varchar(2) NOT NULL, 
    `permanentmarker` varchar(2) NOT NULL, 
    `postit` varchar(2) NOT NULL, 
    `postitsmall` varchar(2) NOT NULL, 
    `stapler` varchar(2) NOT NULL, 
    `staples` varchar(2) NOT NULL, 
    `tapedbl` varchar(2) NOT NULL, 
    `tapemasking` varchar(2) NOT NULL, 
    `tapescotch` varchar(2) NOT NULL, 
    `tapedispenser` varchar(2) NOT NULL, 
    `tacks` varchar(2) NOT NULL, 
    `clock` varchar(2) NOT NULL, 
    `whiteout` varchar(2) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

下面的代码...

我检查这些对我的形式,他们都投其所好。

$name = $_POST['name']; 
$binder = $_POST['binder']; 
$binderpage = $_POST['binderpage']; 
$binderdiv = $_POST['binderdiv']; 
$calc = $_POST['calc']; 
$chalkcolor = $_POST['chalkcolor']; 
$chalkwhite = $_POST['chalkwhite']; 
$chalkeraser = $_POST['chalkeraser']; 
$colpencil = $_POST['colpencil']; 
$dryerasecleaner = $_POST['dryerasecleaner']; 
$dryeraser = $_POST['dryeraser']; 
$dryerasemarkers = $_POST['dryerasemarkers']; 
$filefolders = $_POST['filefolders']; 
$gluesticks = $_POST['gluesticks']; 
$hangingfile = $_POST['hangingfile']; 
$highlightermulti = $_POST['highlightermulti']; 
$highlighterone = $_POST['highlighterone']; 
$holepunch3 = $_POST['holepunch3']; 
$holepunch1 = $_POST['holepunch1']; 
$index35 = $_POST['index35']; 
$index57 = $_POST['index57']; 
$markers = $_POST['markers']; 
$papergraph = $_POST['papergraph']; 
$paperlegal = $_POST['paperlegal']; 
$papersteno = $_POST['papersteno']; 
$paperwhitelined = $_POST['paperwhitelined']; 
$paperclipsbindlg = $_POST['paperclipsbindlg']; 
$paperclipsbindmd = $_POST['paperclipsbindmd']; 
$paperclipsbindsm = $_POST['paperclipsbindsm']; 
$pencil = $_POST['pencil']; 
$pencilsharp = $_POST['pencilsharp']; 
$pensblack = $_POST['pensblack']; 
$pensblue = $_POST['pensblue']; 
$pensgreen = $_POST['pensgreen']; 
$pensred = $_POST['pensred']; 
$permanentmarker = $_POST['permanentmarker']; 
$postit = $_POST['postit']; 
$postitsmall = $_POST['postitsmall']; 
$stapleremover = $_POST['stapleremover']; 
$stapler = $_POST['stapler']; 
$staples = $_POST['staples']; 
$tapedbl = $_POST['tapedbl']; 
$tapemasking = $_POST['tapemasking']; 
$tapescotch = $_POST['tapescotch']; 
$tapedispenser = $_POST['tapedispenser']; 
$tacks = $_POST['tacks']; 
$clock = $_POST['clock']; 
$whiteout = $_POST['whiteout']; 

我假设我的错误在这里,但我似乎无法找到它。

// Insert data into mysql 

$sql="INSERT INTO teacherrequests(name, binder, binderpage, binderdiv, calcr, 
chalkcolor, chalkwhite, chalkeraser, colpencil, dryerasecleaner, dryeraser,  
dryerasemarkers, filefolders, gluesticks, hangingfile, highlightermulti, highlighterone,  
holepunch3, holepunch1, index35, index57, markers, papergraph, paperlegal, papersteno,  
paperwhitelined, paperclipsbindlg, paperclipsbindmd, paperclipsbindsm, pencil,  
pencilsharp, pensblack, pensblue, pensgreen, pensred, permanentmarker, postit,  
postitsmall, stapleremover, stapler, staples, tapedbl, tapemasking, tapescotch,  
tapedispenser, tacks, clock, whiteout) 

VALUES('$name', '$binder', '$binderpage',  
'$binderdiv', '$calc', '$chalkcolor', '$chalkwhite', '$chalkeraser', '$colpencil',  
'$dryerasecleaner', '$dryeraser', '$dryerasemarkers', '$filefolders', '$gluesticks',  
'$hangingfile', '$highlightermulti', '$highlighterone', '$holepunch3', '$holepunch1',  
'$index35', '$index57', '$markers', '$papergraph', '$paperlegal', '$papersteno',  
'$paperwhitelined', '$paperclipsbindlg', '$paperclipsbindmd', '$paperclipsbindsm',  
'$pencil', '$pencilsharp', '$pensblack', '$pensblue', '$pensgreen', '$pensred',  
'$permanentmarker', '$postit', '$postitsmall', '$stapleremover', '$stapler', '$staples',  
'$tapedbl', '$tapemasking', '$tapescotch', '$tapedispenser', '$tacks', '$clock',  
'$whiteout')"; 

$result=mysql_query($sql); 

这里是的var_dump:

ERRORstring(811) "INSERT INTO teacherrequests(name, binder, binderpage, binderdiv, calcr, chalkcolor, chalkwhite, chalkeraser, colpencil, dryerasecleaner, dryeraser, dryerasemarkers, filefolders, gluesticks, hangingfile, highlightermulti, highlighterone, holepunch3, holepunch1, index35, index57, markers, papergraph, paperlegal, papersteno, paperwhitelined, paperclipsbindlg, paperclipsbindmd, paperclipsbindsm, pencil, pencilsharp, pensblack, pensblue, pensgreen, pensred, permanentmarker, postit, postitsmall, stapleremover, stapler, staples, tapedbl, tapemasking, tapescotch, tapedispenser, tacks, clock, whiteout)VALUES('Joe Spano', '3', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '4', '', '', '', '', '', '2', '', '', '', '', '', '', '', '', '', '5', '', '', '', '', '', '', '', '')" 
+0

你遇到的一般错误是什么? – dweiss

+0

什么是错误信息? – SeventotheSeven

+0

你可以在$ result上做'var_dump'吗?如果它为空,那么'mysql_query'可能会遇到错误。 – philwinkle

回答

7

相比

$calc = $_POST['calc']; 

在你的PHP代码在

`calcr` varchar(2) NOT NULL, 

您创建表的代码看看。我猜这只是一个简单的错字,最后加上额外的“r”。

我也发现了这几行代码并没有在其他文件中随附行:

`paperclipslg` varchar(2) NOT NULL, 
    `paperclipsmd` varchar(2) NOT NULL, 
    `paperclipssm` varchar(2) NOT NULL, 

    $stapleremover = $_POST['stapleremover']; 

希望帮助!

[编辑]虽然我没有看到你的插入和你的值之间的任何差异。所以现在我再看看这些,我认为我没有帮助解决这个问题。我只发现了一些可能会丢失的数据。

+2

他有'INSERT INTO teacherrequests(...,calcr,...)VALUES(...,$ calc,...)'所以我不认为就是这样。 –

+0

第二部分解决了这个问题。数据库中缺少$ stapleremover,而其他变量未被传递。 谢谢 – Joe

+0

是的,我刚刚注意到calc vs calcr不会产生任何问题。这只是我头上的一个“错误”,因为我喜欢将所有数据命名为相同。 –

14

你应该做的第一件事就是采取这种数据库设计并把它扔进垃圾桶。然后用这种设计取代它:

CREATE TABLE teachingmaterials (
    id SMALLINT NOT NULL AUTO_INCREMENT, 
    name VARCHAR(64) NOT NULL, 
    PRIMARY KEY (id) 
) ENGINE=INNODB CHARACTER SET utf8; 

INSERT INTO 
    teachingmaterials 
    (name) 
VALUES 
    ('binder'), 
    ('binder-page'), 
    ('binder-div'), 
    -- put the rest of them in here -- 
    ('whiteout'); 

CREATE TABLE teacherrequests (
    id INT NOT NULL AUTO_INCREMENT, 
    name VARCHAR(64) NOT NULL, 
    PRIMARY KEY (id) 
) ENGINE=INNODB CHARACTER SET utf8; 

CREATE TABLE teacherrequests_teachingmaterials (
    teacherrequests_id INT NOT NULL, 
    teachingmaterials_id SMALLINT NOT NULL, 
    amount SMALLINT, 
    note VARCHAR(64), 
    PRIMARY KEY (teacherrequests_id, teachingmaterials_id) 
    FOREIGN KEY (teacherrequests_id) REFERENCES teacherrequests (id) ON DELETE CASCADE, 
    FOREIGN KEY (teachingmaterials_id) REFERENCES teachingmaterials (id) 
) ENGINE=INNODB CHARACTER SET utf8; 

您还需要停止使用旧mysql_*功能,切换到使用PDO来代替。

+0

谢谢。我会试试这个。我明显是新手,对db设计没有多少经验。 – Joe