У меня есть функция обновления ajax с некоторыми специфическими проблемами, я уверен, что ее нужно немного настроить, прежде чем она сработает на 100%.
Я резюмирую вопросы ниже так ясно, как я могу.
У меня есть два файла, которые взаимодействуют друг с другом:
мой ajax пытается обновить значение int таблицы на основе нажатия кнопки. НЕТ=0, ДА=1, ОТМЕНА=2.
заказы.php
начало страницы
<?php
session_start();
require_once('orders-claimed.vc.php');
?>
столбец таблицы кнопок:
<td data-target = "scheduled">
<input id='userId' type='hidden'/>
<?php
if ($rowOrder['scheduled'] == 1) {
?>
<a href = "#" data-role = "update" data-id = "<?php echo $rowOrder['orderid'] ;?>"><button class = "btn-success">YES</button></a>
<?php
} else if ($rowOrder['scheduled'] == 0) {
?>
<a href = "#" data-role = "update" data-id = "<?php echo $rowOrder['orderid'] ;?>"><button class = "btn-danger">NO</button></a>
<?php
} else if ($rowOrder['scheduled'] == 2) {
?>
<a href = "#" data-role = "update" data-id = "<?php echo $rowOrder['orderid'] ;?>"><button class = "btn-warning">CANCELLED</button></a>
<?php
}
?>
</td>
модальный, используемый для взаимодействия с таблицей
<!-- Modal content-->
<div class = "modal-content" style = "width: 300px; margin: 0 auto;">
<div class = "modal-header">
<button type = "button" class = "close" data-dismiss = "modal">×</button>
</div>
<div class = "modal-body">
<div class = "form-group">
<a href = "#" id = "update_yes" class = "btn btn-success text-center center-block">YES</a><br>
<a href = "#" id = "update_no" class = "btn btn-danger text-center center-block">NO</a><br>
<a href = "#" id = "update_cancelled" class = "btn btn-warning text-center center-block">CANCEL</a>
</div>
</div>
</div>
</div>
ajax-код
<script>
$(document).ready(function(){
// append values in input fields
$(document).on('click','a[data-role=update]',function(){
var id = $(this).data('id');
var scheduled = $('#'+id).children('td[data-target=scheduled]').text();
$('#userId').val(id);
$('#myModal').modal('toggle');
});
// now create event to get data from fields and update in database
$('#update_no').click(function(){
var id = $('#userId').val();
var scheduled = 0;
$.ajax({
url : 'orders-claimed.vc.php',
method : 'post',
data : {scheduled: scheduled , id: id},
success : function(response){
// now update user record in table
$('#'+id).children('td[data-target=scheduled]').html('<a href = "#"><button class = "btn-danger">NO</button></a>');
$('#myModal').modal('toggle');
}
});
});
$('#update_yes').click(function(){
var id = $('#userId').val();
var scheduled = 1;
$.ajax({
url : 'orders-claimed.vc.php',
method : 'post',
data : {scheduled: scheduled , id: id},
success : function(response){
// now update user record in table
$('#'+id).children('td[data-target=scheduled]').html('<a href = "#"><button class = "btn-success">YES</button></a>');
$('#myModal').modal('toggle');
}
});
});
$('#update_cancelled').click(function(){
var id = $('#userId').val();
var scheduled = 2;
$.ajax({
url : 'orders-claimed.vc.php',
method : 'post',
data : {scheduled: scheduled , id: id},
success : function(response){
// now update user record in table
$('#'+id).children('td[data-target=scheduled]').html('<a href = "#"><button class = "btn-warning">CANCELLED</button></a>');
$('#myModal').modal('toggle');
}
});
}); });
</script>
Обратите внимание, что весь приведенный выше код находится в одном файле (orders.php).
это мои расширения на странице. большинство из них хранятся в папке и связаны.
<script src = "../_lib/v/jquery.slim.min.js"></script>
<script src = "../_lib/v/bootstrap/js/bootstrap.js"></script>
<script src = "../_lib/v/jquery-ui/jquery-ui.js"></script>
<script src = "../_lib/v/jscolor/jscolor.js"></script>
<script src = "js/cms.js"></script>
<link href = "../_lib/v/bootstrap/css/bootstrap.min.css" rel = "stylesheet">
Ajax не работает под slim.min.js и выдает ошибку «not a function error», поэтому я заменил его на обычную версию jquery из https://code.jquery.com/jquery-3.3.1.js.
ПРОБЛЕМА
Если я переключусь на полную версию jquery, столбец обновится, но сеанс (вошедший в систему пользователь) завершится и автоматически выйдет из системы. Почему это происходит?
Моя вторая проблема заключается в файле orders-claimed.vc.php
db.php
<?php
class config_db {
public function init() {
$db = new PDO('*MY DATABASE DETAILS GO HERE*');
date_default_timezone_set('Hongkong');
return $db;
}
}
?>
заказы.claimed.vs.php
подключение к базе данных:
$routePath = "../";
require_once($routePath . "_config/db.php");
$dbConfig = new config_db();
$db = $dbConfig->init();
обновление SQL
if (isset($_POST['id'])){
$orderid = $_POST['id'];
$scheduled = $_POST['scheduled'];
$stmt = $db->prepare("UPDATE order SET scheduled = '$scheduled' WHERE orderid = '$orderid'");
$stmt->execute(); }
ПРОБЛЕМА
приведенный выше код SQL не обновляет таблицу (та, что показана на скриншоте, но ajax просто обновляет внешний вид кнопки из функций успеха (он возвращается к исходному значению при обновлении страницы). Я хотел бы знать, что это проблема Он должен подключаться к кнопкам, так как он использует «if (isset ($ _ POST ['id'])»).
Надеюсь, я дал четкое объяснение своим двум проблемам, спасибо за любую помощь.
ОБНОВИТЬ Я использовал следующий код ниже, чтобы проверить наличие ошибки при обновлении кнопки:
console.info( 'scheduled: ' + scheduled + ' orderid: ' + $('#userId').val() );
когда кнопка обновляется и страница обновляется, что также завершает сеанс, я получаю следующую ошибку:
jquery-ui.js:1951 Uncaught TypeError: Cannot read property 'step' of undefined
at String.<anonymous> (jquery-ui.js:1951)
at each (jquery.slim.min.js:2)
at Function.color.hook (jquery-ui.js:1913)
at jquery-ui.js:1963
at jquery-ui.js:2005
at jquery-ui.js:14
at jquery-ui.js:16
запланированный используется для цели данных и переменной, и в моей консоли нет ошибок в моей первой проблеме. пользователь просто выходит из системы.
Нет. Когда вы говорите «#scheduled», это означает, что есть элемент HTML с идентификатором «scheduled». У вас есть такой элемент..??
мой плохой, забыл вытащить это, этот код избыточен. обновил вопрос.
Можете ли вы добавить console.info('scheduled: ' + запланированный +' orderid: ' + $('#userId').val()) в конце функции 'document.click on data-role update()', нажмите на кнопке, чтобы отобразить модальное окно, а затем проверить, получаете ли вы желаемые значения для передачи в db?
проверил ваш console.info и обновил вопрос.
Давайте продолжить обсуждение в чате.
Вы должны разбить это на два отдельных вопроса. Ваши проблемы jquery и PHP не связаны и поэтому должны быть отдельными вопросами.
мое обновление php связано с моим ajax.
Из того, что вы перечислили, я думаю, что у вас может быть «session_destroy ()» где-то в ваших файлах php (хотя это может быть не здесь). Попробуйте прокомментировать это и посмотреть, завершится ли сеанс или нет. Надеюсь, это поможет вам :).
Я не смог найти HTML-элемент с идентификатором «запланировано». Можете ли вы указать мне, где это? И что касается вашей первой проблемы, находите ли вы какие-либо ошибки в своей консоли при проверке?