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