2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение03.10.2020, 18:48 


27/09/19
189
Здравствуйте!
Код:
<!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 


21/05/16
4292
Аделаида
Никуда не будут. Гуглите атрибут action.

 Профиль  
                  
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение05.10.2020, 20:42 


27/06/20
337
Как упомянул 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 


21/05/16
4292
Аделаида
Какие ужасы... kot-obormot, пишите на PHP, там это все буквально в одну строчку.

 Профиль  
                  
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение12.10.2020, 16:00 


27/09/19
189
Спасибо за ответы! Но у меня все еще есть вопросы. Вот например, я хочу, чтобы ко мне приходили результаты заполнения формы на электронную почту 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 


21/05/16
4292
Аделаида
Замените 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 


27/09/19
189
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 


21/05/16
4292
Аделаида
kot-obormot в сообщении #1486831 писал(а):
$("form")

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

 Профиль  
                  
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение13.10.2020, 20:47 


02/05/19
396
Не совсем так, не с id = "form", просто элемент с тегом form, то есть форму.

 Профиль  
                  
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение13.10.2020, 21:23 
Аватара пользователя


07/03/16

3167
kot-obormot
Извините, может глупый вопрос задам - а SMTP-сервер у вас поднят? Или он не требуется?

 Профиль  
                  
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение13.10.2020, 21:24 


21/05/16
4292
Аделаида
Да, ошибся, извините.

 Профиль  
                  
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение14.10.2020, 13:07 


27/09/19
189
Emergency в сообщении #1487001 писал(а):
kot-obormot
Извините, может глупый вопрос задам - а SMTP-сервер у вас поднят? Или он не требуется?

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

 Профиль  
                  
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение14.10.2020, 13:10 


15/11/15
1080
kot-obormot в сообщении #1486831 писал(а):
Код:
mail($admin_email, adopt($form_subject), $message, $headers );

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

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


27/09/19
189
Спасибо, тогда, видимо, мои эксперименты с формой нужно будет продолжить, когда будет домен и сервер!

 Профиль  
                  
 
 Re: Вопрос по простой кнопке отправки данных на сервер. (html)
Сообщение19.10.2020, 23:19 
Аватара пользователя


19/10/20
16
kot-obormot в сообщении #1487068 писал(а):
Спасибо, тогда, видимо, мои эксперименты с формой нужно будет продолжить, когда будет домен и сервер!

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group