hope1972: (Default)
[personal profile] hope1972
Тут как-то все дружно сказали, что я могу задавать вопросы по пхп? Вот у меня есть вопрос..
Есть у меня форма отправки сообщений с сайта. Есть скрипт, который из форм собирает в письмо все введенное. Имеет такую форму (кусок)

$theme = "Запрос о продаже софта";
$m = array('Имя*','Фамилия*','Отчество','Название компании*','Город','Телефон*','Факс','Электронный адрес*','Производитель*','Продукт*','Языковая версия*','Количество*','Тип лицензии');
$f = array('firstname','lastname','custom_1','company','city','phone','fax','email','custom_2','custom_3','custom_4','custom_5','custom_6');

Мне надо сделать так, чтобы он кроме самих введенных данных ($f) приписывал к ним еще и данные массива $m - то есть. чтбы письмо приходило в таком виде Имя: трататата, Фамилия: тратата и тд... пока приходит только нечто вида "трата, тратата, тратата" то есть, понять все не сложно, особенно если заглянуть на страницу, с которой оно послано и вуидеть там названия форм... но вот заглядывать-то не хочется, хочется, чтобы в письме сразу приходило. Я могу тупо во втором массиве текстом приписать все, что мне надо перед каждой переменной, или нет? Как это следует оформить?
Спасибо!

Date: 2009-02-24 10:02 am (UTC)
From: [identity profile] pan-satirus.livejournal.com
Ты не написала самое интересное, как у тебя данные массива оказываются в переменной, которая тело письма обозначает :)
Но в принципе, у тебя есть данные, у тебя есть справочник с названием полей. Соответственно на этапе формирования тела письма ты "склеиваешь" данные из первого массива и второго. Делаешь цикл for от 0 "и до обеда", склеиваешь соответствующие элементы двух массивов и присоединяешь их к строке, которая у тебя потом как тело сообщения пойдет.

Date: 2009-02-24 10:09 am (UTC)
From: [identity profile] hope1972.livejournal.com
Блин, ну круто Я чайник, я не знаю, как сделать цикл :))) я понимаю, что я их должна склеить.... причем, по парам - один из первого, один из второго, второй из первого, второй из второго и пр... как будет выглядеть цикл?
Насчет того, как оказываются - не суть, ибо скрипт работает, переменные собирает и в письмо вкладывает :)))

Date: 2009-02-24 10:21 am (UTC)
From: [identity profile] pan-satirus.livejournal.com
Такс... Вот описание цикла for
Там есть примеры как организовать перебор элементов массива. Соответственно внутри цикла делаешь склейку элементов из двух массивов (в комменте есть, как) и присоединяешь (тоже в том же описании склейки есть) к переменной $message_body (например) и гонишь ее в отправку.

Date: 2009-02-24 10:11 am (UTC)
From: [identity profile] pan-satirus.livejournal.com
Да, надеюсь, как строки клеить, знаешь, но на всякий случай, это делается примерно так

Date: 2009-02-24 10:31 am (UTC)
From: [identity profile] 1greywind.livejournal.com
не надо цикл. Есть join фунция, которая объединяет элементы массива в строку.

Date: 2009-02-24 10:35 am (UTC)
From: [identity profile] pan-satirus.livejournal.com
Для "учебных целей" лучше имхо надо, чтобы представлять как оно вообще работает :)

Date: 2009-02-24 10:40 am (UTC)
From: [identity profile] 1greywind.livejournal.com
вот как раз для обучения лучше показать "как надо", а не "шоб работало" :)

Date: 2009-02-24 02:55 pm (UTC)
From: [identity profile] strangerlive.livejournal.com
а причем тут джойн? если надо пробегаться как раз по двум массивам одновременно

Date: 2009-02-24 03:26 pm (UTC)
From: [identity profile] 1greywind.livejournal.com
Да не надо тут пробегаться. Надо собрать письмо со всеми полями из двух массивов. Т.е. (на JS, на похапе лениво):

var arr1 = [...]
var arr2 = [...]
var body = arr1.join("\n") + "\n" + arr2.join("\n");

Date: 2009-02-24 03:28 pm (UTC)
From: [identity profile] 1greywind.livejournal.com
Хотя, если надо и правда сделать чтобы из первого массива было название поля, и из второго - значение, то есть функция, которая из двух массивом собирает один, в котором из первого берутся ключи, а из второго - значения

