嘿伙计们,所以我已经有一些代码可以获取.csv文件中列的名字,姓氏和电子邮件,但它无法正常工作,我可以用手来解决这个问题。
Heres当前代码:
//this file is used to grab the usernames of the csv file and put them in a session, returning it memberinterface that will open a dialog box with the usernames
$seterror = 0;
function returnBack(){
header("Location:../memberinterface.php?getmsg=15");
exit;
}
function returnBackfile(){
header("Location:../memberinterface.php?getmsg=16");
exit;
}
if (!empty($_FILES['csvfile']['error'] ) )
{
$seterror = 1;
returnBack();
}
if (empty($_POST['firstname'])){
$seterror =1;
returnBack();
}
if (empty($_POST['lastname'])){
$seterrro =1;
returnBack();
}
if (empty($_POST['email'])){
$seterror =1;
returnBack();
}
if ($seterror !== 1){
$file = $_FILES['csvfile']['tmp_name'];
$handle = fopen($file , "r");
$fileop = fgetcsv($handle,1000,",");
$fileop=array_map("strtoupper",array_map("trim",$fileop));
$firstname_index = array_search(strtoupper($_POST["firstname"]),$fileop); <!-----these right here are not working correctly and will always send me back with the error, it does not find the firstname column? and same with the other ones.
if ($firstname_index===false){
returnBack();
}
$lastname_index = array_search(strtoupper($_POST['lastname']),$fileop);
if ($lastname_index===false){
returnBack();
}
$email_index = array_search(strtoupper($_POST['email']),$fileop);
if ($email_index===false){
returnBack();
}
//open file and store values
$j = 0;
while (($fileop=fgetcsv($handle)) !== false)
{
$fileop=array_map("trim",$fileop);
$firstname[$j] = $fileop[$firstname_index];
if (empty($firstname[$j])){
returnBackfile();
}
$lastname[$j] = $fileop[$lastname_index];
if (empty($lastname[$j])){
returnBackfile();
}
$email[$j] = $fileop[$email_index];
if (empty($email[$j])){
returnBackfile();
}
$j++;
}
print_r($firstname);
}
所以当我打印$ firstname值时,它打印出.csv文件中的值,但是包含所有值?
所以回顾一下我试图让它从.csv文件中获取firstname,lastname和email列,将它存储在$ firstname数组,$ lastname数组等中......
如果你能提供帮助,我会很感激!!
大卫
更新:
将var_dump($fileop); var_dump($POST);
放在$firstname_index = array_search($_POST["firstname"],$fileop);
我使用.csv文件获得了这些结果:
array(1) { [0]=> string(162) "FIRSTNAME LASTNAME EMAIL PHONE COMBINED SINGLE LIMIT BODILY INJURY EACH PERSON BODILY INJURY EACH ACCIDENT PROPERTY
DAMAGE STATUS ADDRESS NOTES STATUS CHANGE DATE" }
NULL Array ( [0] => Hank Aaron biga.@gsadf.com 777.777.7777 '0 20000
40000 10000 Non-Active [1] => Fred Astaire astaire@test.com 222.431.5843 '0
'0 '0 '0 Open 98 Ocean Blvd [2] => Jim Belushi biga.@gsadf.com
333.333.3333 '0 '0 '0 '0 Open 98 Ocean Blvd [3] => Charlie
Brown charlie@test.com 909.111.1111 '0 '0 '0 '0 Open 98
Ocean Blvd [4] => Carol Burnett burnett@test.com 911.911.9999 '0 '0 '0
'0 Enrolled - PCG to Follow-Up 98 Ocean Blvd [5] => Bill Cosby
cosby@test.com 989.989.9898 '0 100000 300000 100000 Confirmed 23 Surf Rd
[6] => Charles Dickens dickens@test.com 897.333.3333 '0 '0 '0 '0
Non-Active - Driver Chose Non-Compliance 23 Surf Rd [7] => Walt Disney
disney@test.com 909.909.9090 '0 '0 '0 '0 Non-Active - Driver Chose
Non-Compliance 23 Surf Rd [8] => Bob Dylan dylan@test.com 333.444.5555 '0 '0
'0 '0 Enrolled - Agent Emailed 23 Surf Rd [9] => Thomas Edison
edison@test.com 765.222.1111 '0 '0 '0 '0 Enrolled - Agent Emailed
23 Surf Rd [10] => Harrison Ford harrison@test.com 345.543.5555 '0 '0
'0 '0 Enrolled - Agent Emailed 23 Surf Rd [11] => Bill Gates
gates@test.com 123.456.7890 350000 '0 '0 '0 Enrolled - Employee Follow-
Up Required 16 Tulip Ln [12] => Tom Hanks hanks@test.com 777.888.9999 '0 '0
'0 '0 Enrolled - Agent Emailed 16 Tulip Ln [13] => Alfred Hitchcock
alfred@test.com 878.000.9999 '0 '0 '0 '0 Non-Active - Other 16
Tulip Ln [14] => Michael Jackson jackson@test.com 123.123.1234 '0 '0
'0 '0 Non-Active - PolicyHolder Cancelled Additional Interest 16 Tulip Ln [15] =>
Michael Jordan michael@test.com 888.888.8888 '0 '0 '0 '0 Non-Active
- Employee Not Covered Under Listed Policy 16 Tulip Ln [16] => John Lennon
lennon@test.com '098.765.5432 '0 '0 '0 '0 Non-Active - Insurance Cancelled
16 Tulip Ln [17] => Joe Lewis b@hotmail.com 888.999.1111 '0 15000
30000 5000 Confirmed 4765 E Palm Rd [18] => Peyton Manning peyton@test.com
111.222.3333 '0 '0 '0 '0 Enrolled - Agent Emailed 4765 E Palm
Rd [19] => Marilyn Monroe monroe@test.com 212.121.1212 '0 '0 '0 '0
Enrolled - Policyholder Follow-Up Required 4765 E Palm Rd [20] => Elvis Presley
elvis@test.com 909.000.8761 '0 '0 '0 '0 Enrolled - New Carrier
Being Processed 4765 E Palm Rd [21] => Dan Rather rather@test.com 333.333.8888 '0
25000 50000 15000 Confirmed 909 Kodak Ln [22] => Chris Rhodes
crhodes@rhodesretail.com 916-205-2474 '0 '0 '0 '0 Open 909 Kodak
Ln [23] => William Shakespeare william@test.com 444.444.4444 '0
100000 300000 100000 Confirmed 926 Maple St [24] => Meryl Streep
streep@test.com 411.411.4111 '0 100000 300000 100000 Confirmed 412 East
3rd St [25] => Mark Twain twain@test.com 323.323.3232 '0 '0 '0 '0
Enrolled - Agent Emailed 412 East 3rd St [26] => Darth Vader darth@test.com
874.321.4444 '0 25000 50000 15000 Confirmed 1234W U Parkway [27] =>
George Washington george@test.com 876.321.1234 '0 100000 300000 100000
Confirmed 12 oak blvd [28] => Robin Williams rwilliams@test.com
444.555.6666 '0 '0 '0 '0 Open 12 oak blvd )
答案 0 :(得分:1)
默认情况下,fgetcsv()
使用逗号作为列分隔符。您的文件以制表符分隔,因此您需要明确指定分隔符参数。
变化:
$fileop = fgetcsv($handle,1000,",");
为:
$fileop = fgetcsv($handle,0,"\t");
并改变:
while (($fileop=fgetcsv($handle)) !== false)
为:
while (($fileop=fgetcsv($handle, 0, "\t")) !== false)