2015-12-02 7 views
1

Итак, у меня есть html-форма в Add.html. Когда я нажимаю кнопку «Отправить», мне бы хотелось, чтобы данные были добавлены в мою базу данных через php, а затем вернулись в ту же форму с «добавленным экземпляром» или «неудачным бла-бла».Как вызвать функцию php на html form submit - на той же странице

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

Я бы не хотел добавлять кнопку «вернуться к форме» и предпочел бы вернуться в форму на отправке с сообщением о состоянии.

Любые лучшие способы сделать это?

+0

[Проверить этот ответ] (http://stackoverflow.com/a/1132015/1090727) – shaunsantacruz

ответ

1

Самый простой способ сделать это, чтобы сделать следующее:

yourpage.php

<?php 
if(isset($_POST)){ 
    //data posted , save it to the database 
    //display message etc 
} 

?> 
<form method="post" action="yourpage.php" >.... 
+0

Это нарушает условные обозначения шаблонов MVC. – kingtut007

+0

Помогите объяснить, пожалуйста? – thepiyush13

+0

Не предпочтительнее иметь код шаблона вместе с php-кодом. Следующий скрипт там не работает, прежде всего потому, что вы указали, что используете его из файла .html (а не файла php) - поэтому вы не можете синтаксически анализировать php-синтаксис в этом файле. Кроме того, по стандартам кодирования mvc - это означает Model View Controller - у вас должен быть шаблон (вид), который несет исключительную ответственность за отображение данных, переданных ему от контроллера, а не смешивание всего вместе. – kingtut007

1

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

+0

Можете ли вы объяснить или связать объяснение о том, как перенаправить в php? Я предполагаю, что вы имеете в виду установить действие формы в отдельный файл, запустить материал db, а затем перенаправить с помощью флэш-сообщения –

+0

, используете ли вы фр-фрейм? Его проще в PHP-фреймах. Читайте на http://php.net/manual/en/function.header.php – kingtut007

0

вы можете использовать этот трюк

<?php if (!isset $_POST['Nameofyourinput']){ 
 

 
?> 
 

 
<form method="post" action="add.html"> 
 
    // your inputs here along with the rest of html 
 
    
 
    
 
    
 
    </form> 
 
<?php 
 

 
} 
 

 
else 
 
{ 
 
// Update you database and do your things here 
 
//in your request variable you can add the error you want if things didn't go well, for example 
 
$result = mysqli_query($connection, $sql) or die('Instance not added !'.$req.'<br>'.mysql_error()); 
 
// and then 
 
echo (" instance added") 
 
};

0

Атрибут действия по умолчанию будет иметь текущий URL. Это самый надежный и простой способ сказать «отправьте форму на то же место, откуда она появилась».

Просто не давайте ничего атрибуту действия. Он будет ссылаться на вашу текущую страницу.

<form method="post" action=""> 

Другой способ сделать это, являются:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 

Или просто добавьте '#'

<from method="post" action="#"> 

Для обработки кода PHP. Напишите свой код внутри него.

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    // write your code here. 
} 

Необходимо изменить расширение файла с .html на .php.

0

Ну, вы можете использовать старую школу AJAX. Например, допустим, у нас есть форма, которая принимает число N, и как только мы нажимаем кнопку расчета, мы должны увидеть результат 2^N, отображаемый на той же странице, без обновления страницы, а предыдущее содержимое, оставшееся в то же место. Вот код

<html> 

<head> 


    <title> Simple Math Example</title> 

    <script type="text/javascript"> 

    var request = new XMLHttpRequest(); 


    function createAjaxObject(){ 


      request.onreadystatechange = applyChange; 
      request.open("POST","calculate.php",true); 
      request.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
      request.send("N="+document.getElementById('N').value); 

    } 

    function applyChange(){ 

     if(request.status == 200 && request.readyState == 4){ 

      document.getElementById('resultSpace').innerHTML = request.responseText; 
     } 


    } 




    </script> 


</head> 

<body> 

    <fieldset>   


     <legend>Enter N to get the value of 2<sup>N</sup> ::: </legend> 

     <input type="text" name = "N" id = "N"> 
     <br> 
     <input type="button" value = "Calculate" onclick="createAjaxObject()"> 



    </fieldset> 

    <div id="resultSpace"> 

    </div> 
</body> 

Файл calculate.php это тот же файл с указанным кодом. Когда щелкнула кнопка расчета, она вызывает функцию createAjaxObject, которая принимает значение N и отправляет значение в тот же файл с помощью метода POST. Как только расчет будет выполнен, будет отправлен ответ. И если ответ будет успешным, он будет отправлен на функцию с именем applyChange, которая будет отображать ее на одной странице с помощью JavaScript.