2010-09-10 126 views
0

可能重复:
PHP CSV upload filesPHP的CSV上传问题

我有一个CSV文件,忒文件有像UNAME,密码,fistname,LNAME,电子邮件字段。 我的要求是当我上传一个CSV,它应该检查重复的用户名和电子邮件也应该chekc是否存在数据库中的uname和密码值。 基本上它必须删除所有重复并上传 我该如何实现它?

RONIE

回答

4
function csv_to_array($filename='', $delimiter=',') 
{ 
    if(!file_exists($filename) || !is_readable($filename)) 
     return FALSE; 

    $header = NULL; 
    $data = array(); 
    if (($handle = fopen($filename, 'r')) !== FALSE) 
    { 
     while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) 
     { 
      if(!$header) 
       $header = $row; 
      else 
       $data[] = array_combine($header, $row); 
     } 
     fclose($handle); 
    } 
    return $data; 
} 

CSV像这样

"usename","password"  #Header 

"robert 1", you_wish 
"robert 1", you_wish 

输出像这样:

Array 
(
    [0] => Array 
     (
      [username] => robert 1 
      [password] => you_wish 
     ) 

    [1] => Array 
     (
      [username] => robert 2 
      [password] => you_wish 
     ) 

) 

参考: http://gist.github.com/385876

+0

我会尽力感谢 – ronnie 2010-09-10 20:41:27

+0

有重复检查FRM http://stackoverflow.com/questions/1139571/remove-dupes-sort-from-a-array- of-associative-arrays-in-php – ronnie 2010-09-10 22:25:45

+0

@ronnie,你是什么意思? – RobertPitt 2011-04-21 23:13:38

2

一个简单的WA ❖要做到这一点,将UNIQUE约束放在数据库中的用户名和电子邮件字段上,并在尝试插入新的(用户名,密码,名字,姓氏,电子邮件)元组时查找违反约束的操作。如果您将这些字段中的一个字段作为主键进行了删除,那么它已经有了一个唯一的约束条件。

此外,我希望你实际上不是直接在数据库中存储密码......?

0

您很可能需要在几个步骤中完成此操作。

  1. 接收通过上传 形式(或其他方式)的文件

  2. 读取文件大小(你可能 只是用它 被上传到tmp目录的位置,或给它一个 临时名称)

  3. 分析每一行和核对 数据库

  4. 写的所有有效行到 永久位置

+0

我得到阵列阵列 ( [0] => Array([username] => uname1 [fname] => fname1 [lname] => lname1 [email] => [email protected]) [1] => Array([username] => uname2 [fname] => fname2 [lname] => lname2 [email] => [email protected]) = => fname1 [lname] => lname1 [email] => [email protected]) [3] => Array([username] => uname3 [fname] => fname3 [lname] => lname3 [email] => > email3 @电子邮件。COM) ) 除去阵列2自UNAME和电子邮件是相同的,如ARRAY0 ?????? – ronnie 2010-09-10 20:51:49

+0

我得到阵列阵列 ( [0] => Array([username] => uname1 [fname] => fname1 [lname] => lname1 [email] => [email protected]) [1] =>阵列([用户名] => uname2 [FNAME] => fname2 [L-NAME] => lname2 [电子邮件] => [email protected]) [2] =>数组([用户名] => uname1 [FNAME] => fname1 [L-NAME] => lname1 [电子邮件] => [email protected]) [3] =>数组([用户名] => uname3 [FNAME] => fname3 [L-NAME] => lname3 [电子邮件] = > [email protected]) ) 除去阵列2自UNAME和电子邮件是相同的,如ARRAY0 ?????? – ronnie 2010-09-10 20:54:23