2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение03.10.2020, 18:48 
Здравствуйте!
Код:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Кнопка</title>
</head>
<body>
  <form>
   <p><input name="login"></p>
   <p><input type="submit"></p>
  </form>
</body>
</html>

Куда будут отравляться данные? Понятно, что на сервер. Но где конкретно введенные данные можно получить? Извините, за глупый вопрос)

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение03.10.2020, 18:58 
Никуда не будут. Гуглите атрибут action.

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение05.10.2020, 20:42 
Как упомянул kotenok gav, если Вы добавите в тэг <form> атрибут action с адресом сервера, то туда введенные данные и пойдут. Этим адресом может быть URL (URI) или ip-адрес. Например, если Вы хотите поиграться с этим внутри своего компьютера, таким ip-адресом может быть 127.0.0.1 (внутренний интерфейс, который позволяет программам общаться на одном и том же компьютере между собой).
Например, можно написать
Код:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Кнопка</title>
</head>
<body>
  <form action="http://127.0.0.1:8888">
   <p><input name="login"></p>
   <p><input type="submit"></p>
  </form>
</body>
</html>
где 8888 — это номер порта, на котором Ваш игровой сервер слушает входящие сообщения.

Ниже код локального сервера на языке C, который слушает порт 8888, принимает одно сообщение до 2 кБ и закрывается.
Код:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <locale.h>

int main()
{
  setlocale(LC_ALL,"ru_RU.UTF-8");
  int tcpSock, conn;
  socklen_t clilen;
  char buffer[2048];
  struct sockaddr_in serv_addr, cli_addr;
  ssize_t n;

  tcpSock = socket(PF_INET, SOCK_STREAM, 0);

  if (tcpSock < 0)
  {
    fprintf(stderr, u8"Ошибка открытия сокета\n");
    exit(1);
  }

  memset((void *) &serv_addr, '\0', sizeof serv_addr);
  memset((void *) &cli_addr, '\0', sizeof cli_addr);

  serv_addr.sin_family = AF_INET;
  serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
  serv_addr.sin_port = htons(8888);

  int optionEnable = 1;
  setsockopt(tcpSock, SOL_SOCKET, SO_REUSEADDR, &optionEnable, sizeof optionEnable);
  setsockopt(tcpSock, SOL_SOCKET, TCP_NODELAY, &optionEnable, sizeof optionEnable);

  if (bind(tcpSock, (struct sockaddr *) &serv_addr, sizeof serv_addr) < 0)
  {
    fprintf(stderr, u8"Ошибка связывания сокета\n");
    exit(1);
  }

  listen(tcpSock,5);
  clilen = sizeof(cli_addr);
  conn = accept(tcpSock, (struct sockaddr *) &cli_addr, &clilen);

  if (conn < 0)
  {
    fprintf(stderr, u8"Ошибка принятия соединения\n");
    exit(1);
  }

  char responseBody[] = u8"<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Успех</title></head><body><p>Вход осуществлен</p></body></html>";
  size_t bodyLength = strlen(responseBody);

  char responseHead[224] = "HTTP/1.1 200 OK\nContent-Length: %zu\nContent-Type: text/html\nConnection: Closed\n\n";
  size_t headLength = strlen(responseHead);

  if ((bodyLength / 1000000) > 0 || headLength > 139)
  {
    fprintf(stderr, u8"Слишком длинное сообщение\n");
    exit(1);
  }

  snprintf(responseHead, headLength + 5, responseHead, bodyLength);
  strcat(responseHead, responseBody);

  memset(buffer, '\0', 2048);
  n = read(conn, buffer, 2048);

  if (n < 0)
  {
    fprintf(stderr, u8"Ошибка чтения с сокета\n");
    exit(1);
  }

  for(int i = 0; i < n; ++i)
    if(!buffer[i]) buffer[i] = '\n';

  printf(u8"Текст полученного сообщения:\n%s\n", buffer);
  n = write(conn, responseHead, strlen(responseHead));

  if (n < 0)
  {
    fprintf(stderr, u8"Ошибка посылки ответа через сокет\n");
    exit(1);
  }

  shutdown(conn, 2);   
  return 0;
}

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение06.10.2020, 05:43 
Какие ужасы... kot-obormot, пишите на PHP, там это все буквально в одну строчку.

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение12.10.2020, 16:00 
Спасибо за ответы! Но у меня все еще есть вопросы. Вот например, я хочу, чтобы ко мне приходили результаты заполнения формы на электронную почту sekret@yandex.ru. Но вот они почему-то не приходят. Я просто на рабочем столе создал папку, поместил туда три файла index.html, mail.php, scrip.js

