file_get_contents и цикл foreach - вставьте только последнюю запись - PullRequest
0 голосов
/ 19 октября 2011

Я пишу скрипт, который извлекает электронные письма из URL-адресов в форме и добавляет их в базу данных. У меня две проблемы:

1. В базу данных добавляется только письмо с последнего URL.

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 Ответ

2 голосов
/ 19 октября 2011

У вас есть много точек отказа:

  1. Вы не проверяете, является ли $link действительным - поскольку он поступает из веб-формы, ничто не мешает злоумышленнику вводить такие вещи, как 'http://childporn.com' и т. П., Которые ваш сценарий будет пытаться извлечь из содержимого из.
  2. Вы не проверяете, действительно ли file_get_contents() что-то вернуло
  3. Вы не проверяете, действительно ли регулярное выражение нашло адрес электронной почты
  4. Вы не выполняете дезинфекцию для совпадения DID для вставки в БД, поэтому у вас есть дыра для SQL-инъекции
  5. Вы не проверяете, действительно ли запрос вставки в БД действительно выполнен

добавьте проверки в свой код для решения всех этих проблем, и вы, вероятно, поймете, почему вы получаете только некоторые вставки для успеха.

...