Есть html форма с полями, которые заполняет пользователь. PHP скрипт берет информацию из этих полей и отправляет на почту инфу (пока все просто).
Задача - написать скрипт(или дописать в имеющийся), который информацию из этих полей будет загружать в XML файл и заполнять его по шаблону.
Очень хочется увидеть пример реализации, если, например, есть 2 поля (Имя, Возраст), для остальных полей я сделаю по аналогу + допишу сам остальные фичи, главное для меня - разобраться как это реализовать.
Отблагодарю $ на телефон
Пример анкеты:
<form action="send.php" method="post" onsubmit="return checkform(this);">
Ваше имя:
<input class="text" id="name" style="width: 115px;" size="18" name="name" />
Ваш возраст:
<input class="text" id="vozrast" style="width: 30px;" maxlength="2" size="10" name="vozrast" />
<input type="submit" class="button3" lang="ru" value="Отправить" xml:lang="ru" />
Пример send.PHP-файла:
<?php
$info = sprintf("
Имя: %s
Возраст: %s", $_POST['name'],$_POST['vozrast']);
$to = "@mail.ru"; //почта
$title = sprintf("Анкета");
mail($to,$title,$info);
header("Location: index.html"); // рекдирект
?>
Шаблон xml файла (Элемент <requests> - контейнер для всех заявок, Элемент <request> - одна заявка)
<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<requests>
<name>Имя</name>
<age>30</age>
</request>
</requests>
Заранее спасибо за помощь!
Спустя 9 минут, 13 секунд (28.10.2010 - 17:02) Johny написал(а):
Задача в том, чтобы данные из формы отправлялись в xml и отправлялись по почте?Причём чтобы xml каждый раз дополнялся, а не переписывался? Или просто отправлялись данные, а потом всё просто записывалось в xml и дополнялось?
Спустя 13 минут, 13 секунд (28.10.2010 - 17:15) psynick написал(а):
Можно чтобы заполнялось все до отправки, можно после, без разницы. Главное чтобы xml файл заполнялся (дополнялся) новой информацией и она по прежнему отправлялась на мейл, как это делается сейчас.
Спустя 4 часа, 26 минут, 4 секунды (28.10.2010 - 21:41) linker написал(а):
requests.xml
<?xml version="1.0" encoding="UTF-8" ?>
<requests>
<request>
<name>Имя</name>
<age>30</age>
</request>
</requests>
<?phpДенег не надо, если есть замечания или еще что-то пиши.
$info = sprintf("
Имя: %s
Возраст: %s", $_POST['name'],$_POST['vozrast']);
$to = "@mail.ru"; //почта
$title = sprintf("Анкета");
mail($to,$title,$info);
$Xml = new DomDocument('1.0', 'utf-8');
$Xml->load('requests.xml');
$RequestNode = $Xml->createElement('request');
$NameNode = $Xml->createElement('name', $_POST['name']);
$RequestNode->appendChild($NameNode);
$AgeNode = $Xml->createElement('name', $_POST['vozrast']);
$RequestNode->appendChild($AgeNode);
$Xml->documentElement->appendChild($RequestNode);
$Xml->save('requests.xml');
header("Location: index.html"); // рекдирект
?>
Спустя 13 часов, 6 минут (29.10.2010 - 10:47) psynick написал(а):
Написал скрипт, стал проверять - вылезает ошибка
Цитата |
Warning: DOMDocument::load() [function.DOMDocument-load]: Input is not proper UTF-8, indicate encoding ! Bytes: 0xC8 0xEC 0xFF 0x3C in /home/cred/***.com/docs/requests.xml, line: 4 in /home/cred/***.com/docs/potreb.php on line 31 |
На почту все отправляется, в requests.xml не записывается.
requests.xml
<?xml version="1.0" encoding="UTF-8" ?>
<requests>
<request>
<name>Имя</name>
</request>
</requests>
Линия30: $Xml = new DomDocument('1.0', 'utf-8');
Линия31: $Xml->load('requests.xml');
Линия32: $RequestNode = $Xml->createElement('request');
Линия38: $Xml->documentElement->appendChild($RequestNode);
Спустя 1 день, 23 часа, 33 минуты, 31 секунда (31.10.2010 - 11:21) linker написал(а):
Вся проблема в кодировке, меняй кодировку всего и вся на utf-8 (без BOM) и все будет норм.
Спустя 1 час, 34 минуты, 54 секунды (31.10.2010 - 12:56) psynick написал(а):
Попробовал сделать упрощенный вариант - при нажатии на кнопку отправить срабатывает пхп-скрипт который Вы, linker, написали выше, и XML файл заполняется из полей. Все равно не работает
Кодировки менял.
Вот текст ошибок:
Кодировки менял.
Вот текст ошибок:
Цитата |
Warning: DOMDocument::load() [function.DOMDocument-load]: String not started expecting ' or " in /home/gen/gen.com/docs/home/requests.xml, line: 1 in /home/gen/gen.com/docs/home/home.php on line 4 Warning: DOMDocument::load() [function.DOMDocument-load]: Malformed declaration expecting version in /home/gen/gen.com/docs/home/requests.xml, line: 1 in /home/gen/gen.com/docs/home/home.php on line 4 Warning: DOMDocument::load() [function.DOMDocument-load]: Blank needed here in /home/gen/gen.com/docs/home/requests.xml, line: 1 in /home/gen/gen.com/docs/home/home.php on line 4 Warning: DOMDocument::load() [function.DOMDocument-load]: parsing XML declaration: '?>' expected in /home/gen/gen.com/docs/home/requests.xml, line: 1 in /home/gen/gen.com/docs/home/home.php on line 4 Warning: DOMDocument::load() [function.DOMDocument-load]: Input is not proper UTF-8, indicate encoding ! Bytes: 0xF6 0xE5 0xEB 0xFC in /home/gen/gen.com/docs/home/requests.xml, line: 6 in /home/gen/gen.com/docs/home/home.php on line 4 Fatal error: Call to a member function appendChild() on a non-object in /home/gen/gen.com/docs/home/home.php on line 31 |
home.php
<?php
$Xml = new DomDocument('1.0', 'utf-8');
$Xml->load('requests.xml');
$RequestNode = $Xml->createElement('request');
$NameNode = $Xml->createElement('name', $_POST['name']);
$RequestNode->appendChild($NameNode);
$AgeNode = $Xml->createElement('vozrast', $_POST['vozrast']);
$RequestNode->appendChild($AgeNode);
$Xml->documentElement->appendChild($RequestNode);
$Xml->save('requests.xml');
header("Location: index.html"); // рекдирект
?>
Линия4: $Xml->load('requests.xml');
Линия31: $Xml->documentElement->appendChild($RequestNode);
XML
<?xml version="1.0" encoding="UTF-8" ?>
<requests>
<request>
<name>Имя</name>
<age>30</age>
</request>
</requests>
Спустя 4 часа, 38 минут (31.10.2010 - 17:34) linker написал(а):
Еще раз повторяю, пересохрани скрипт в кодировке utf-8, пересохранит XML в кодировке utf-8. Еще не плохо было бы вообще все на utf-8 перевести, а то походу и данные приходят в cp-1251.
Спустя 17 часов, 44 минуты, 6 секунд (2.11.2010 - 11:18) psynick написал(а):
Все заработало, исправил кодировки и нашел еще несколько ошибок. Большое спасибо.
Спустя 5 часов, 6 минут, 10 секунд (2.11.2010 - 16:24) psynick написал(а):
Появились 2 вопроса:
$RequestNode = $Xml->createElement('request'); - в XML выглядит как
Как сделать, чтобы создавалось
И второй вопрос:
Все данные в XML файле записываются в одну строчку, как сделать так, чтобы каждая запись была с новой строки?
Еще раз заранее спасибо!
$RequestNode = $Xml->createElement('request'); - в XML выглядит как
<request></request>
Как сделать, чтобы создавалось
<request reqid='id из поля в анкете или любой другой id'></request>
И второй вопрос:
Все данные в XML файле записываются в одну строчку, как сделать так, чтобы каждая запись была с новой строки?
Еще раз заранее спасибо!
Спустя 35 минут, 20 секунд (2.11.2010 - 16:59) linker написал(а):
$RequestNode = $Xml->createElement('request');там надо играться параметрами объекта $Xml. Сейчас не успеваю рассказать, до дома доеду и напишу.
$RequestNode->setAttribute('reqid', $Id);
Спустя 3 часа, 9 минут, 41 секунда (2.11.2010 - 20:09) linker написал(а):
Смотри свойства
$Xml->preserveWhiteSpace = true;
и
$Xml->formatOutput = true;
$Xml->preserveWhiteSpace = true;
и
$Xml->formatOutput = true;
Спустя 3 часа, 10 минут, 8 секунд (2.11.2010 - 23:19) psynick написал(а):
Кажется понял, спасибо еще раз
Спустя 5 дней, 15 часов, 50 минут, 24 секунды (8.11.2010 - 15:10) psynick написал(а):
Так и не разобрался с параметрами. Все данные в XML файле записываются в одну строчку, что я только не пробовал уже
Спустя 8 минут, 44 секунды (8.11.2010 - 15:18) linker написал(а):
Попробуй еще так
$Xml = new DomDocument('1.0', 'utf-8');
$Xml->formatOutput = true;
$Xml->preserveWhiteSpace = false;
$Xml->load('requests.xml');
Спустя 3 минуты, 30 секунд (8.11.2010 - 15:22) psynick написал(а):
Без изменений
Спустя 41 секунда (8.11.2010 - 15:22) linker написал(а):
А оно реально надо с красивостями?
Спустя 3 минуты, 37 секунд (8.11.2010 - 15:26) psynick написал(а):
Да, xml будет обрабатываться в полу-автоматическом режиме, я не смогу его модерировать )))
Я читал что достаточно
$Xml->formatOutput = true;
перед сохранением. Но все равно не заработало.
Я читал что достаточно
$Xml->formatOutput = true;
перед сохранением. Но все равно не заработало.
Спустя 6 минут, 7 секунд (8.11.2010 - 15:32) linker написал(а):
Внимание, я не зря в примере установил эти параметры перед методом load(), ибо это важно. Должно быть так
<?php
$Xml = new DomDocument('1.0', 'utf-8');
$Xml->formatOutput = true;
$Xml->preserveWhiteSpace = false;
$Xml->load('requests.xml');
$RequestNode = $Xml->createElement('request');
$NameNode = $Xml->createElement('name', $_POST['name']);
$RequestNode->appendChild($NameNode);
$AgeNode = $Xml->createElement('vozrast', $_POST['vozrast']);
$RequestNode->appendChild($AgeNode);
$Xml->documentElement->appendChild($RequestNode);
$Xml->save('requests.xml');
header("Location: index.html"); // рекдирект
?>
Спустя 1 минута, 47 секунд (8.11.2010 - 15:34) psynick написал(а):
Я понимаю, я пробовал и так и так. Уже уйму вариантов перебрал с этими параметрами.
Спустя 1 минута, 19 секунд (8.11.2010 - 15:35) linker написал(а):
У меня работает, проверил специально.
Спустя 3 минуты, 25 секунд (8.11.2010 - 15:39) psynick написал(а):
Прошу прощения, проблема во мне
А точнее в моем редакторе. Целое утро возьни, а нужно было всего лишь открыть блокнотом. Все отлично, огромное спасибо за помощь!
А точнее в моем редакторе. Целое утро возьни, а нужно было всего лишь открыть блокнотом. Все отлично, огромное спасибо за помощь!