Соответствующие коды такие:

Код:
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>uniMail</title>
</head>
<body>

   <form>

      <!-- Hidden Required Fields -->
      <input type="hidden" name="project_name" value="Проверка простая">
      <input type="hidden" name="admin_email" value="sekret@yandex.ru">
      <input type="hidden" name="form_subject" value="Form Subject">
      <!-- END Hidden Required Fields -->

      <input type="text" name="Name" placeholder="You name..." required><br>
      <input type="text" name="E-mail" placeholder="You E-mail..." required><br>
      <input type="text" name="Phone" placeholder="You phone..."><br>
      <button>Send</button>

   </form>
   
   <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
   <script src="script.js"></script>

</body>
</html>


Код:
<?php

$method = $_SERVER['REQUEST_METHOD'];

//Script Foreach
$c = true;
if ( $method === 'POST' ) {

   $project_name = trim($_POST["project_name"]);
   $admin_email  = trim($_POST["admin_email"]);
   $form_subject = trim($_POST["form_subject"]);

   foreach ( $_POST as $key => $value ) {
      if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
         $message .= "
         " . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
            <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
            <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
         </tr>
         ";
      }
   }
} else if ( $method === 'GET' ) {

   $project_name = trim($_GET["project_name"]);
   $admin_email  = trim($_GET["admin_email"]);
   $form_subject = trim($_GET["form_subject"]);

   foreach ( $_GET as $key => $value ) {
      if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
         $message .= "
         " . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
            <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
            <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
         </tr>
         ";
      }
   }
}

$message = "<table style='width: 100%;'>$message</table>";

function adopt($text) {
   return '=?UTF-8?B?'.Base64_encode($text).'?=';
}

$headers = "MIME-Version: 1.0" . PHP_EOL .
"Content-Type: text/html; charset=utf-8" . PHP_EOL .
'From: '.adopt($project_name).' <'.$admin_email.'>' . PHP_EOL .
'Reply-To: '.$admin_email.'' . PHP_EOL;

mail($admin_email, adopt($form_subject), $message, $headers );



Код:
$(document).ready(function() {

   //E-mail Ajax Send
   $("form").submit(function() { //Change
      var th = $(this);
      $.ajax({
         type: "POST",
         url: "js/mail.php", //Change
         data: th.serialize()
      }).done(function() {
         alert("Thank you!");
         setTimeout(function() {
            // Done Functions
            th.trigger("reset");
         }, 1000);
      });
      return false;
   });

});


Html файл открывается, данные можно ввести, только вот кнопка send не работает и на почту ничего не приходит!

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение12.10.2020, 17:18 
Замените button на input type="submit".

-- 13 окт 2020, 01:17 --

И я порекомендовал бы заменить вам
код: [ скачать ] [ спрятать ]
Используется синтаксис PHP
$c = true;
if ( $method === 'POST' ) {

   $project_name = trim($_POST["project_name"]);
   $admin_email  = trim($_POST["admin_email"]);
   $form_subject = trim($_POST["form_subject"]);

   foreach ( $_POST as $key => $value ) {
      if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
         $message .= "
         "
. ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
            <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
            <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
         </tr>
         "
;
      }
   }
} else if ( $method === 'GET' ) {

   $project_name = trim($_GET["project_name"]);
   $admin_email  = trim($_GET["admin_email"]);
   $form_subject = trim($_GET["form_subject"]);

   foreach ( $_GET as $key => $value ) {
      if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
         $message .= "
         "
. ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
            <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
            <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
         </tr>
         "
;
      }
   }
}
на следующее:
код: [ скачать ] [ спрятать ]
Используется синтаксис PHP
$c = true;
$array = $_POST;
if ($method === 'GET')
    $array = $_GET;
