Использовать кнопки для отправки в php-скрипт

В принципе, у меня будет панель управления для приложения, над которым я работаю, это всего лишь набор кнопок. Я хочу передать информацию о том, какая кнопка была нажата на скрипт, который будет обрабатывать фактические команды. Я не могу понять, как использовать POST, вот что … Вот код, который у меня есть.

<php include("writemessage.php"); echo " <form action='writemessage.php' method='POST'> <input type='submit' name='message' value='custom1'/> <input type='submit' name='message' value='custom2'/> </form>"; ?> 

Насколько я могу судить по чтению некоторых учебных пособий и документации, он должен работать? Сценарий writemessage.php просто помещает информацию в файл, и я тестировал ее с помощью GET, и все было в порядке.

 <?php $file = 'log.txt'; // Open the file to get existing content $current = file_get_contents($file); // Change file to command. $current = $_POST[message]; // Write the contents back to the file file_put_contents($file, $current); ?> 

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

Solutions Collecting From Web of "Использовать кнопки для отправки в php-скрипт"


Нет Ajax

На самом деле это работает … всего несколько деталей для исправления (отмечено в комментариях):

 <?php //<-- here it was "<php" fix that! include("writemessage.php"); //Don't sent people over to writemessage, otherwise why did you include it? echo '<form action="" method="POST"> <input type="submit" name="message" value="custom1"/> <input type="submit" name="message" value="custom2"/> </form>'; //Note: I changed quotes, no big deal echo $current; //you can read $current ?> в <?php //<-- here it was "<php" fix that! include("writemessage.php"); //Don't sent people over to writemessage, otherwise why did you include it? echo '<form action="" method="POST"> <input type="submit" name="message" value="custom1"/> <input type="submit" name="message" value="custom2"/> </form>'; //Note: I changed quotes, no big deal echo $current; //you can read $current ?> 

writemessage.php:

 <?php $file = 'log.txt'; if (isset($_POST['message'])) //check if isset, also use quotes { // Change file to command. $current = $_POST['message']; //again quotes // Write the contents back to the file file_put_contents($file, $current); } else { if (file_exists($file)) //check if file exists { // Open the file to get existing content $current = file_get_contents($file); } else { // default value? //$current = '???'; } } ?> 

Ajax

Я не заметил, что вы сказали «подать в фоновом режиме», означает ли это, что вы не хотите загружать страницу? вы можете сделать это с помощью Ajax …

 <?php include("writemessage.php"); ?> <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> <script> function _submit(value) { //This is the value set locally, do you want to be able to get values from other users? that is a whole level more complex $('#current').html(value); //Here we send the info the server via AJAX with jQuery var ajax = $.ajax( { type: "POST", url: "writemessage.php", data: {message: value} }); //This is the value form the server, note: it may change from another client and this will not be updated ajax.done(function(response) { $('#current').html(response); }); } </script> <form action=""> <input type="button" name="message" value="custom1" onclick="_submit('custom1')"/> <input type="button" name="message" value="custom2" onclick="_submit('custom2')"/> </form> <span id="current"><?php echo $current; ?></span> 

Примечание 1: Я использую jQuery из URL http://code.jquery.com/jquery-1.10.2.min.js выбрать http://code.jquery.com/jquery-1.10.2.min.js версию и поместить ее на свой сервер.

writemessage.php:

 <?php $file = 'log.txt'; if ($_SERVER['REQUEST_METHOD'] === 'POST' && array_key_exists('message', $_POST)) { $current = $_POST['message']; file_put_contents($file, $current); echo $current; //this is the response we send to the client } else { if (file_exists($file)) //check if file exists { $current = file_get_contents($file); } else { //$current = '???'; } } ?> 

Примечание 2: Вас также интересует POST-REDIRECT-GET .

Убедитесь, что у вас есть разные имена для ваших кнопок, вот как вы собираетесь ссылаться на них в массиве $ _POST.

Например, вместо того, что у вас есть, попробуйте следующее:

 <input type='submit' name='message_1' value='custom1'/> <input type='submit' name='message_2' value='custom2'/> 

1 – Как вы хотите отправить это через фон, вам нужно использовать Ajax. Я покажу, как использовать JQuery Ajax.

2- Как вы хотите опубликовать в фоновом режиме, вам больше не нужна <form> :

  <php include("writemessage.php"); ?> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script> //Post data to "writemessage.php" on background (AJAX) function customSubmit(optionVal) { $.ajax({ url: "writemessage.php", data: { 'message': optionVal }, }).done(function(data) { //if you want to see what this return, use alert(data); }); } </script> echo " <input type='button' name='message1' value='custom1' onclick="javascript:customSubmit("custom1");"/> <input type='button' name='message2' value='custom2' onclick="javascript:customSubmit("custom2");"/> "; ?> в  <php include("writemessage.php"); ?> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script> //Post data to "writemessage.php" on background (AJAX) function customSubmit(optionVal) { $.ajax({ url: "writemessage.php", data: { 'message': optionVal }, }).done(function(data) { //if you want to see what this return, use alert(data); }); } </script> echo " <input type='button' name='message1' value='custom1' onclick="javascript:customSubmit("custom1");"/> <input type='button' name='message2' value='custom2' onclick="javascript:customSubmit("custom2");"/> "; ?> 

3 – теперь в вашем файле чтения вы можете прочитать POST «hidOption» как значение выбранной кнопки:

 <?php $file = 'log.txt'; // Open the file to get existing content $current = file_get_contents($file); // Change file to command. $current = $_POST["message"]; //Here is "hidOption"! // Write the contents back to the file file_put_contents($file, $current); ?> 

Легко.

 <form method="post"> <div class="response"></div> <input type="submit" name="message" value="custom1" /> <input type="submit" name="message" value="custom1" /> <form> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script> jQuery(function ($) { $('form').on('submit', function (e) { e.preventDefault(); $.ajax({ context : this, data : $(this).serialize(), type : 'post', url: 'writemessage.php' }).success(function (response) { $(this).find('.response').html(response); }); }); }); </script> 

Кроме того, ваш файл writemessage.php можно немного очистить.

 <?php $file = 'log.txt'; if (file_exists($file)) { // Do some kind of validation on your input. if (in_array($_POST['message'], array('custom1', 'custom2')) { file_put_contents($file, $_POST['message']); echo "<p>The value is {$_POST['message']}</p>"; } else { echo '<p class="error">Illegal value!!</p>'; } }