2017-02-06 4 views
4

Я просто новичок с php, тем более на PostgeSQL. Я могу сказать, что мои знания по php, json и sql очень ограничены.Почему мой метод обновления pg_query пропускает строку?

Я создал метод обновления, чтобы обновлять возвращаемые данные всякий раз, когда я создаю или удаляю запись из базы данных. Но иногда, когда я создаю новую запись, новая запись не возвращается с php, пока я не воспользуюсь функцией обновления дважды. Иногда бывает так же, когда я удаляю запись, я получаю результаты с одним кликом. Это происходит случайным образом, иногда при первом щелчке, иногда на 4-м щелчке.

Пример: Предположим, у меня есть существующая запись на столе и добавлена ​​новая запись. Случайно он возвратил [[«6», «1», «Джейсон Смит», «& id», «89»], когда он должен был вернуть [[«6», «1», «Джейсон Смит», "& id", "89"] [["6", "1", "King Sczhult", "& id", "90"], но когда я проверяю базу данных или обновляю страницу браузером, запись там ,

//The function that calls php 
 
function refresh() { 
 
    $(".scell").html(""); 
 
    $("#holidayCell").html(""); 
 
    
 
var updateTable = { 
 
         
 
    semSchedule: $("#semesterselect").val(), 
 
    operation: "updateTable" 
 
} 
 

 
    $.post("scheduleengine.php", updateTable).done(function(response) { 
 
    if (response.val != 0){ 
 
    //This is where I decode returned table array 
 
    }else { 
 
    }; 
 
     
 
    
 

 
       
 
}); 
 
};
//This is the php switch-case. 
 

 
switch($_POST["operation"]){ 
 
       
 
case "updateTable": 
 
       
 
    echo updateTableFunc(post("semSchedule")); 
 
     
 
break; 
 

 
//Update Function 
 

 
function updateTableFunc($semID = null){ 
 
    
 
    
 
    
 
    $result = ""; 
 
    
 
    $scqrysql = "SELECT id, tutor, hour, day FROM schedule WHERE semester='$semID'"; 
 
    $scqry = pg_query($scqrysql) or die(pg_result_error()); 
 
     
 
    while ($row = pg_fetch_array($scqry)) { 
 
       
 
    $scTutorID = $row['tutor']; 
 
    $tqry = pg_query("SELECT id, tname, tsurname FROM tutors WHERE id='$scTutorID'") or die(pg_result_error()); 
 
    while($tutorrow=pg_fetch_array($tqry)){ 
 
       
 
    $scTutor = $tutorrow['tname'] . " " .$tutorrow['tsurname']; 
 
       
 
              }; 
 
      
 
    $scHourRow = $row['hour']; 
 
    $scDay = $row['day']; 
 
    $scID = $row['id']; 
 
       
 
    $scHour = substr($scHourRow, 2, 1); 
 
    $scDayNameArray = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday"); 
 
    $scDayNumberArray = array("2", "3", "4", "5", "6"); 
 
    $scDayNameReplace = str_replace($scDayNameArray, $scDayNumberArray, $scDay); 
 
      
 
    $resultArrays = array($scDayNameReplace, $scHour, $scTutor, "&id", $scID); 
 
    $result[] = $resultArrays; 
 
       
 

 
             }; 
 
    
 
    if(is_null($result)){ 
 
    $result = ""; 
 
    echo json_encode($result); 
 
    }else{ 
 
       
 
    $json = json_encode($result); 
 
    echo $json; 
 
     }; 
 
    
 
    
 
};

+0

Что такое код, на который называет этот код? Возможно ли это сделать асинхронный запрос или использовать другое соединение с БД каким-то образом? Вы * МОЖЕТЕ * хотеть запустить «commit» перед запуском этого кода и посмотреть, что произойдет. –

+0

Я отредактировал фрагмент кода. – Ahmet

+0

Это тоже не так, я просто попробовал «зафиксировать» как до кодов обновлений, так и после запросов на вставку/удаление. – Ahmet

ответ

1

Это проблема прямо там. Похоже, вы используете jquery для вызова обеих вещей, и вы делаете это асинхронно - это означает, что оба начинаются почти мгновенно, и каждый может закончить сначала (состояние гонки). Когда «А» выигрывает гонку, ты золотой. Когда Б выигрывает гонку, ты снова должен освежиться. Что вам нужно, так это позвонить «A» (запрос на обновление), после чего он будет называться «B», когда он будет завершен.

+0

Звучит правильно! Я собираюсь попробовать это прямо сейчас. – Ahmet

+0

Кажется, это не тот случай, я полностью опустил «var updateHolidays» из функции обновления, если это то, что вы имели в виду. Это произошло следующим образом: script-> php-> updatefunc-> echo json_encode ($ result) -> $ (post (... Я все еще сталкиваюсь с случайными пропущенными ошибками. Я отредактировал фрагмент кода соответственно. – Ahmet

+1

Я решил проблему с этот подход. Это был jquery. Спасибо! – Ahmet

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