首页 >后端开发 >php教程 >PHP获得HTML表单数据无法写入MySQL数据库

PHP获得HTML表单数据无法写入MySQL数据库

WBOY
WBOY原创
2016-06-23 14:28:35887浏览

mysql 数据库 表单

PHP入门,在尝试编写一个图书数据库,数据库写入有一些问题
总界面模块
<!DOCTYPE html><html>	<head>		<title>		图书录入数据处理 - 藏书		</title>		<meta charset="utf-8">		<link rel="stylesheet" href="add.css">	</head>	<body>		<div id="header">			<h2 id="guidinghead">			核准预览数据			</h2>		</div>		<div id="container">		<?php			/*载入预定义页面*/			include 'definevar.php';			/*全局变量*/			include 'isbn10to13.php';			/*ISBN-10与ISBN-13转换*/			include 'code2loc.php';			include 'code2lang.php';			include 'code2clssys.php';			include 'code2punit.php';			/*代码??信息转换函数组*/			echo 'ISBN-13 国际标准书号:' . $isbn . '<br />';			echo 'CIP 图书在版编目:' . $cip . '</p>' . '<p>正书名:' . $title . '<br />副书名:' . $subtitle . '<br />丛书名:' . $series . '</p>';			$creator1loc = code2loc($creator_loc_id1);			echo '<p>作者1:[' . $creator1loc . ']' . $creator_1 . '<br />';			$creator2loc = code2loc($creator_loc_id2);			echo '作者2:[' . $creator2loc . ']' . $creator_2 . '</p>';			$publoc = code2loc($publoc_id);			echo '<p>由' . $publoc . '的' . $publisher . '出版<br />';			$language = code2lang($lang_id);			echo '此' . $language . '发行版本为' . $edit_date . '第' . $edit_no . '版 ' . $version_date . '第' . $version_no . '次印刷</p>';			echo '<p>关键词组1:' . $subj_key_1 . '?' . $subj_key_2 . '?' . $subj_key_3 . '<br />';			$clssys1 = code2clssys($clssys_id_1);			echo '关键词组2:' . $subj_key_4 . '?' . $subj_key_5 . '?' . $subj_key_6 . '<br />';			$clssys1 = code2clssys($clssys_id_1);			echo $clssys1 . '分类号:' . $class_no_1 . '<br />';			$clssys2 = code2clssys($clssys_id_2);			echo $clssys2 . '分类号:' . $class_no_2 . '</p>';			$priceunit = code2punit($punit_id);			echo '<p>价格 ' . $price . $priceunit . ' &middot; 藏本数量 ' . $amount . ' &middot; 相关图书ISBN ' . $rlt_isbn . '</p>';			echo '<p>备注信息' . $noteinfo . '</p>';						echo '<h3>数据库写入信息</h3>';			include 'insert.php'; /*载入写入数据库模块*/		?>		<object type='image/svg+xml' data='bcgen/getbc.php?code=<?php echo $isbn; ?>'></object><br />		<ul>			<li><a href="http://book.douban.com/isbn/<?php echo $isbn; ?>/">《<?php echo $title ?>》在豆瓣上的页面</a></li>			<li><a href="http://www.amazon.cn/s/field-keywords=<?php echo $isbn; ?>">《<?php echo $title ?>》在亚马逊(中国网站)上的页面</a></li>		</ul>		</div>		<div id="bottom" name="bottom">		<a href="insert.php"><button>确认添加</button></a>		<input type="button" value="后退" onclick="javascript:history.back(1)" />		<p id="contact">Developed by SJHSTONE in 2014.</p>		</div>	</body></html>

数据库连接模块(dbconnect.php)
<?php	$dbc = mysqli_connect('localhost', 'mylibr', 'v3rubaGbdfSSTz88', 'libr')	  or die('无法链接到MySQL数据库');	mysqli_set_charset($dbc,'utf8');

数据写入模块(insert.php)
<?php	/*初始连接数据库,连接变量$dbc*/	include 'dbconnect.php';		/*开始写入请求*/	$query1 = "INSERT INTO libr_metacode (meta_isbn, meta_cip) VALUES ('$isbn', '$cip')";	$result = mysqli_query($dbc,$query1)	  or die('无法写入数据块1');	$query2 = "INSERT INTO libr_title (meta_isbn, title, subtitle, series) VALUES ('$isbn', '$title', '$subtitle', $'series')";	$result = mysqli_query($dbc,$query2)	  or die('无法写入数据块2');	$query3 = "INSERT INTO libr_author (meta_isbn, creator, creator_id, creatorloc_id) VALUES ('$isbn', '$creator_1', '$creator_loc_id1')";	$result = mysqli_query($dbc,$query3)	  or die('无法写入数据块3');	/*作者2是否为空*/	if (!empty($creator_2)) {		$query4 = "INSERT INTO libr_author (meta_isbn, creator, creator_id, creatorloc_id) VALUES ('$isbn', '$creator_2', '$creator_loc_id2')";		$result = mysqli_query($dbc,$query4)		  or die('无法写入数据块4');	}	else {		echo '无写入的作者2信息,不写入数据块4';	}	mysqli_close($dbc);

所有从$POST_[]全局变量引用的值都能在echo时正确显示,
能够正常连接并写入libr_metacode表中的13位ISBN、10位CIP数据,
但是无法写入接下来其他表中的数据。

先期涉及的三个表结构:
libr_metacode->meta_isbn char(13) 主键->meta_cip int(10)libr_title->meta_isbn char(13) 主键->title varchar(70)->subtitle varchar(50)->series varchar(30)libr_author (一对多)->rec_id int(5) 自动编号主键->creator varchar(30)->creatorloc_id int(3)


有兴趣的高手麻烦可以到 http://sjhstone.name/book/sandbox.rar看看源码提提建议,密码forcsdn(运行环境为本地Windows上的WampServer)

回复讨论(解决方案)

VALUES ('$isbn', '$cip')";

全都加转义
addslashes($isbn)
或者
mysql_real_escape_string($isbn)

把形如
or die('无法写入数据块1');
的改为形如
or die('无法写入数据块1' . mysqli_error($dbc));
的,就可知道问题在哪里了

VALUES ('$isbn', '$cip')";

全都加转义
addslashes($isbn)
或者
mysql_real_escape_string($isbn)

都是不需要转义的字符,而且只是在本地测试,暂时还用不着防注入……
不过谢啦!

把形如
or die('无法写入数据块1');
的改为形如
or die('无法写入数据块1' . mysqli_error($dbc));
的,就可知道问题在哪里了
这个纠错功能之前没看到过呢
顺带问一下哪里有参考性质的命令大全呢

一切都在 PHP手册 之中

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn