Обновление записи в базе данных mysql

Mesher

Новичок
Здравствуйте, подскажите пожалуйста в чем проблема.

Есть база данных. данные с сайта вносятся нормально, вывод тоже, а вот обновление записи не происходит.

Код вывод данных из базы:
PHP:
      <form action="editpost.php" method="POST" OnSubmit="sendRequest(); return false">
    <table>
       <tr><td><td>
          <td>№ накладной</td>
          <td>Город отправления</td>
          <td>Дата отправления</td>
          <td>Адрес прибытия</td>
          <td>Дата прибытия</td>
          <td>Время вручения</td>
          <td>Получатель</td>
          <td>Комментарии</td>
       </tr>
    <?php
    do {
        echo ('      <tr>
                   <td>
                   <input type="hidden" name="epostID" value="'.$row_postt['id'].'" />
                   <input type="submit" name="editpost" value="Edit"/>
                   </td>
                   <td>'.$row_postt['number_n'].'</td>
                   <td>'.$row_postt['sitysend'].'</td>
                   <td>'.$row_postt['datesend'].'</td>
                   <td><input type="text" name="editsitya" value="'.$row_postt['sityarrival'].'"></td>
                   <td>'.$row_postt['datearrival'].'</td>
                   <td>'.$row_postt['timearrival'].'</td>
                   <td>'.$row_postt['recipient'].'</td>
                   <td>'.$row_postt['comment'].'</td>
                </tr>');       
        }         
                while ($row_postt = mysql_fetch_assoc($postt));
             
        echo ("<div class=\"clear\"></div><div class=\"navi\">");
        echo pages ($p);
        echo ("</div>");         
    ?>
                </table></form>
Вывод сделал сразу в форму, чтобы можно было редактировать отдельно каждую запись кнопкой edit, id записи в базе внес в поле невидимое hidden.

Код обновления записи в бд.
PHP:
    <?php
          header("Content-Type: text/plain; charset=UTF-8");
            // Присваивание переменной значения полей форм
          $editsitya =  $_POST['editsitya'];
          $id = $_POST['epostID'];
    // Вывод переменной, сделал для проверки
                     echo "<br>'$id'";
          echo "<br>'$editsitya'";
            // Статус
            $status = "";

            /* файл подключения к MySQL серверу. */
       
            include '../config.php';
           
            /* фильтруем все спец-символы. защита от SQL Injection */
     
            $editsitya = mysql_escape_string(htmlspecialchars($editsitya));
          
            $editsitya = mysql_real_escape_string($editsitya);
       
    // обновляем запись в БД
          $query = "UPDATE tabletrack SET sityarrival = '$editsitya' WHERE id='$id'";
          if($result == mysql_query($query)) {
                $status = "Готово!!! Накладная перезаписана!";
            } else {
                $status = "При добавлении почтового отправления в базу данных произошла ошибка. Информация не была записана.";

            }

            mysql_close($link);
            echo $status; /* выводим статус исполнения */
Проблема: базу не обновляет, т.к. присваивает переменной только первый ID записи при нажатии на любоу кнопку edit. не могу понять почему, при просмотре кода в браузере в каждой записи(строке) свой id выводит нормально, который совпадает с базой.

изменил вывод, для каждой строки своя форма, но теперь id все время = 2.
 

Placido

Наблюдаю
1. Включить вывод ошибок error_reporting(E_ALL) - при этом коде сразу получите кучу нотисов;
2. <form></form> - внутрь цикла while, а do {} while {} заменить на while () {}
3. $editsitya = mysql_escape_string(htmlspecialchars($editsitya)); - убрать, htmlspecialchars используется при выводе, а не при вводе.
4. Удачность/неудачность обновления по mysql_query() определить нельзя, поэтому
PHP:
$query = "UPDATE tabletrack SET sityarrival = '$editsitya' WHERE id='$id'";
          if($result == mysql_query($query)) {...
заменить на
PHP:
 $query = "UPDATE tabletrack SET sityarrival = '$editsitya' WHERE id='$id'";
 mysql_query($query) or die(mysql_error());
          if(mysql_affected_rows > 0) {...
 

Mesher

Новичок
Нашел я свою ошибку, это была проблема в ajax скрипте. ява скрипт плохо знаю, поэтому не могу понять почему так.
Без скрипта обновление работает.
Спасибо за советы.

Этот код позаимствовал, но везде его добавлял, т.е. при внесении новой записи в бд и вывод из базы все работало хорошо.
Вот код:
PHP:
function createXMLHttp() {
if(typeof XMLHttpRequest != "undefined") { // для браузеров аля Mozilla

return new XMLHttpRequest();
} else if(window.ActiveXObject) { // для Internet Explorer (all versions)
var aVersions = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0",
"MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp",
"Microsoft.XMLHttp"
];
for (var i = 0; i < aVersions.length; i++) {
try { //
var oXmlHttp = new ActiveXObject(aVersions[i]);

return oXmlHttp;
} catch (oError) {

}
}
throw new Error("Невозможно создать объект XMLHttp.");
}
}

/* Очень важная функция, обратите на неё внимание.
Формирует строку запроса "name1=value1&name2=value2&name3...".
Принимает один аргумент - ссылку на форму.
*/

function getRequestBody(oForm) {
var aParams = new Array();
for(var i = 0; i < oForm.elements.length; i++) {
var sParam = encodeURIComponent(oForm.elements[i].name);
sParam += "=";
sParam += encodeURIComponent(oForm.elements[i].value);
aParams.push(sParam);
}
return aParams.join("&");
}


/* В этой ф-ции мы создаём объект XmlHttp, формируем запрос, инициализируем перехватчик состояний
onreadystatechange, и посылаем наш запрос.

Обратите внимание, что во втором аргументе метода open(..) мы передаём
ссылку на oForm.action, это сделано как из соображений безопасности, так и ради
того что-бы сценарий можно-было бы использовать для работы с несколькими страницами.

Так-же, стоит отметить факт отправки дополнительного заголовка: "appilaction/x-www-form-urlencoded"
Большинство языков (в том числе и PHP), требуют этого, для корректного выполнения
синтаксического анализа пришедших данных. Этот момент очень важен.

*/

function sendRequest() {
var oForm = document.forms[0];
var sBody = getRequestBody(oForm);
var oXmlHttp = createXMLHttp();

oXmlHttp.open("POST",oForm.action, true);
oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

oXmlHttp.onreadystatechange = function() {
if(oXmlHttp.readyState == 4) {
if(oXmlHttp.status == 200) {
saveResult(oXmlHttp.responseText);
} else {
saveResult("Ошибка: " + oXmlHttp.statusText);
}
}
};

oXmlHttp.send(sBody);
}

function saveResult(sText) {
var sElem = document.getElementById("divStatus");
sElem.innerHTML = sText;
}
Может подскажите как к скрипту прикрутить ?
 

Dovg

Продвинутый новичок
Placido приведенный выше запрос вполне может не выполнится из-за uniq check, например. Умирать при этом совсем не обязательно.
 
Сверху