$project_name = trim($array["project_name"]);
$admin_email  = trim($array["admin_email"]);
$form_subject = trim($array["form_subject"]);

foreach ( $array as $key => $value ) {
    if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
        $message .= "
         "
. ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
            <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
            <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
         </tr>
         "
;
    }
}

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение12.10.2020, 20:01 
kotenok gav в сообщении #1486839 писал(а):
Замените button на input type="submit".


Спасибо! Вот так?

код: [ скачать ] [ спрятать ]
  1. <!DOCTYPE html> 
  2. <html lang="en"> 
  3. <head> 
  4. <meta charset="UTF-8"> 
  5. <title>uniMail</title> 
  6. </head> 
  7. <body> 
  8.  
  9. <form> 
  10.  
  11. <!-- Hidden Required Fields --> 
  12. <input type="hidden" name="project_name" value="Проверка простая"> 
  13. <input type="hidden" name="admin_email" value="sekret@yandex.ru"> 
  14. <input type="hidden" name="form_subject" value="Form Subject"> 
  15. <!-- END Hidden Required Fields --> 
  16.  
  17. <input type="text" name="Name" placeholder="You name..." required><br> 
  18. <input type="text" name="E-mail" placeholder="You E-mail..." required><br> 
  19. <input type="text" name="Phone" placeholder="You phone..."><br> 
  20. <input type="submit"><br> 
  21.  
  22.  
  23.  
  24. </form> 
  25.  
  26. <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 
  27. <script src="script.js"></script> 
  28.  
  29. </body> 
  30. </html> 


Почему-то по-прежнему не приходят письма на почту мою. Спасибо за модификацию кода php, я поменял, все равно результата нет - письма не приходят.

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение13.10.2020, 20:35 
kot-obormot в сообщении #1486831 писал(а):
$("form")

Если я правильно понимаю, то это выбор элемента с айди "form", да? Тогда добавьте атрибут id="form" форме.

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение13.10.2020, 20:47 
Не совсем так, не с id = "form", просто элемент с тегом form, то есть форму.

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение13.10.2020, 21:23 
Аватара пользователя
kot-obormot
Извините, может глупый вопрос задам - а SMTP-сервер у вас поднят? Или он не требуется?

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение13.10.2020, 21:24 
Да, ошибся, извините.

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение14.10.2020, 13:07 
Emergency в сообщении #1487001 писал(а):
kot-obormot
Извините, может глупый вопрос задам - а SMTP-сервер у вас поднят? Или он не требуется?

У меня пока сайт в виде папке на компьютере с файлами. Пока что вопросы с сервером и доменом не решал. Я пока что пытаюсь немного разбираться с html и css, пока что у меня низкий уровень понимания.

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение14.10.2020, 13:10 
kot-obormot в сообщении #1486831 писал(а):
Код:
mail($admin_email, adopt($form_subject), $message, $headers );

Функция mail не будет или почти не будет работать на локальном сервере да и много где будет капризничать.
Нужно как минимум заголовки прописать вначале, хеадеры всякие Content-type: text/html;и пр. Можно сделать отправку почты через свою конкретную почту, используя библиотеку PHPMailer.

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение14.10.2020, 13:39 
Спасибо, тогда, видимо, мои эксперименты с формой нужно будет продолжить, когда будет домен и сервер!

 
 
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение19.10.2020, 23:19 
Аватара пользователя
kot-obormot в сообщении #1487068 писал(а):
Спасибо, тогда, видимо, мои эксперименты с формой нужно будет продолжить, когда будет домен и сервер!

Есть бесплатные сервисы, которые без сложных доменов и бекендов будут принимать данные в формы. То есть Вашей задачей будет лишь сделать форму, а сервис будет принимать данные для их дальнейшей обработки. Вот пример такого сервиса https://formspree.io . Бесплатный тариф конечно достаточно ограничен, но для начальных экспериментов или формы обратной связи на малопосещаемом сайте — вполне сойдет.

 
 
 [ Сообщений: 16 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group