Как отправить данные формы на сервер?
Подскажите, как отправлять данные из html(bootstrap) формы на сервер.PHP?Laravel?Js?
По PHP и JS знаю самую самую базу,но сайт надо делать.
Напишите,пожалуйста пример. Научите чайника,заранее спасибо.
Ответы (2 шт):
Для начала тебе нужно в самой форме задать метод через который ты будешь передавать данные, в нашем случае это будет POST, так же еще есть GET но он имеет некое количество отличий например: не можете передать большое количество данных.
<form method="post">
<input name="email" type="email" placeholder="Эл. почта">
<input type="submit">
</form>
И так, мы создали форму. Обязательно задай имя для поля с помощью атрибута name="" которое хочешь передать, это нам потребуется для того чтобы определить ее в суперглобальной переменной $_POST в которую будем передавать данные.
Приступим к написанию php кода.
<?php
echo $_POST['email']; // В аргумент суперглобальной переменной вводим имя поля данные которого мы хотим получить
?>
Чуть не забыл, не забывай фильтровать входящие на сервер данные с помощью htmlspecialchars() или htmlentities() чтобы обезопасить себя от xss(межсайтового скриптинга).
Это вариант ответа @beaxs, в котором я постарался дать более широкий взгляд на некоторые вещи.
Форма в HTML:
<form method="post">
<input name="email" type="email" placeholder="Эл. почта">
<input type="submit">
</form>
У формы выбран метод POST, т. к. мы выполняем действие-изменение -- пишем данные в базу (еще есть GET, используемый для запроса данных).
name="email" -- это имя, под которым данные будут доступны при обработке POST-а на сервере.
Например в PHP -- $_POST['email']
Необходимо учесть 2 момента, связанных с безопасностью:
- SQL injection -- взлом сервера
- xss -- межсайтовый скриптинг
Нельзя вклеивать в SQL запрос данные полученные с клиента. Чтобы обезопасить от взлома сервера (SQL injection) необходимо использовать подготовленные выражения (prepare-bind-execute):
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->execute(array(':calories' => $calories, ':colour' => $colour));
Теперь про xss:
Представим, что не хакер, а обычный человек ввел в инпут трактор "Беларусь". Мы это отправили POST-ом и сохранили в базу. Потом Вытащили и вставили обратно в HTML инпут с помощью echo.
И на экране человек увидит просто трактор , т. к. <input value="трактор "Беларусь""> сломано из-за кавычек, и надо было сделать <input value="трактор "Беларусь""> -- преобразование текста в html (htmlspecialchars).
Варианты решения:
- делать преобразование сразу, как получили POST
- делать преобразование в момент echo в html
- не делать echo в html, а использовать шаблонизатор, json и т. п.
Вариант (1) простой (для уяснения) и надежный (сразу защищает от xss). Думаю, что поэтому его часто советуют.
Минус в том, что в базе будет лежать трактор "Беларусь" и это нужно учитывать, формируя pdf, экспортируя данные в другую систему и т. п.
В сложной системе мест, где данные попадают в html может быть столько же, сколько мест, где с этим html надо будет бороться.
Вариант (2), где в базе трактор "Беларусь" работает хорошо, но требует слишком высокой дисциплины.
Вариант (3), где в базе трактор "Беларусь" работает лучше всего, но требует понять изначально больше абстракций.