В принципе, у меня будет панель управления для приложения, над которым я работаю, это всего лишь набор кнопок. Я хочу передать информацию о том, какая кнопка была нажата на скрипт, который будет обрабатывать фактические команды. Я не могу понять, как использовать 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); ?>
Я хочу, чтобы он был представлен в фоновом режиме. Я хочу, чтобы он выглядел так, как будто он не обновляется и не перемещается куда угодно.
На самом деле это работает … всего несколько деталей для исправления (отмечено в комментариях):
<?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 …
<?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>'; } }