Как найти переменные в строке?

Я получаю потенциальных клиентов по электронной почте, когда кто-то отправляет форму на веб-сайте, на котором я плачу за рекламу. Используя PHP, я могу получить доступ к своей учетной записи электронной почты (IMAP), получать и читать сообщения, но у меня возникают проблемы с извлечением определенной информации из тела сообщения электронной почты. Я могу взорвать (\n) тело, но не могу понять, как извлечь необходимую информацию для заполнения переменных в моей функции вставки MYSQL.

После использования взрыва() отображение результатов выглядит следующим образом:

Темы :: ADVERTISINGDOMAIN.COM - Ответ на запрос на день открытых дверей - Листинг № 839027
Кому :: [email protected]
ToName :: Мэтью
От :: [email protected]
FromName :: Лиды XYZ

Ответить на День открытых дверей

Номер объявления: 8390279
Дата открытых дверей: 3 сентября 2010 г.
Имя: John Doe
Телефон: 5555555555
Электронная почта: [email protected]
Комментарии: Привет. Я буду в доме открытых дверей... с нетерпением жду встречи с вами и просмотра этой собственности. Спасибо. Джейн


person Matthew    schedule 16.09.2010    source источник
comment
Мэтью, можешь уточнить, что ты ищешь?   -  person Rudu    schedule 16.09.2010
comment
Вы когда-нибудь использовали регулярные выражения?   -  person Álvaro González    schedule 16.09.2010


Ответы (2)


Хорошо, используйте explode() еще раз для каждой строки с limit, и вы получите такие поля:

$var = explode(':', 'Name: John Doe', 2);

Это даст вам $var[0], содержащее имя поля как Name, и $var[1], содержащее значение как John Doe. Теперь сделайте это для каждой строки, а затем используйте значения в своем запросе.

person shamittomar    schedule 16.09.2010
comment
Не уверен, что следую. Мой первоначальный взрыв: сбросить ($ dataTxt); foreach ($body_lines as $x => $line) { $body_lines .= htmlspecialchars($line) . ‹br /›\n; Итак, теперь мне нужно следить за этим? $body_lines = взорвать(':', $body_lines, 2); - person Matthew; 17.09.2010

если вы используете preg_split, вы можете разделить свои данные с помощью :+ и отделить каждую часть

$str = <<<END
Subjects :: ADVERTISINGDOMAIN.COM - RSVP Open House Inquiry - Listing #839027
To :: [email protected]
ToName :: Matthew
From :: [email protected]
FromName :: XYZ Leads

RSVP for Open House

Listing #: 8390279
Open House Date: Sep 3, 2010
Name: John Doe
Phone: 5555555555
Email: [email protected]
Comments: Hi. I will be at the open house...looking forward to meeting you and viewing this property. Thanks. Jane
END;

$parts = explode( "\n", $str );

foreach( $parts as $part ) {
    // split by :+ and unlimited spaces
    $data = preg_split( '~[:]+\s*~', trim($part), null, PREG_SPLIT_NO_EMPTY );
    if ( count( $data ) ) {
        $final_data[] = $data;
    }

}
print_r($final_data);

приводит к ...

Array
(
    [0] => Array
        (
            [0] => Subjects 
            [1] => ADVERTISINGDOMAIN.COM - RSVP Open House Inquiry - Listing #839027
        )

    [1] => Array
        (
            [0] => To 
            [1] => [email protected]
        )

    [2] => Array
        (
            [0] => ToName 
            [1] => Matthew
        )
...

Теперь, если вы перебираете этот массив, у вас есть «имя переменной» в качестве позиции 0 каждого массива и данных переменной в позиции 1. Если они не совпадают напрямую с полями таблицы, вы можете создать массив, который отображает поля формы в поля таблицы.

person Galen    schedule 16.09.2010
comment
Спасибо. Используя preg_split, я смог получить следующее. Может ли это работать? Как выполнить цикл, чтобы назначить каждый переменной? Вот результат, который я получил. Массив ( [0] =› ADVERTISINGDOMAIN.COM – ответ на запрос на день открытых дверей – Листинг #839027 Листинг № [1] =› 839027 Дата открытых дверей [2] =› 3 сентября 2010 г. Имя [3] =› John Doe Электронная почта [4 ] =› [email protected] Телефон [5] =› 555555555 Комментарии [6] =› Привет. Я буду на днях открытых дверей... с нетерпением жду встречи с вами и просмотра этого объекта. Спасибо. Джейн - person Matthew; 17.09.2010