Php 将csv填充到数据库中
我已经成功地编写了这个CSV文件,它运行得很好。我唯一遇到的问题是表单上的变量错误。我遇到了这个错误…注意:未定义的变量:C:\xampp\htdocs\helper.php527中的数据:运行时在第22行创建的函数 如何解决错误?这个 这是我的示例代码Php 将csv填充到数据库中,php,csv,Php,Csv,我已经成功地编写了这个CSV文件,它运行得很好。我唯一遇到的问题是表单上的变量错误。我遇到了这个错误…注意:未定义的变量:C:\xampp\htdocs\helper.php527中的数据:运行时在第22行创建的函数 如何解决错误?这个 这是我的示例代码 <form enctype="multipart/form-data" method="POST" action="" > CSV<input type="
<form enctype="multipart/form-data" method="POST" action="" >
CSV<input type="file" name="file" />
<input type="submit" value="submit" name="submit"/>
</form>
//connect to the database
$connect = mysql_connect("localhost","root","");
mysql_select_db("test",$connect); //select the table
if(isset($_POST['submit']))
{
//get the csv file
$file = $_FILES['file']['tmp_name'];
$handle = fopen($file,"r");
//loop through the csv file and insert into database
do {
if ($data[0]) {
mysql_query("INSERT INTO f38uj_zhgooglemaps_markers (title, addresstext, published, baloon, icontype, mapid) VALUES
(
'".addslashes($data[0])."',
'".addslashes($data[1])."',
'".addslashes($data[2])."',
'".addslashes($data[3])."',
'".addslashes($data[4])."',
'".addslashes($data[5])."'
)
");
}
} while ($data = fgetcsv($handle,1000,",","'"));
}
?>
应该是
$data==$data[0]
您是在比较,而不是分配。特别是在if语句中,如果这是您的全部代码,我看不出您在何处设置变量$data,然后继续对其进行测试:
if ($data[0]) { ... }
在进行这些类型的测试之前,应使用函数,除非100%确定变量不为null:
if (isset($var)){ ... }
然后
if ($var) { ... }
这里有三个问题: 1您使用的是双引号,它告诉PHP用它找到的变量值替换前面设置的值,请参见下面的示例 2$数据直到循环结束时才定义,因此请使用常规while循环,而不要使用do while 3您的sql查询无论如何都是错误的。你会有一些效果
$data='value',$data='value',$data='value2',$data='value3',$data='value4',
mysql_query("INSERT INTO f38uj_zhgooglemaps_markers (title, addresstext, published, baloon, icontype, mapid) VALUES
(
$data= '".addslashes($data[0])."',
$data= '".addslashes($data[1])."',
$data= '".addslashes($data[2])."',
$data='".addslashes($data[3])."',
$data= '".addslashes($data[4])."',
$data= '".addslashes($data[5])."'
)
");
}
由于您使用的是do-while,在循环的第一次迭代中,$data将没有值,因此PHP会抛出一个运行时警告,因为对于所有解释器来说,解释器都知道它将在以后设置,就像您的情况一样。基本上在do中,直到主体运行之后才检查条件,因此直到第一次通过之后才调用$data=fgetcsv
您可以轻松地切换此设置并消除警告,只需更改此结构:
do{
//...
}
while($data=fgetcsv())
为此:
while($data=fgetcsv()){
//...
}
我注意到了,但我还是发现了一个错误,使用db server直接导入数据是可能的。我的问题是我的公司需要从远程位置导入数据,所以我需要创建标记…我正在处理地图。无论如何,他应该使用常规的while循环,然后使用fgetcsv将保证在变量为null时代码不会运行loop@Farkie除了它是一个do-while循环$直到循环体已经运行了一次,数据才被设置。@Farkie-我使用了常规while循环,是的,它可以正常工作,但是在表上重复记录6次。我需要一些东西来结束记录的重复。这就是为什么我尝试了这个方法。感谢我在上一篇文章中尝试了while方法的支持,但是它在表上重复了数据3次..我已经修改了这个,现在数据不再重复,但是在我得到的表单上..注意:未定义变量:数据当你说这是我的$data时,php会找到名为$data的变量并将其值放入字符串中。但是,在循环的第一次迭代中,未设置$data。您使用的是do while循环,因此直到第一次迭代之后才检查条件,这也意味着$data在第一次迭代之后才被设置。您正在尝试替换一个尚不存在的值。请使用while循环代替do while循环。我将更新我使用的答案,例如//在$data=fgetcsv$handle,1000,,,,'时循环浏览csv文件并插入数据库;如果$data=$data[0]{mysql_queryINSERT到contacts_,contact_,contact_,email VALUES'.addslashes$data[0].','.addslashes$data[1].','.addslashes$data[2].;}}?>虽然有效,但在桌子上重复了lettes@Zarazthuztra-我理解..我只需要你们专家的帮助,因为我相信stack和所有人..我一直知道这里有专家和proi已经删除..$数据=
while($data=fgetcsv()){
//...
}