Автосохранение от php до mysql без изменения страницы или кнопки отправки

В основном у меня есть список данных, который отображается с помощью оператора foreach из таблицы в моей базе данных. Я хочу раскрывающийся список рядом с каждым, в котором есть некоторые значения, которые необходимо сохранить в поле в моей таблице, однако я хочу автоматически сохранять значение в раскрывающемся списке в поле, как только значение в нем изменяется. Может кто-нибудь указать мне учебник или что-то, что может помочь?

Я использую php и mysql для создания системы, но с радостью буду использовать JavaScript, если потребуется

Я взглянул на это: динамическое автосохранение диска http://www.dynamicdrive.com/dynamicindex16/autosaveform.htm которое похоже на то, что я хочу, однако мне нужно, чтобы оно фактически сохраняло эти данные в моей базе данных, а не во временном хранилище.

Любое руководство ценится,

Ян


БОЛЬШОЕ РЕДАКТИРОВАНИЕ

Итак, спасибо за ответы, но я понятия не имею о вызове ajax..... Я нашел это: Как автоматически сохранить выделение в ComboBox в MYSQL в PHP без кнопки отправки?,

я могу заставить это работать?

<script>
$(document).ready(function(){
$('select').live('change',function () {
        var statusVal = $(this).val();
        alert(statusVal);
        $.ajax({
                 type: "POST",
                 url: "saveStatus.php",
                 data: {statusType : statusVal },
                 success: function(msg) {
                     $('#autosavenotify').text(msg);
                 }
      })
  });
});
</script>


<?php foreach ( $results['jobs'] as $job ) { ?>

          <td width="25%"><?php echo $job->job_id</td> 
          <td>
          <select name="status" id="status">
                  <option value=''>--Select--</option>
                  <option value='0'>Approve</option>
                  <option value='1'>Reject</option>
                  <option value='2'>Pending</option>
          </select>
          <div id="autosavenotify"></div>
          </td>
        </tr>
    <?php } ?>

и на странице saveStatus.php:

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

$con=mysql_connect("localhost","username","mypass","rocketdb3");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("jobs", $con);

$st=$_POST['statusType'];
    $query = "UPDATE jobs SET status=$st WHERE job_id=$id";
    $resource = mysql_query($query) 
        or die (mysql_error());

}
?>

4 ответа

Где находится $id в saveStatus.php?

Вам нужно передать statusType и job_id через AJAX для корректного обновления в saveStatus.php.

Например:

<script>
$(document).ready(function(){
$('select').on('change',function () {
        var statusVal = $(this).val();
        var job_id = $(this).id;
        alert(statusVal);
        $.ajax({
                 type: "POST",
                 url: "saveStatus.php",
                 data: {statusType : statusVal, job_id: job_id },
                 success: function(msg) {
                     $('#autosavenotify').text(msg);
                 }
      })
  });
});
</script>


<?php foreach ( $results['jobs'] as $job ) { ?>

      <td width="25%"><?php echo $job->job_id; ?></td> 
      <td>
      <select name="status" id="<?php echo $job->job_id; ?>">
              <option value=''>--Select--</option>
              <option value='0'>Approve</option>
              <option value='1'>Reject</option>
              <option value='2'>Pending</option>
      </select>
      <div id="autosavenotify"></div>
      </td>
    </tr>
<?php } ?>

*Заметка: .live() устарела, использовать .on() вместо.

И saveStatus.php

$st = (int)$_POST['statusType'];
$id = (int)$_POST['job_id'];
$query = "UPDATE jobs SET status=$st WHERE job_id=$id";

Используйте jQuery! На выпадающем событии onchange выполните ajax-вызов и обновите запись в БД. Вот ссылка на метод jQuery Ajax.

Вам нужно будет использовать JavaScript (+ jQuery для облегчения работы), чтобы добиться этого. Поймайте "изменение" значения с помощью JavaScript и выполните AJAX-вызов PHP-скрипта, который сохраняет значение в базе данных MySQL.

Вы можете использовать слушатель JavaScript onchange для элемента select примерно так:

<select onchange="savedata()">

Функция saveata() - это не что иное, как ваш AJAX-код. Я нашел AJAX-скрипт, который берет содержимое из текстовых полей и сохраняет его в базе данных. Вы можете изменить его в соответствии со своими потребностями.

function getData(){


var fd = new FormData();

  var title = document.getElementsByName('title')[0].value;
  var content = document.getElementsByName('content')[0].value;
  var id = document.getElementsByName('id')[0].value;
  fd.append('title',title);
  fd.append('content',content);
  fd.append('id',id);

  return fd;
}

function savePost(){
  try{
    var xhttp = new XMLHttpRequest();
  }
  catch(e){
    console.log(e);
  }
  var data = getData();
  xhttp.open('POST','autosave.php?save=true');
  xhttp.send(data);
  xhttp.onreadystatechange = function(){
    if(this.status == 200 && this.readyState == 4){
      if(data.get('id') == ""){
        document.getElementsByName('id')[0].value = this.responseText;
      }
      else{
        document.getElementById('message').innerHTML = this.responseText;
      }
      console.log(this.responseText);
    }
  }
}

setInterval(savePost,10000); //savePost will be called in every 10 seconds

PHP-скрипт для вставки и обновления базы данных выглядит следующим образом

date_default_timezone_set('Asia/Kolkata'); //you can add your own timezone
$host = 'localhost';
$user = 'your_db_username';
$pass = 'your_db_password';
$db = 'autosave';
$conn = new mysqli($host, $user, $pass, $db);
function insertPost($title,$content, $conn){
  $sql = "INSERT INTO post VALUES(null, ?, ?)";
  $stmt = $conn->stmt_init();
  if($stmt->prepare($sql)){
    $stmt->bind_param('ss',$title,$content);
    if($stmt->execute()){
      echo $conn->insert_id;
    }
  }}

function updatePost($title,$content,$id, $conn){
  $sql = "UPDATE post SET title = ?, content = ? WHERE id = ?";
  $stmt = $conn->stmt_init();
  if($stmt->prepare($sql)){
    $stmt->bind_param('ssi',$title,$content,$id);
    if($stmt->execute()){
      echo "<i>Draft Saved at ".date("h:i:s a")."</i>";
    }
  }}
if(isset($_GET['save'])){
  $title = $_POST['title'];
  $content = $_POST['content'];
  $id = $_POST['id'];
  if($id != ''){
    updatePost($title, $content,$id, $conn);
  }
  else{
    insertPost($title, $content, $conn);
  }}
?>

Вы можете найти код и полное руководство по следующей ссылке: Система автосохранения данных с использованием PHP, MySQL и AJAX

Другие вопросы по тегам