Date: 2009-02-24 03:49 pm (UTC)
From: [identity profile] strangerlive.livejournal.com
повинуясь здравому смыслу на это быстрее наводится мысль, чем просто два последовательных джойна

Date: 2009-02-24 03:29 pm (UTC)
From: [identity profile] 1greywind.livejournal.com
И вот если ничего вышеперечисленного не получится, надо писать цикл).

Date: 2009-02-24 10:14 am (UTC)
From: [identity profile] fastshot.livejournal.com
$emailbody='';
foreach($m as $key=>$value){
$emailbody.=$key.':'.$value;
}

Date: 2009-02-24 10:16 am (UTC)
From: [identity profile] fastshot.livejournal.com
ну и еще к $emailbody добавить содержимое $f конечно

Date: 2009-02-24 10:30 am (UTC)
From: [identity profile] 1greywind.livejournal.com
А куда эти массивы дальше передаются? Потому как все зависит от того, в каком формате данные ожидает функция, которая письме шлет.


Чтобы просто слить два массива есть функция array_merge - она сливает два массива и возвращает результат. Вон описание с примерами - http://ua.php.net/manual/ru/function.array-merge.php

Date: 2009-02-24 10:55 am (UTC)
From: [identity profile] hope1972.livejournal.com
Не поняла, вот по первому примеру. Почему у меня ощущение. что сливает она не по принципу "первые элемент одного-первый элемент другого, почему у нее color=green получился?

Date: 2009-02-24 11:04 am (UTC)
From: [identity profile] 1greywind.livejournal.com
Потому что ключ "color" был в обоих массивах. Пример показывает что одинаковые ключи обрабатываются по принципу "каждое значение, найденное позднее, будет заменять ранее найденное значение". У тебя оба массива не ассоциативные, т.е. вместо пар "ключ" => "значение" идут просто числовые индексы 0 => "Имя*" и т.п. Там никакой специфики нет - номера элементов изменятся в соответствии с их порядком в новом массиве.

Date: 2009-02-24 02:34 pm (UTC)
From: [identity profile] b0gu3.livejournal.com
тут fastshot уже дал правильный ответ. предлагаю немного поправленный вариант

<?php
$emailbody='';
$fields_names = $m; // Имена переменных
$fields_values = $f; // должны быть осмысленными

foreach($fields_values as $key=>$value){
 $emailbody.=$fields_names[$key].':'.$value."\n";
// если вывод в HTML, то после \n можно добавить <br>.
}
?>

Если душа просит чего-то красивого, то можно сделать милый массивчик

<?php
$fields=array();
foreach($f as $key=>$value){
 $fields[$m[$key]]=$value;
}
?>

Если вывести результат var_dump($fields), то получится что-то вроде этого:

Array
(
'Имя*' => 'firstname',
'Фамилия*' => 'lastname',
'Отчество' => ''custom_1'
)

и т.д.

Date: 2009-02-24 03:37 pm (UTC)
From: [identity profile] sined.livejournal.com
ну вот, я все проспал. :( Разобралась? :) вобще, мне показалось, надо крутить ту часть скрипта, где письмо формируется, а не массивы объявляются. И там уже все скомпоновать в желаемом виде.

Date: 2009-02-24 05:36 pm (UTC)
From: [identity profile] hope1972.livejournal.com
Не-а, не разобралась.... я виду скрипт - бОльшую часть его понимаю.... но сама написать, хоть убей.. ну как собака...

Date: 2009-02-24 07:01 pm (UTC)
From: [identity profile] sined.livejournal.com
Ты можешь его привести целиком? Ну т.е. там можно стереть/заменить, явки, емайлы, пароли и т.п. Или поставить замок на post. Но всештаки чтобы была понятна его логика работы.
А так у тебя приведены только объявление двух массивов и какой код надо написать чтобы у тебя все заработало не очевидно. Хотя другие предлагают вполне годные решения, правда забывают о подробных комментариях. Ибо понять, что делают все эти точечки, стрелочки и скобочки тож сходу не так просто. :)

Date: 2009-02-24 07:17 pm (UTC)
From: [identity profile] hope1972.livejournal.com
Хорошо, завтра - у меня код на работе :)

January 2013

S M T W T F S
  1 2 345
6789101112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 12th, 2026 01:38 pm
Powered by Dreamwidth Studios