Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: передача данных из html формы и добавление(запись) их в имеющийся на хостинге xml файл при помощи перл  (Прочитано 8450 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
sergozuben
Гость
« : 11-08-2023 20:41 » 

Доброго времени суток парни!
Хотел спросить у знающих совета, как написать рабочий код на Perl для добавления соответственно узлов с данными в готовый xml файл. Просмотрел много примеров, но проблема остается... Ни РНР не хочет работать, ни то что я написал на Perl...
Язык серьезный и очень много непонятного, особенно то, почему он не запускается на хостинге, на локальном сервере при нажатии на кнопку формы SUBMIT, только запускается в приложении Perl Express 2.4.5 и генерирует пустой или наполненный не теми данными, которые я ему пытаюсь передать...
суть примера простая как три копейки

переменные текстовых полей:
$login
$password
$user
$e-mail

<?xml version="1.0" encoding= "UTF-8" ?>
<users>
<user id1="Иванов" password= "148xxxxxx" e-mail="xxx@xxx.com"></user id1>
<user id2="Петров" password= "447yyyyyy" e-mail="yyy@yyy.com"></user id2>
<user id3="Сидоров" password= "671zzzzzz" e-mail="zzz@zzz.com"></user id3>
</users>


# В виде такой структуры, где последующие данные (строка <userid+1=....) должны из формы добавляться в этот XML файл...

Я не могу создать 100 %-но работающий код, чтобы с уверенностью начать его тестировать как на локальном сервере,, так и на хостинге. Мне до сих пор пока не понятно, делать скрипту расширение .рl или .cgi, чтобы он запускался и создавал или редактировал этот xml на хостинге в нужной мне папке...
Если кто откликнется помочь - очень жду...

Заранее благодарю за подсказку...
(я выбрал для этой задачи Perl, хотя не важно какой язык, лишь бы он работал на любом хостинге)
Записан
sergozuben
Гость
« Ответ #1 : 11-08-2023 20:46 » 

Например у меня есть такой простой скриптик, котрый как не изменяй, никак не хочет считывать внешние переменые которые я ему отправляю методом пост, но он охотно создает файлик с тем, что в нем уже есть...

#!c:/Server/perl/bin/perl
my $file= "joke.xml";
my $login= '$login';
my $password= '$password';
my $user= 'user';
open(FILE,">$file");
print FILE ("login\n","user\n","password\n");
close(FILE);
print "xml File Created successfully\n";


есть также на РНР скриптик, который красиво написан и ничего на хостинге создавать не собирается...


<?php
$dom = new domDocument("1.0", "utf-8"); // Создаём XML-документ версии 1.0 с кодировкой utf-8
$root = $dom->createElement("users"); // Создаём корневой элемент
$dom->appendChild($root);
$users = $_POST['user']; // Имена пользователей
$logins = $_POST['login']; // Логины пользователей
$passwords = $_POST['pass']; // Пароли пользователей
for($i = 0; $i < count($logins); $i++) {
$id = $i + 1; // id-пользователя
$user = $dom->createElement("user"); // Создаём узел "user"
$user->setAttribute("id", $id); // Устанавливаем атрибут "id" у узла "user"
$login = $dom->createElement("login", $logins[$i]); // Создаём узел "login" с текстом внутри
$password = $dom->createElement("password", $passwords[$i]); // Создаём узел "password" с текстом внутри
$user->appendChild($login); // Добавляем в узел "user" узел "login"
$user->appendChild($password);// Добавляем в узел "user" узел "password"
$root->appendChild($user); // Добавляем в корневой узел "users" узел "user" }
$dom->save("users.xml"); // Сохраняем полученный XML-документ в файл
?>
Записан
sergozuben
Гость
« Ответ #2 : 11-08-2023 21:05 » 

Необязательно парсить документ как XML, и чудно с ним чудить, достаточно чтобы скрипт вставлял в предпоследнюю строку, перед закрывающим тегом, именно тот узел, какой будет в переменной поля ввода.
Идея такая. У меня флеш-форма, текстовые поля со своими именами/переменными,
создана предварительно строка для вставки в файл, например:
   "<user id3=" + "$имя_переменной_1.text" +  "$имя_переменной_2.text" +  "$имя_переменной_3.text" + "</user id1>"
Методом POST передаю скрипту на хостинге, (страница формы также находится на том же хостинге), скрипт вносит строку в файл и сохраняет его.
Тут необязательно логин и пароль, тут может быть любые данные в строковом виде, потому что флеш очень хорошо читает из XML...
Есть у кого-то оригинальные идеи на этот счет?
Заранее спасибо.
P.S. Хотел делать на питоне, оказалось не все хостинги поддерживают питоню но CGI скрипты такие как Perl должны...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 12-08-2023 08:05 » 

есть также на РНР скриптик, который красиво написан и ничего на хостинге создавать не собирается...


потому что с ошибкой
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sergozuben
Гость
« Ответ #4 : 12-08-2023 18:37 » 

в каком месте если не секрет?...
Записан
sergozuben
Гость
« Ответ #5 : 12-08-2023 18:40 » 

Он мог бы и пустой файл создать, но не хочет... Скрипт этот я взял на каком-то известном сайте, где все все знают и всех учат за деньги...
« Последнее редактирование: 12-08-2023 18:42 от sergozuben » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 13-08-2023 00:14 » 

Цитата
my $login= '$login';
Неужели это "подставление методом POST"? Это просто присвоение переменной строки '$login'.
Нужно следовать интерфейсу, который предоставляет сервер. Perl Express — не сервер, а просто IDE. В самом примитивном случае будет использован интерфейс CGI: основные данные передаются через переменные окружения (напр., $ENV{QUERY_STRING}), "данные POST" еще не интерпретированы и их надо считать из STDIN, а ответ, предваряемый заголовком, отправить в STDOUT. Чтобы не разбирать руками используют готовые модули с metacpan.org. Более распространенный интерфейс — PSGI.
А вообще, если пытаться писать на "серьезном языке", то стоит начинать с обучающей литературы. Например, Learning Perl и Perl Programming. Обе книги доступны в сети в переводе.
« Последнее редактирование: 13-08-2023 00:32 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
sergozuben
Гость
« Ответ #7 : 13-08-2023 13:47 » 

Очень признателен за ответ,
начав изучать Perl в рамках CGI ровно 6 дней назад, как только я решил с ним работать в определенных задачах, в первую очередь я купил разные книги, разных авторов в формате PDF и читаю...изучаю... однако очень сложно опираться на то, что в них изложено, так как многие файлы сделаны при помощи OCR, как я понимаю и в кодах присутствуют опечатки. Perl очень требовательный язык и не прощает таких ошибок.
Меня интересует практическая сторона дела и в данном случае я намерен найти решение, оперевшись, также и на ваш совет...
Подскажите, какая IDE лучше всего подходит для разработки? Я установил Strawberry 5.32.1.1 и ActivePerl 5.24  плюс Perl_Express 2.4.5 (У меня Win_7x64), Апач 24
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 13-08-2023 17:47 » 

Не стоит изучать по устаревшим книгам. Видел я этот Perl CGI еще в начале нулевых, бесполезная книга. Кроме перечисленных мной двух, есть еще Modern Perl. Все, только эти три книги актуальны, все остальное безнадежно устарело. Опытные разработчики пользуются документацией к модулям, читают код, ну и гуглят. Есть чат "Modern::Perl" в телеге, но с таким уровнем не советую соваться туда, заклюют. Есть еще чаты людей, изгнанных из "Modern::Perl", никогда там не участвовал.

Active Perl — мертв, не поддерживается. Используй Strawberry Perl. Это все, что есть под винду.
Сами разработчики Perl в 99.99% случаев пишут под Linux.

Если хочется попроще и побыстрее поиграться в web, то смотри Mojo::Lite и все, на что его доки будут ссылаться. И про XML забудь, этим только джависты пользуются. В ходу чаще JSON. Кто-то любит YAML. Но сперва надо учить язык. И для web надо изучать сам протокол HTTP. См. rfc2616.
« Последнее редактирование: 13-08-2023 17:50 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
sergozuben
Гость
« Ответ #9 : 14-08-2023 20:02 » 

Благодарю за наводку...
В веб я начинал играться еще в 2000 году, в 2010 забросил. Теперь  начинаю снова... Многое что изменилось за то время... Раньше любые скрипты на РНР работали на хостингах, теперь много ограничений... В данный момент  мне нужен рабочий скрипт ("движок") для процесса записи в файл и создания директорий. поэтому я выбрал Perl...
Поищу этот Modern Perl...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 15-08-2023 09:21 » 

теперь много ограничений...
Бред
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 15-08-2023 09:43 » 

PHP всегда настраивали так, чтобы нельзя было навредить другим клиентам shared hosting. В нынешних реалиях проще арендовать небольшой выделенный сервер (он виртуальный) и делать там, что хочешь. Правда, это уже требует знаний и опыта администрирования.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
sergozuben
Гость
« Ответ #12 : 16-08-2023 23:07 » 

У меня есть хостинг на котором у меня CMS работает, но только ее скрипты функционируют. дополнительные скрипты на нем не хотят работать. Перейду на другой. там хоть что-то можно свое поставить типа джанго итд. Однако задача у меня другая, создать скрипт-движок для изменения конфига в xml файле. Допустим есть форма, которая имеет редактируемые поля ввода, где установлены  значения/названия для определенных элементов. Эти первичные данные находятся в XML формате. Я редактирую данные (например название продукта или цену) и нажимаю кнопку сохранить. После этого (возьмем случай на 50 строк) весь текст в формате XML либо в URL кодировке отправляется скрипту, тот его принимает и сохраняет в файл с расширением XML и кодировке UTF-8.

Примерно по такому сценарию.

Ниже я сделал "железку" тестировщик скрипта, где могу отправлять из двух полей ввода две строки произвольных данных серверному скрипту на РНР и  Perl. В верхнем окне я получаю ответ от сервера.

На картинке показано что скрипт кривой и никак не обработан сервером, тот вернул ответ в виде текста из РНР файла (тестировалось соединение с базой на локальном сервере )

* 2023-08-16_16-40-49.png (100.07 Кб - загружено 108 раз.)
« Последнее редактирование: 16-08-2023 23:19 от sergozuben » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 16-08-2023 23:57 » 

Отправлять все строки из страницы в скрипт при только одной отредактированной — не лучшее решение. Если строку можно как-то идентифицировать (уникальное поле, уникальная комбинация полей, номер строки), лучше послать только ее. Скрипту надо прочесть весь файл, заменить одну строку и записать назад. Надо бы подходящий модуль для этого найти: https://metacpan.org/search?size=20&q=xml
Голова кругом. И все такое старое. Но, сдается мне, проще вот этот: https://metacpan.org/pod/Mojo::DOM
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
sergozuben
Гость
« Ответ #14 : 17-08-2023 00:05 » 

При попытке создать XML на РНР выдает ошибку по функции count()

(....На скрине во вложении видно....)


Наверное автор скрипта не так решил массив или цикл задать для переменных (в РНР я не очень)

* 2023-08-17_03-00-37.png (114.41 Кб - загружено 117 раз.)
« Последнее редактирование: 17-08-2023 00:08 от sergozuben » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 17-08-2023 01:53 » 

$logins = $_POST['login']; // Логины пользователей

for($i = 0; $i < count($logins); $i++) {

Наверно, если читать текст ошибки, он хочет сказать, что $logins — не массив. Чтобы PHP сделал тут массив, нужно передавать login в урле так: login[]=...
« Последнее редактирование: 17-08-2023 01:55 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 17-08-2023 08:27 » 

чистый бред
начните работать с простыми формами.

Зачем там массив не понятно
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 17-08-2023 10:57 » 

Слав, ну, основательно изучать желание не видно, в итоге получается как всегда. Если человек ценит свое время, он просто наймет кого-то для написания программы, что займет много меньше времени. Если хочется помучиться, то никто не запрещает.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
sergozuben
Гость
« Ответ #18 : 17-08-2023 21:58 » 

Данный скрипт принимает URL кодированную строку
Похожая схема скрипта у известного программиста Гурского, автора многих  практических обучающих книг.(пример передачи данных из флеш-формы скрипту для последующей отправки на мыло, до 2010 года это точно работало... сейчас не работает...)

Пример скрипта от еще одного предпринимателя, автора вышеуказанного кода:

<?php
/*
вставьте ваш е-мейл адрес сюда
*/
$mymail = "edapskov@yandex.ru";
/*
проверяем-отправляем
*/
if(isset($_POST['sender']) && isset($_POST['email']) && isset($_POST['theme']) && isset($_POST['letter'])){
   $sender = $_POST['sender'];
   $email = $_POST['email'];
   $theme = $_POST['theme'];
   $letter = $_POST['letter'];
   $headers = "MIME-Version: 1.0\r\n";
   $headers .= "Content-type: text/html; charset=utf-8\r\n";
   $headers .= "From: ".$sender." <".$email.">\r\n";
   $success = mail($mymail, $theme, $letter, $headers);
   if($success) {
      echo "status=ok&mes=Сообщение успешно отправлено.";
   } else {
      echo "status=no&mes=Не удалось отправить сообщение.";
   }
}else{
   echo "status=no&mes=Отсутствуют необходимые данные.";
}
?>



Так что ошибка не в том, что переменная $login которая принимает значение из глобального массива $_POST, (где хранится значение Логин полученное из флеш-формы), ошибка в другом месте, и я догадываюсь где, если немножко порезать тот код, переписать, то все получится... А вам советую зарабатывать в тех местах, где реально пахнет деньгами, а не такими задачками частного порядка как у меня...
 





« Последнее редактирование: 17-08-2023 22:15 от sergozuben » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 18-08-2023 07:36 » 

Данный скрипт принимает URL кодированную строку
Похожая схема скрипта у известного программиста Гурского, автора многих  практических обучающих книг.(пример передачи данных из флеш-формы скрипту для последующей отправки на мыло, до 2010 года это точно работало... сейчас не работает...)

Пример скрипта от еще одного предпринимателя, автора вышеуказанного кода:

<?php
/*
вставьте ваш е-мейл адрес сюда
*/
$mymail = "edapskov@yandex.ru";
/*
проверяем-отправляем
*/
if(isset($_POST['sender']) && isset($_POST['email']) && isset($_POST['theme']) && isset($_POST['letter'])){
   $sender = $_POST['sender'];
   $email = $_POST['email'];
   $theme = $_POST['theme'];
   $letter = $_POST['letter'];
   $headers = "MIME-Version: 1.0\r\n";
   $headers .= "Content-type: text/html; charset=utf-8\r\n";
   $headers .= "From: ".$sender." <".$email.">\r\n";
   $success = mail($mymail, $theme, $letter, $headers);
   if($success) {
      echo "status=ok&mes=Сообщение успешно отправлено.";
   } else {
      echo "status=no&mes=Не удалось отправить сообщение.";
   }
}else{
   echo "status=no&mes=Отсутствуют необходимые данные.";
}
?>



Так что ошибка не в том, что переменная $login которая принимает значение из глобального массива $_POST, (где хранится значение Логин полученное из флеш-формы), ошибка в другом месте, и я догадываюсь где, если немножко порезать тот код, переписать, то все получится... А вам советую зарабатывать в тех местах, где реально пахнет деньгами, а не такими задачками частного порядка как у меня...
 







не поверите
if (isset($_POST['sender'],$_POST['email'],$_POST['theme'],$_POST['letter']){
так что тут не про зарабатывать..
И от вас денег не просили, а просто ткнули мордойлица куда смотреть и куда бежать
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Люсь
Команда клуба

ru
Offline Offline
Пол: Женский

« Ответ #20 : 18-08-2023 21:12 » 

Просто чувак не вкурил, куда попал
Записан

Посторонним просьба не беспокоить!
-------------------------------------------------
O (I) Rh +
sergozuben
Гость
« Ответ #21 : 19-08-2023 02:11 » 

Вот, господа программисты, чайник по РНР (то бишь я) взял ножницы, напильник, и почикал требуемый код, внесс свои идеи...

Скрипт на локальном хосте выдает XML в виде некрасивой, неформатированной строки, но первая задача решена...

Дальше любой может посредством изменения и добавления переменных регулировать состав XML, названия узлов и атрибутов... и пользовать...

<?php
$dom = new domDocument("1.0", "UTF-8"); // Создаём XML-документ версии 1.0 с кодировкой utf-8
$root = $dom->createElement("users"); // Создаём корневой элемент
$dom->appendChild($root);

$names = $_POST['user']; // Имена пользователей
$logins = $_POST['login']; // Логины пользователей
$passwords = $_POST['password']; // Пароли пользователей
$date = date("d/m/Y_H:i", time() + 3 * 60 * 60);

$user = $dom->createElement("user"); // Создаём узел "user"
$user->setAttribute("date", $date); // Устанавливаем атрибут "id" у узла "user"
$user->setAttribute("name", $names); // Устанавливаем атрибут "name" у узла "user"
$login = $dom->createElement("login", $logins); // Создаём узел "login" с текстом внутри
$password = $dom->createElement("password", $passwords); // Создаём узел "password" с текстом внутри
$user->appendChild($login); // Добавляем в узел "user" узел "login"
$user->appendChild($password);// Добавляем в узел "user" узел "password"
$root->appendChild($user); // Добавляем в корневой узел "users" узел "user"

$dom->save("../users.xml"); // Сохраняем полученный XML-документ в файл
?>

выходной файл получается такой:

?xml version="1.0" encoding="UTF-8"?>
<users><user date="19/08/2023_05:01" name="Иванов"><login>Ваня</login><password>47егпоу3</password></user></users>



Если господа знающие программисты кинут подсказку, как мне отформатировать по красоте готовый файл XML  и как можно добавлять блоки в файл не перезаписывая его, буду скромно вам признателен...

?xml version="1.0" encoding="UTF-8"?>
<users>
    <user date="19/08/2023_05:01" name="Иванов">
    <login>Ваня</login>
    <password>47егпоу3</password>
    </user>
</users>



То же самое я хотел на Perl сделать, но практической информации маловато...

(знание actionscript 2.0 помогает... А вообще-то чувак думал, что он попал на форум творческих личностей... Ошибся?)
 
« Последнее редактирование: 19-08-2023 02:21 от sergozuben » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 19-08-2023 02:22 » 

sergozuben, ты не обижайся, но нам твои творения разбирать никакого интереса нет. Никакого творчества в этом нет. Что могли, подсказали. Теперь давай сам.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #23 : 19-08-2023 11:35 » new

как мне отформатировать по красоте готовый файл XML
Что? нет методов или нам надо назвать их?

и как можно добавлять блоки в файл не перезаписывая его
Как можно в файл что-то добавить внутрь не перезаписывая его?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines