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

发布于 2024-12-10 12:49:29 字数 982 浏览 0 评论 0原文

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

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) "[email protected]" }

I'm writing script, which extract emails from the urls in the form and add them to the database.
I've got two problems:

1.Only the email from last url is added to the database.

2.How can I add an email to the database?;) When I use variable $email or $email[0] I receive in the table an empty field or Array. I have avoid this by using foreach loop, but I hope you'll find out some more convenient solution.

$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);
    }

Here is my output from print_r($link); in the foreach loop:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮华 2024-12-17 12:49:29

您有很多失败点:

  1. 您没有检查 $link 是否有效 - 因为它来自网络表单,所以没有什么可以阻止恶意用户输入“http://childporn”之类的内容.com' 等,然后您的脚本将尝试获取其中的内容。
  2. 您不检查 file_get_contents() 是否实际返回了任何内容
  3. 您不检查正则表达式是否确实找到了电子邮件地址
  4. 您不清理任何 DID 匹配项以插入数据库,因此您已经遇到 SQL 注入漏洞
  5. 您不会检查数据库插入查询是否确实成功

,而是在代码中添加检查来处理所有这些问题,您可能会发现为什么只有一些插入成功。

You've got many points of failure:

  1. You don't check if $link is valid - since it's coming from a web form, nothing stops a malicious user from entering things like 'http://childporn.com' and the like, which your script will then try to fetch the contents of.
  2. You don't check if file_get_contents() actually returned anything
  3. You don't check if the regex actually found an email address
  4. You don't sanitize whatever DID match for insertion into the DB, so you've got an SQL injection hole
  5. You don't check if the DB insert query actually succeeded

add checks to your code to handle all of these issues, and you'll probably find out why you're only get some inserts to succeed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文