2015-09-02 3 views
0

У меня есть выпадающее меню, которое при его изменении Я хочу обновить значение в базе данных. Ajax запускается, когда я получаю gif всплывающее окно, и в консоли нет ошибок, но база данных не обновляется. Все остальные поля (например, startdate в примере ниже) работают нормально, так что вызов Ajax прав, я думаю. Я попытался использовать как onBlur, так и onChange в качестве моих обработчиков событий для выбора. Функциявыбрать onblur firing ajax, но не обновлять базу данных

<td <form><select onblur="saveToDatabase(this,'workingpatternid', 'employmenthistory', 'employmenthistoryid','<?php echo $employmenthistory[$k3]["employmenthistoryid"]; ?>')"><option value="<?php echo $employmenthistory[$k3]["workingpattternid"]; ?>"><?php echo $employmenthistory[$k3]["text"]; ?></option><?php 
      if(isset($workingpatterns) && !empty($workingpatterns)){ 
      foreach($workingpatterns as $k4=>$v4) { 
      ?> <option value="<?php echo $workingpatterns[$k4]["workingpatternid"]; ?>"><?php echo $workingpatterns[$k4]["text"]; ?></option><?php }}?></select></form></td> 
<td contenteditable="true" onBlur="saveToDatabase(this,'startdate', 'employmenthistory', 'employmenthistoryid','<?php echo $employmenthistory[$k3]["employmenthistoryid"]; ?>')" onClick="showEdit(this);"><?php echo $employmenthistory[$k3]["startdate"]; ?></td> 

Savetodatabase:

<script type="text/javascript" name = "editable fields"> 
     function showEdit(editableObj) { 
      $(editableObj).css("background","#FFF"); 
     } 

     function saveToDatabase(editableObj,column,table,primary,id) { 
      $(editableObj).css("background","#FFF url(loaderIcon.gif) no-repeat right"); 
      $.ajax({ 
       url: "saveedit.php", 
       type: "POST", 
       data:'column='+column+'&editval='+editableObj.innerHTML+'&table='+table+'&primary='+primary+'&id='+id, 
       success: function(data){ 
        $(editableObj).css("background","#FDFDFD"); 
       }   
      }); 
     } 
    </script> 

saveedit.php

<?php 
require_once("connect_db.php"); 
$table=$_POST['table']; 
$column=$_POST['column']; 
$value=$_POST['editval']; 
$primary=$_POST['primary']; 
$id=$_POST['id']; 
$sql = "UPDATE `$table` SET `$column` = '$value' WHERE `$primary`='$id'"; 
$result = mysqli_query ($dbc, $sql) or die(mysqli_error ($dbc)); 
?> 
+0

Вы тоже можете показать источник saveed.php? и проверили ли вы свой webservers access.log, чтобы узнать, получен ли запрос? – JoSSte

+0

в соответствии с журналом доступа saveedit.php называется –

+0

Что такое 'data'? Положите это на успешную функцию 'alert (data)' –

ответ

1

Debugging запрос посылается:

стороне клиента

Если вы нажмете F12 на своей вызывающей странице, перейдите на сетевую консоль (я предполагаю, что вы используете новый браузер, например, Chrome 40+ или IE 9+) и убедитесь, что кеш сохраняется (т. Е. Нет обновляется при обновлении страницы).

Обновите страницу, очистите список и снова запустите свой код. Обратите внимание, является ли запрос отправлен, как вы ожидаете (нажмите на линии, представляющей вызов saveedit.php, а затем запрос)

стороне сервера

Вы можете добавить вызов error_log(var_export($_POST)), чтобы увидеть, если вы получили то, вы ожидаете. Результаты будут в вашем webservers error.log, поэтому это не предоставляет пользователям данные, если они случайно остались после развертывания.

Также убедитесь, что страница вызывается, путем доступа access.log на вашем сервере.

Получение ожидаемого значения с помощью JavaScript:

Проблема заключается в том, что первый вызов в отборное; код может быть editableObj.options[editableObj.selectedIndex].value, а второй - в элементе div. Либо вы должны пересмотреть свой дизайн страницы, либо сделать две разные функции (не рекомендуется)

Смежные вопросы