Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Имитация POST формы с данными пользователя (КАК?) (https://javascript.ru/forum/misc/42465-imitaciya-post-formy-s-dannymi-polzovatelya-kak.html)

wmag 27.10.2013 21:57

Имитация POST формы с данными пользователя (КАК?)
 
Есть форма, в которой некоторое кол-во строк с различной информацией о юзере.
Можно конечно ждать когда он все заполнит и нажмет кнопку "отправить", но хочется сразу, как только он переходит к следующей строке отправлять всю форму обрабатывающему PHP скрипту.

ЗАЧЕМ?

ну на случай, когда пользователь что-то ввел, а потом решил полазить по другим страницам, не закончив заполнять форму. Или просто закрыл страницу, а потом открыл. А так же в этой форме передается код заказа для магазина.

Вообщем то идея проста. Думаю уже подобное делали.

Я решил идти по такому пути: при загрузке страницы налету проверяем есть ли информация в сессии, если есть пишем значения, если нет - пустые поля.

Вопрос у меня такой: Как передать данные из формы в PHP файл методом POST так же как они передаются при нажатии кнопки "Submit"


кому интересно, так выглядит форма:

Код:

<form name="cardbox" action="index.php" method="post">
                        <input type="hidden" id="orderlist" name="orderlist" placeholder="Here is your order - don't change it" value="<?php if (isset($_SESSION['orderlist'])) {print ($_SESSION['orderlist']);}?>"></td></tr>
            <tr><td>Enter your name:</td><td><input type="textarea" name="name" placeholder="Enter your or receiver name" value="<?php print ($_SESSION['name'])?>"></td></tr>
            <tr><td>State:</td><td><input type="textarea" name="state" placeholder="Enter state" value="<?php print ($_SESSION['state'])?>"></td></tr>
            <tr><td>City:</td><td><input type="textarea" name="city" placeholder="City or village" value="<?php print ($_SESSION['city'])?>"></td></tr>
            <tr><td>Street:</td><td><input contenteditable="false" type="textarea" name="street" placeholder="Name of your street" value="<?php print ($_SESSION['street'])?>"></td></tr>
            <tr><td>Address:</td><td><input type="textarea" name="adress" placeholder="Type some additional details: house N, apartaments, etc..." value="<?php print ($_SESSION['adress'])?>"></td></tr>
            <tr><td>Zip code / Post code:</td><td><input type="zip" pattern="[0-9]{3,9}" placeholder="Only numbers '0-9'" name="zip" value="<?php print ($_SESSION['zip'])?>"></td></tr>
            <tr><td>Mobile:</td><td><input type="textarea" name="mobile" placeholder="Your mobile #" value="<?php print ($_SESSION['mobile'])?>"></td></tr>
            <tr><td colspan="2" text-align="center">        <input type="submit" name="submit" class="submit" value="Click to Order"></td></tr>
            </form>

а так выглядит PHP файл: (ну его первая версия, потом поменяю, главное что в сессию данные пишутся)

Код:

    if (isset($_POST["name"]))
    {
        $_SESSION['name'] = $_POST["name"];
    }

    if (isset($_POST["mobile"]))
    {
        $_SESSION['mobile'] = $_POST["mobile"];
    }
    if (isset($_POST["orderlist"]))
    {
        $_SESSION['orderlist'] = $_POST["orderlist"];

    }

    if (isset($_POST["city"]))
    {
        $_SESSION['city'] = $_POST["city"];
    }

    if (isset($_POST["street"]))
    {
        $_SESSION['street'] = $_POST["street"];
    }

    if (isset($_POST["adress"]))
    {
        $_SESSION['adress'] = $_POST["adress"];
    }

    if (isset($_POST["zip"]))
    {
        $_SESSION['zip'] = $_POST["zip"];

    }
    if (isset($_POST["state"]))
    {
        $_SESSION['state'] = $_POST["state"];

    }


wmag 27.10.2013 23:45

нет-нет, куки принципиально будут использоваться ИСКЛЮЧИТЕЛЬНО для хранения номера сессии, не больше и не меньше.

да и вопрос не только про "решение, что б работало"...

просто хочу научится - буду так уметь - буду уже много уметь (мне главное понять принцип передачи данных)

wmag 28.10.2013 01:00

Цитата:

Сообщение от Poznakomlus (Сообщение 278352)
простите а зачем его хранить?
после окончании сессии чистильщик должен удалить данные
я предложил вариант с куками из-за того, что можно значительно дольше по времени в них хранить данные и сохраняются они у пользователя.
И с ними можете работать так же из js. http://learn.javascript.ru/cookie
По отправке post скинул ссылку там все понятно.
И когда принимает post всегда проверяйте его на соответствие нужным данным

ну как и многих нормальных проектов, ПОТОМ я буду хранить номер сессии в куках, т.к. сессии и все данные будут хранится в БД. (все это для статистики и там я их могу обрабатывать в отличии от кук пользователя, до которых мне в общем то дела нет)

Можно увидеть как выглядит action на "unfocus" элемента
и команда на POST значений в JS (без query)

ruslan_mart 28.10.2013 05:23

Цитата:

Сообщение от wmag
if (isset($_POST["name"]))
{
$_SESSION['name'] = $_POST["name"];
}

if (isset($_POST["mobile"]))
{
$_SESSION['mobile'] = $_POST["mobile"];
}
if (isset($_POST["orderlist"]))
{
$_SESSION['orderlist'] = $_POST["orderlist"];

}

if (isset($_POST["city"]))
{
$_SESSION['city'] = $_POST["city"];
}

if (isset($_POST["street"]))
{
$_SESSION['street'] = $_POST["street"];
}

if (isset($_POST["adress"]))
{
$_SESSION['adress'] = $_POST["adress"];
}

if (isset($_POST["zip"]))
{
$_SESSION['zip'] = $_POST["zip"];

}
if (isset($_POST["state"]))
{
$_SESSION['state'] = $_POST["state"];

}

А не проще?

$_SESSION = $_POST;

juser367 28.10.2013 13:47

Ничего в сессию писать не надо тупо value="<?=@htmlspecialchars($_POST['name'])?>"

juser367 28.10.2013 13:50

Прочитал вопрос полностью. Запоминать ничего не нужно, такого нигде не видел

ruslan_mart 29.10.2013 12:23

Цитата:

Сообщение от Poznakomlus
Оба варианта нельзя использовать.

Тогда можно так.
foreach($_POST as $k => $v) $_SESSION[$k] = htmlspecialchars($v);

ruslan_mart 29.10.2013 13:54

Poznakomlus, вообще да, ты прав, это просто как пример автору, а то ведь этот г*внокод код кодом не назвовёшь:
Цитата:

if (isset($_POST["name"]))
{
$_SESSION['name'] = $_POST["name"];
}

if (isset($_POST["mobile"]))
{
$_SESSION['mobile'] = $_POST["mobile"];
}
if (isset($_POST["orderlist"]))
{
$_SESSION['orderlist'] = $_POST["orderlist"];

}

if (isset($_POST["city"]))
{
$_SESSION['city'] = $_POST["city"];
}

if (isset($_POST["street"]))
{
$_SESSION['street'] = $_POST["street"];
}

if (isset($_POST["adress"]))
{
$_SESSION['adress'] = $_POST["adress"];
}

if (isset($_POST["zip"]))
{
$_SESSION['zip'] = $_POST["zip"];

}
if (isset($_POST["state"]))
{
$_SESSION['state'] = $_POST["state"];

}
:)

wmag 03.11.2013 01:51

вариантов конечно много, как птиц на проводах...

Ruslan, да действительно: $_SESSION = $_POST - куда проще, спасибо.

Poznakomlus и Ruslan, да нафиг мне их там "запомнинать и проверять"? у меня сайт совсем простой, все данные хранятся в сессии только за тем что бы потом отписаться в базе данных в качестве инфы о пользователе. (ну кто сдеал заказ) не думаю что на этом моменте можно как-либо мне навредить =))))

crystals.net.in - вот и сайт, если хотите можете попробовать что-либо с ним сделать =) сильно сомневаюсь =)


Часовой пояс GMT +3, время: 17:29.