2015-06-01 8 views
1

Я пойду медленно, а не ради тебя. Я действительно новичок в попытках сделать это. То, что я пытаюсь сделать, это обновить базу данных MySQL из таблицы HTML. Вот как они построены.Обновление MySQL с использованием AJAX и PHP

echo ("<td id=\"callsign:$row[recordID]\" contenteditable=\"true\" 
       onClick=\"showEdit(this)\" 
       onBlur=\"saveToDatabase(this,'callsign',$row[recordID])\" 
       style='text-transform:uppercase'> 
       $row[callsign]</td>"); 

Вот как это делает.

<td id="callsign:6" contenteditable="true" onclick="showEdit(this)" onblur="saveToDatabase(this,'callsign',6)" style="text-transform: uppercase; background-color: rgb(253, 253, 253); background-position: initial initial; background-repeat: initial initial;"> 
       KA0SXY</td> 

Здесь вызывается функция.

function saveToDatabase(editableObj,column,id) { 

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

И вот PHP.

<?php 
require_once "dbConnectDtls.php"; 

    $result = mysql_query("UPDATE NetLog set " . $_POST["column"] . " = '".$_POST["editval"]."' WHERE recordID=".$_POST["id"]); 
    echo $result; 

?> 

Когда я перехожу от этой ячейки к следующей, единственное, что выполняется, - это .gif. MySQL не обновляется, что я делаю неправильно?

Заранее благодарим за то, что вы не относитесь ко мне как к манекену, но помогаете мне учиться.

Followup для предложений:

Я боюсь, что я не буду топтание на месте по этому вопросу. Кто-нибудь хочет написать рабочий пример, за которым я могу последовать?

+0

попробуйте войти 'data' в функции успеха, чтобы увидеть, что возвращается' saveedit.php'. В инструментах разработчика вашего браузера, каков код возврата запроса ajax (т.е. 200 или 500)? Правильно ли «saveedit.php» работает, если вы нажмете его прямо (т. Е. Отправив ему форму)? Изменяется ли фон в '# FDFDFD' при запуске' saveToDatabase' или он остается неизменным? – chiliNUT

+0

Как это сделать ... данные в функции успеха? Взгляните сюда http://kcmecc.org/graphics/RaspPi/, возможно, вы можете видеть, в чем моя проблема. –

+0

'console.log (data)' – chiliNUT

ответ

1

Для новичка есть много вещей, которые вы должны заботиться в сценарии:

  1. Сначала вы должны избежать вставок $ _POST значений непосредственно в запрос, как это может привести к sql injection проблемам.
  2. Вы должны использовать PDO или MySQLi для выполнения запроса по тем же параноидальным причинам.
  3. Вы должны быть последовательными. Зачем использовать .innerhtml, когда вы используете JQuery? Вы можете использовать $ (editableObj) .html()
  4. У вас нет ошибок javascript: вы просматриваете консоль? Попробуйте щелкнуть правой кнопкой мыши в теле страницы и выбрать «проверить элемент». Затем нажмите вкладку «консоль» в появившемся фрейме.
  5. Также вы не печатаете переменную «данные», которая возвращается, чтобы увидеть, является ли ожидаемый результат на сервере. Вы можете сделать это с помощью:

    console.log (data);

Другое, чем все выглядит хорошо в вашем скрипте;)

+0

Я даже не понял, что я смешивал свои метафоры (# 3 & # 2) выше. Обычно я использую PDO, но думаю, я думал, что AJAX позаботился о вещах. Я изучаю. Да, я сбросил данные, используя console.log (данные), которые он не подключил к серверу MySQL. Не знаю, почему, потому что я использую тот же код в ряде других мест. Сейчас я ищу причину. –

+0

Вы должны помнить, что имя AJAX происходит от асинхронного.Это означает, что вызов, который вы выполняете с PHP, не останавливает остальную часть вашего скрипта, но часть ajax продолжает ждать, пока не получит ответ от сервера или тайм-аут, поэтому он ничего не касается с тем, что получает сервер. Он получает то, что вы бросаете ему. Также SQL-инъекция может быть сделана непосредственно на сервере, а не через ваш сценарий ajax. Вы должны 'console.log (data);' для обеих переменных 'data', которые у вас есть. Их называют одинаковыми, но первый - это запрос, а второй - ответ. – lalengua

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