Могу ли я отправить форму и добавить запись в БД только по php в том же файле, не используя методы Get / Post? - PullRequest
0 голосов
/ 28 января 2011

Скажите, что я создал регистрационную форму. Теперь, чтобы добавить записи в БД, мы отправляем данные в другой файл php методом POST, где мы делаем некоторые проверки и добавляем запись. Можно ли сделать это в одном и том же файле без отправки и получения данных POST / GET? Если нет, то почему?

РЕДАКТИРОВАТЬ: Даже отправка в тот же файл php отправка и потеря ресурса. Я задаю этот вопрос, потому что я хочу избежать потери времени при отправке GET / POST и получении того же Get / POST. И если это невозможно, я хочу понять, почему PHP не позволяет.

Ответы [ 5 ]

3 голосов
/ 28 января 2011

Нет. Вы всегда должны отправлять данные с клиента на сервер, и нет никакого способа обойти это.

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

1 голос
/ 28 января 2011

Да, конечно.

просто в вашей форме "action" поместите

$_SERVER['PHP_SELF']

, затем в начале вашей страницы PHP проверьте, установлен $ _POST или нет

if(isset($_POST))
{
   // actions to be taken after form submission
}

Конечно, вы можете добавить скрытый тег ввода для уточнения проверки для $ _POST.например, в вашей форме

<input type="hidden" name="formSubmit" value="yes" />

тогда ваш чек должен выглядеть так:

if(isset($_POST['formSubmit']))
{
       // actions to be taken after form submission
}
0 голосов
/ 28 января 2011

Да, это легко. Форма может отправить обратно к себе. Это проще всего сделать, даже не указав значение действия в теге формы.

<form method='POST'>

Затем в верхней части страницы перед размещением какого-либо содержимого на странице добавьте оператор if, чтобы проверить, была ли отправлена ​​форма.

if (isset ($_POST['post'])) { // 'post' is the name of the submit button
    $error = false;
    // Do validation

Оттуда сделайте проверку и действуйте в соответствии с результатом.
Если вам нужно выполнить много проверок, возможно, поместите это в другой файл и включите его.

    include "formValidation.php";

Если все хорошо и все тесты пройдены, используйте

    if ($error === false) {
        Header ("Location: confirmation.php"); 
        exit;
    }
}

Если тесты не пройдены, оставайтесь на странице, сохраняя все данные поста, и отображайте ошибку.

if (isset ($error) && !empty ($error)) {
    echo "<div class='error'>$error</div>";
}
0 голосов
/ 28 января 2011

Да, можно установить

action = "same page"

в теге формы.Вы можете получить доступ ко всем атрибутам формы на той же странице.

0 голосов
/ 28 января 2011

Это возможно.Например:

<?php
if(true === isset($_POST['submit']) // check if submit-button was clicked
{
    // do some validation here...

    // If validation successes add record into db here...
}
else // no post data sent so output the form
{
    // output the form here...
}
...