file_get_contents和foreach循环 - 仅插入最后一条记录

时间:2011-10-19 15:08:06

标签: php mysql foreach file-get-contents

我正在编写脚本,它从表单中的网址中提取电子邮件并将其添加到数据库中。 我有两个问题:

1.只有来自上一个网址的电子邮件才会添加到数据库中。

2.如何向数据库添加电子邮件?;)当我使用变量$ email或$ email [0]时,我在表中收到一个空字段或数组。我通过使用foreach循环避免了这种情况,但我希望你能找到一些更方便的解决方案。

$linki = explode("\n", $_POST['linki']); 

$db = new mysqli('localhost', 'root', 'root', 'linki');  

if (mysqli_connect_errno()) {
    echo 'error: ';
    exit;
}


foreach ( $linki as $link) {

    $przetwarzany_url = file_get_contents($link);

    preg_match( "/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $przetwarzany_url, $email);//email


    $query = "INSERT INTO urle set adres = '$email' "; //this query doens't add the email to db

    $result = $db->query($query);
    }

这是print_r的输出($ link);在foreach循环中:

firsturl.com array(0) { } secondurl.com array(1) { [0]=> string(17) "xxx@xxx.xxx" }

1 个答案:

答案 0 :(得分:2)

你有很多失败点:

  1. 您不检查$link是否有效 - 因为它来自网络表单,没有任何东西可以阻止恶意用户输入“http://childporn.com”之类的内容,您的脚本然后将尝试获取。
  2. 的内容
  3. 您不会检查file_get_contents()是否实际返回了任何内容
  4. 您不检查正则表达式是否实际找到了电子邮件地址
  5. 您没有清理任何DID匹配以插入数据库,因此您有一个SQL注入漏洞
  6. 您不检查数据库插入查询是否实际成功
  7. 为您的代码添加检查以处理所有这些问题,您可能会发现为什么只有一些插入才能成功。