Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php仅从上传到mysql的服务器捕获电子邮件_Php_Mysql_Csv - Fatal编程技术网

如何使用php仅从上传到mysql的服务器捕获电子邮件

如何使用php仅从上传到mysql的服务器捕获电子邮件,php,mysql,csv,Php,Mysql,Csv,我似乎不知道如何使用php从上传到mysql的csv中删除所有不必要的字段,并将结果放在一列中 我目前正在做的是让某人通过我的网站上传他们的csv,并尝试只收集来自该csv的电子邮件地址 这些电子邮件可能在不同的行或列中,我无法提前知道。我尝试只将电子邮件捕获到mysql中,并将它们存储在csv的一列中。显然,我正在剔除任何不包含@符号的内容 我希望这是有意义的,我真的需要帮助。提前谢谢 当需要这样做时,我通常会要求CSV上的标题保持一致。 然后,我可以解析出标题,找到电子邮件所在的列 <

我似乎不知道如何使用php从上传到mysql的csv中删除所有不必要的字段,并将结果放在一列中

我目前正在做的是让某人通过我的网站上传他们的csv,并尝试只收集来自该csv的电子邮件地址

这些电子邮件可能在不同的行或列中,我无法提前知道。我尝试只将电子邮件捕获到mysql中,并将它们存储在csv的一列中。显然,我正在剔除任何不包含@符号的内容


我希望这是有意义的,我真的需要帮助。提前谢谢

当需要这样做时,我通常会要求CSV上的标题保持一致。 然后,我可以解析出标题,找到电子邮件所在的列

<?php
$emailIndex = "none";
//CSV files saved on windows tend to behave weird on our linux server if we use fgetcsv
$file = file_get_contents("pathtofile/file.csv);
$file = str_replace("\r", "", $file);
$rows = explode("\n", $file);
$header = str_getcsv($rows[0], ",", '"', "\\");
unset($rows[0]);
foreach ($header as $index => $field) {
    if (trim($field) == "Email") {
        $emailIndex = $index;
        break;
    }
}
if (is_numeric($emailIndex)) {
    //Your execution code here.
}
我对代码进行了一些编辑,以反映您希望在数据库中每行输入4封电子邮件的想法。 如果你只想要1,那么在我有$emails[]=$email的地方,你实际上可以把你的sql代码放进去,然后打电话休息。以及摆脱第二个if语句

如果您不知道每行可能收到多少封电子邮件,那么可以删除If countemails==4。
不要使用if语句和代码,只需在内部foreach循环的末尾调用sql代码。

有一种更简单的方法

$csv=文件\u获取\u内容scsv.csv; preg_match_all/[a-zA-Z0-9_.+]+@[a-zA-Z0-9]+[a-zA-Z]+/,$csv,$matches; var_dump$匹配


我相信您可以找到更好的电子邮件regexp

谢谢您的回复!我将寻找包含@符号的索引。我让不同的公司通过网站上传他们的csv,他们会有不同的栏目。因此,我只是想剔除这些电子邮件。我对以上代码的理解以及我对时间的感激,会在csv中查找标题并利用它来识别要抓取的列。对吗?对。我会稍微修改我的答案,以包含用于检测电子邮件引号的代码,因为它还可以检测每一行上的其他内容。有时我会将列和行混淆。谢谢您的修改。根据上面列出的代码,我将把它放在哪里?再次感谢你的帮助,我真的很感激。几周后,我已经走到了这一过程的最后一步,我只是被难住了。经验不足:我的代码几乎可以替换您的所有代码,但查询除外,我将//您的代码插入到这里。但是,查看您的代码时,需要再次进行修改。请稍等。再次感谢您的时间和解释。我会试着把它拼凑起来,看看能得到什么。让我恼火的是,我有一个csv上传页面,使用了一个命令,将用户带到一个提交并使用csv的新页面。我对pathtofile以及如何找出该文件的存储位置以检索它感到困惑。我应该将该代码放在哪里?抱歉,我不知道如何让它看起来像论坛上的代码:这里是我的一点:ifisset$_POST['submit']{$file=$_FILES['file']['tmp_name'];$handle=fopen$file,r;而$fileop=fgetcsv$handle,1000,!==false{$email0=$tablename;$email1=$fileop[0];$email2=$fileop[1];$email3=$fileop[2];$email3=$fileop[3];mysql_查询插入到.$tablename.email0、email1、email2、email3值“$email0”、“$email1”、“$email2”、“$email3”;}
foreach($rows as $rowIndex => $row) {
    $emails = array();
    foreach ($row as $fieldIndex => $field) {
        if (strpos($field, "@") !== false) {
            $email = strtolower($field);
            if (strpos($email, "com") !== false
                || strpos($email, "org") !== false
                || strpos($email, "net") !== false) {
                $emails[] = $email;
            }
        }
        if (count($emails) == 4) {
            //insert sql here using the array
            //Btw you should run mysql_real_escape_string() to sanitize data
            //Actually, you should probably use mysqli...


            //Break out of this loop at the end.
            break;
        }
    }
}