Автосохранение от 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