возвращаясь из формы отправить вызов в файл .php - PullRequest
2 голосов
/ 12 февраля 2012

У меня есть анкета в форме. В конце этого нажимается кнопка отправки, которая должна вызывать файл .php, который вставляет данные в базу данных через информацию о своих действиях, а затем показывает последнюю страницу, которая содержит что-то вроде «спасибо за участие и т. Д.» через информацию об отправке.

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

PHP-скрипт работает, он корректно вставляет данные в анкету, поэтому не должно быть ошибок по синтаксису.

есть идеи, если мне нужно выйти из склепа или что-то еще и вернуться в файл .html или что может быть не так?

Ответы [ 5 ]

4 голосов
/ 12 февраля 2012

к открывающему тегу формы добавьте action="submit.php"

, а затем, когда вы перейдете на эту страницу, когда нажмете кнопку отправки, добавьте это в конец этой страницы php:

header("Location: successfull.html");
2 голосов
/ 12 февраля 2012

Похоже, что то, что вы делаете, показывает сообщение с Javascript через событие onsubmit - это происходит еще до того, как запрос будет установлен на сервер и скрипт php. Вам нужно будет либо отправить форму ajax, а затем отобразить сообщение, когда запрос завершится, либо сделать так, чтобы скрипт php перенаправлял на страницу сообщения об успешном завершении, когда это будет сделано.

Но это всего лишь предположение, не видя никакого кода ... Вы должны опубликовать некоторые из них: -)

1 голос
/ 12 февраля 2012

Несколько способов сделать это.

Вы можете сделать так, чтобы файл php, который он отправляет, отправлял данные для страницы "спасибо за участие" (если вы просто переходите на другую страницу).

В качестве альтернативы, если вы хотите остаться на той же странице, но просто показать уведомление "спасибо", я бы использовал JavaScript, чтобы отключить действие по умолчанию (e.preventDefault(); в обработчике событий) для кнопки "отправить" на на форуме, затем также используйте JavaScript, чтобы использовать AJAX для отправки данных.

Пример (с использованием JQuery), который не изменит вашу страницу, не выполнит отправку в фоновом режиме и не отобразит «спасибо» по завершении на текущей странице.

$("a#confirmSubmit").click(function(e) {
    e.preventDefault(); // Prevents the submit button from changing pages

    data = {
        Name: $("input#Name").attr("value")
                    // Add other data here also
    };

    $.post("/page/to/submit/to.php", data, function(d) {
        //Write the code here to show the "thank you" notification.
        //It will show upon completion here.
    });
});

Если вы хотите проверить наличие ошибок при вставке в БД, вы можете проверить значение данных вызова AJAX, чтобы условно показать ошибку. Затем вы можете вернуть пользователя в ту же форму, в которой он уже был, со всеми данными, оставшимися там, и показать ему сообщение об ошибке.

1 голос
/ 12 февраля 2012

Я справляюсь с этим, помещая html-содержимое в php-файл.

<?php 

if (!isset($_POST["submit"])) { // if page is not submitted to itself echo the form
?>

<html> 
<head> 
<title>survey</title> 
</head> 
<body>
<form method="post" action="<?php echo $PHP_SELF;?>">
    ...... (your form) ......
    <input type="submit" value="submit" name="submit"><br />
</form><br />
</body>
</html>

<?
} 
else { 

    $db = new PDO('...');
    $db->exec(...);
    echo "Thank you!";
}
?>
1 голос
/ 12 февраля 2012

Почему бы не отправить форму в process.php, а затем обработать ее:

if(isset($_POST)){
    $name = $_POST['name'];
    // etc etc

    // if all error checks pass, then echo out - thanks for taking part in our survey!
}

То, что вы делаете, это отправляете его, и кажется, что вы получаете javascript, чтобы сказать «спасибо», но он передается до того, как это сообщение «спасибо» может быть отображено - без вреда, повторяя это на вашем .php страница !!

Обновление

Вы упоминаете о перенаправлении на страницу впоследствии, но это может быть сделано:

header("Location: where/to/go.php");
exit;

Но вы не можете сделать это с помощью вышеизложенного (подтверждая успех), поскольку он будет перенаправлен сразу.

...