Php 无法将CSV文件上载到数据库
我有一个上传页面,用户只能上传CSV文件。但是,当我点击上传按钮时,没有任何内容上传到我的数据库,也没有显示任何错误消息。只有返回按钮显示这意味着我的代码不能正确执行我的代码。我将如何解决这个问题Php 无法将CSV文件上载到数据库,php,mysql,csv,Php,Mysql,Csv,我有一个上传页面,用户只能上传CSV文件。但是,当我点击上传按钮时,没有任何内容上传到我的数据库,也没有显示任何错误消息。只有返回按钮显示这意味着我的代码不能正确执行我的代码。我将如何解决这个问题 CREATE TABLE `Jobs` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `date` date NOT NULL, `order_ref` varchar(250) NOT NULL, `first_name`
CREATE TABLE `Jobs` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`order_ref` varchar(250) NOT NULL,
`first_name` varchar(250) NOT NULL,
`last_name` varchar(250) NOT NULL,
`postcode` varchar(250) NOT NULL,
`country` varchar(250) NOT NULL,
`quantity` varchar(250) NOT NULL,
`scott_packing` varchar(250) NOT NULL,
`packing_price` varchar(250) NOT NULL,
`courier_price` varchar(250) NOT NULL,
`dispatch_type` varchar(250) NOT NULL DEFAULT '',
`tracking_number` varchar(250) NOT NULL,
`job_status` varchar(250) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
HTML:
<?
session_start();
if(!session_is_registered(myusername))
{
header("location:../index.php");
}
?>
<?
include("../template/header.php");
?>
<!DOCTYPE html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="content">
<div class="toggle">
<div class="header"><img style="float: right; padding: 10px;" src="../img/show.gif"><h4>Upload New File:</h4></div>
<form id="upload" action="upload_file.php" method="post" enctype="multipart/form-data">
<input type="file" name="uploaded_file"><br>
<input type="submit" value="Upload file">
</form>
<!--<p>
<a href="list_files.php" style="padding: 20px;">See all files</a>
</p>-->
</div>
</div>
</body>
</html>
上载新文件:
upload\u file.php:
<?php
if(isset($_FILES['uploaded_file'])) {
if($_FILES['uploaded_file']['error'] == 0) {
$database = "spineless";
$dblink = mysql_connect("localhost", "root", "vario007")
or die("Could not connect");
$db = mysql_select_db($database)
or die("Could not select database");
if(mysql_errno()) {
die("MySQL connection failed: ". mysql_error());
}
$file = $_FILES ['uploaded_file']['tmp_name'];
$handle = fopen($file, "r");
$row = 1;
while (($data = fgetcsv($handle, 0, ",","'")) !== FALSE)
{
if($row == 1)
{
// skip the first row
}
else
{
//csv format data like this
//$row[0] = date
//$row[1] = order_ref
//$row[2] = postcode
//$row[3] = country
//$row[4] = quantity
//$row[5] = packing_price
//$row[6] = dispatch_type
$query = "
INSERT INTO `Jobs` (
`date`, `order_ref`, `postcode`, `country`, `quantity`, `packing_price`, `dispatch_type`, `created`
)
VALUES (
'".$data[0]."', '".$data[1]."', '".$data[2]."', '".$data[3]."', '".$data[4]."', '".$data[5]."', '".$data[6]."', NOW()
)";
$result = mysql_query($query);
// Check if it was successfull
if(!$result) {
echo 'Success! Your file was successfully added!';
}
else {
echo 'Error! Failed to insert the file';
}
}
$row++;
}
}
else {
echo 'An error accured while the file was being uploaded. '
. 'Error code: '. intval($_FILES['uploaded_file']['error']);
}
// Close the mysql connection
mysql_close();
}
else {
echo 'Error! A file was not sent!';
}
// Echo a link back to the main page
echo '<p>Click <a href="joblist.php">here</a> to go back</p>';
?>
好的,我根据您的信息设置了一个数据库,并使用您提供的数据创建了一个CSV文件。好消息是,您的代码(对我来说)运行得非常好,但有两个小问题
您的成功消息是错误的,请删除代码>:
if($result){
echo 'Success! Your file was successfully added!';
}else{
echo 'Error! Failed to insert the file';
}
您还试图在日期数据类型中插入日期字符串03/02/2014
。这将不起作用,您需要相应地格式化此字符串。作为临时措施,我只是将数据库中的数据类型更改为VARCHAR(20)
这两件小事都解决了:
所以我设法解决了我自己的问题。在浏览了我的代码之后,我注意到我的代码在while循环之前是很好的。PHP在读取文件时没有正确识别行尾,因此启用自动检测行尾
运行时配置有助于解决我的问题。请注意,auto\u detect\u line\u endings
应设置在fopen
之前,而不是之后
<?php
if(isset($_FILES['uploaded_file'])) {
if($_FILES['uploaded_file']['error'] == 0) {
// Connect to database
$database = "spineless";
$link = mysql_connect("localhost", "root", "vario007") or die("Could not connect");
$db = mysql_select_db($database,$link) or die("Could not select database");
// Upload file
$file = $_FILES['uploaded_file']['tmp_name'];
ini_set("auto_detect_line_endings", true); // auto_detect_line_endings added here
$handle = fopen($file, "r");
$row = 1;
while (($data = fgetcsv($handle, 0, ",","'")) !== FALSE)
{
if($row == 1)
{
// skip the first row
}
else
{
//csv format data like this
//$row[0] = date
//$row[1] = order_ref
//$row[2] = postcode
//$row[3] = country
//$row[4] = quantity
//$row[5] = packing_price
//$row[6] = dispatch_type
$query = "
INSERT INTO `Jobs` (
`date`, `order_ref`, `postcode`, `country`, `quantity`, `packing_price`, `dispatch_type`, `created`
)
VALUES (
'".$data[1]."', '".$data[2]."', '".$data[5]."', '".$data[6]."', '".$data[7]."', '".$data[9]."', '".$data[11]."', NOW()
)";
$result = mysql_query($query);
// Check if it was successfull
if($result) {
echo 'Success! Your file was successfully added!';
}
else {
echo 'Error! Failed to insert the file';
}
}
$row++;
}
}
else {
echo 'An error accured while the file was being uploaded. ';
}
// Close the mysql connection
mysql_close();
}
else {
echo 'Error! A file was not sent!';
}
// Echo a link back to the main page
echo '<p>Click <a href="joblist.php">here</a> to go back</p>';
?>
我更担心的是上传的文件不符合您期望的格式。@蓝狗,请您详细说明一下好吗?您根本没有检查上传的文件格式。如果你有一个期望数字的文本,会发生什么?如果有8列而不是7列,会发生什么?所有这些(以及更多!)都可以防止数据被插入数据库。你是在向一个充满伤害的世界敞开心扉…@蓝狗我明白你的意思,但是,除了设置文件格式限制外,我现在最担心的是我不能将任何东西上传到我的数据库好的,你明白这一点没关系:)我每天都处理CSV文件,当它们由另一个应用程序生成时(直到供应商更改格式),这很容易,但是尝试插入来自用户的数据是另一回事。我没有意识到我的成功消息是错误的。谢谢你注意到这一点。而且,我也不知道为什么它对我不起作用me@user3519721:我刚才注意到的另一件事是,在HTML文档中,您使用的是简短的PHP标记:(仍然不起作用。在我第一次编写代码时,它起作用了,但后来它就停止了工作,这是非常重要的。)strange@user3519721:我会说!很抱歉,我无法提供更多帮助,但我无法复制您的问题…如果您注释掉include(“../template/header.php”),会发生什么情况
?可能里面有什么东西导致了问题。我会尝试修改代码,谢谢你的帮助,虽然我上传了我的新代码,上面已经不再使用简短的开头标记了
<?
session_start();
<?php
session_start();