powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / ExtJS + PHP сохранение измененных данных в БД
20 сообщений из 20, страница 1 из 1
ExtJS + PHP сохранение измененных данных в БД
    #38388307
RomaT24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с распространенной для новичков проблемой - есть Grid с возможностью редактирования загруженных туда данных из БД и сама проблема - при изменении данных и последующем обновлении страницы ничего не обновляется, база остается неизменной. В FireBug проверил, что после изменения данных POST отправляется (в виде JSON-строки, в которой было изменение). Но как правильно эти данные принять, и сделать Update, не могу пока понять(
Код HTML:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<html>
<head>
    <title>ExtJS Example</title>
    
    <link rel="stylesheet" type="text/css" href="resources/css/ext-all.css">
    <script type="text/javascript" src="ext-all-debug.js"></script>
	 <script>
      Ext.Loader.setConfig({
        enabled: true
      });
    </script>
    <script type="text/javascript" src="f_app1.js"></script>
</head>
<body></body>
</html>



Код js:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
Ext.application({
    name: 'Hello, Ext!',
    launch: function() {

Ext.define('Cust', {
    extend: 'Ext.data.Model',
	idProperty: 'id',
    fields: [
        {name: 'id', type: 'int'},
        {name: 'fname', type: 'string'},
        {name: 'sname', type: 'string'}
    ]
});

			
var CellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
        clicksToEdit: 1
       // autoCancel: false
    });
	
var store = new Ext.data.JsonStore({
  autoLoad: true,
  autoSync: true,
  model: 'Cust',
  proxy: {
        type: 'ajax',
		api:{
             read:'f_DB.php?act=read',
             update:'f_DB.php?act=update'
            },
            reader: {
               type: "json" //json
            },
            writer: {
                type: "json" //json
            },

        }

});

Ext.create('Ext.grid.Panel', {
        title: 'Пользователи',
        height: 250,
        width: 500,
        store: store,
		plugins: CellEditing,
        columns: [{
           header:'ID',         
           dataIndex:'id',
           editor: {
           allowBlank: false
           }		   
      },{
            header:'Имя',        
            dataIndex:'fname',
			editor: {
            allowBlank: false,
           }
        }, {
            header:'Фамилия',         
            dataIndex:'sname',
			editor: {
            allowBlank: false
           }
        }],
		frame: true,
        renderTo: Ext.getBody()
    });				

}
});	



Код PHP:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
<?php
$user="Roman";
$password="123";
$db="Roman";
$host="localhost";
$link= mysql_connect($host, $user, $password) or die("MySQL сервер недоступен!".mysql_error());
mysql_select_db($db,$link) or die("Нет соединения с БД".mysql_error());

$act = $_REQUEST['act'];

$objects_table = 'customer';
//$id = 'id';  // поле ID


$data = json_decode(file_get_contents('php://input'), true);
$devid   = $data['id'];
$fname   = $data['fname'];
$sname   = $data['sname'];

switch ($act) {
    case 'read':
       $query = "select * from $objects_table";
       $result = mysql_query($query, $link);
       while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
         {
           $data_c[] = array(
           'id' => $row['id'],
           'fname' => $row['fname'],
           'sname' => $row['sname'],
           );
         }
      $d = json_encode($data_c);
      echo $d;
	  break;
	case 'update':
        $sql = "begin
                    update $objects_table 
                     set 
                         fname = $fname,						 
                     where id  = $devid;
                    commit;
                end;";
        $result_upd = mysql_query($sql, $link);		
        break;
	default:
        echo "default";
}; 

mysql_free_result($result);
mysql_close($link);
?>



Адресовал вопрос сюда, так как сам не знаю, в какой части кода проблема) Буду признателен за помощь
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38388321
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RomaT24В FireBug проверил, что после изменения данных POST отправляется (в виде JSON-строки, в которой было изменение). Но как правильно эти данные принять, и сделать Update, не могу пока понятьрекомендую Вам попросить модератора перекинуть тему в раздел php
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38388375
RomaT24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Паганель, уже сделал) но, может, вы можете что-то подсказать?
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38388466
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Код: sql
1.
2.
3.
4.
                    update $objects_table 
                     set 
                         fname = $fname,						 
                     where id  = $devid;


Здесь $fname и $devid - точно оба являются числами?

В любом случае, перед использованием принимаемых данных в запросе следует выполнить их проверку на соответствие требованиям. Почему следует? Потому что sql injection (в гугл/яндекс).

автор
Код: sql
1.
$result_upd = mysql_query($sql, $link);

Сказав "А", надо бы и "Б" сказать. Раз уж результат выполнения запроса присваиваете какой-то переменной, так используйте ее для контроля за выполнением запроса. Еще mysql_error() никто не отменял.

Впрочем, последнее весьма спорно. Уже давно рекомендуют прекратить использование функций mysql_* и заменить их альтернативными (мож лет через несколько и в учебниках об этом и напишут, а пока из PHP 5.5 эти функции уже выкинули).
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38388467
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опс, да в запросе еще и запятая лишняя.
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38388472
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, mysql_query может обрабатывать только один запрос, а не пачку. Так что, бегин, апдейт и коммит - это три отдельных запроса. И без ";" в конце (смотрите в мануал).
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38388575
RomaT24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, убрал запятую, добавил проверку на ошибки. В результате ошибка 1054 "Unknown column in 'field list' ". Но проблема в том, что в основном на всех сайтах в качестве решения этой проблемы советуют просто добавить этот столбец программно. Допустим, но у меня неизвестен не сам столбец, а лишь значение измененной ячейки из этого столбца, то есть, понятное дело, добавлять эту ячейку нет смысла, так как при последующем изменении он снова ее не увидит.

Код PHP после изменений:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
 
<?php
$user="Roman";
$password="123";
$db="Roman";
$host="localhost";
$link= mysql_connect($host, $user, $password) or die("MySQL сервер недоступен!".mysql_error());
mysql_select_db($db,$link) or die("Нет соединения с БД".mysql_error());

$act = $_REQUEST['act'];

$objects_table = 'customer';
//$id = 'id';  // поле ID


$data = json_decode(file_get_contents('php://input'), true);
$id   = $data['id'];
$F_name   = $data['F_name'];
$sname   = $data['sname'];

switch ($act) {
    case 'read':
       $query = "select * from $objects_table";
       $result = mysql_query($query, $link);
       while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
         {
           $data_c[] = array(
           'id' => $row['id'],
           'F_name' => $row['F_name'],
           'sname' => $row['sname'],
           );
         }
      $d = json_encode($data_c);
      echo $d;
	  break;
	case 'update':
        $sql = "
                   update customer
                     set 
                         F_name = $F_name					 
                     where id  = $id
                ";
        $result_upd = mysql_query($sql, $link) or die("Error!".mysql_error());;		
        break;
	default:
        echo "default";
}; 

//mysql_free_result($result);
mysql_close($link);
?>




И еще, F_name это строка. И если в качестве проверки самого update присвоить полю F_name фиксированное значение, например, 'Ivanov', то все прекрасно обновляется.

Очень бесит, что ошибка, скорее всего, проста, но не могу отыскать решение в интернете(
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38388585
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RomaT24F_name это строкаНу так и задавайте строку как положено - в одиночных кавычках. Иначе это будет именем поля.
RomaT24не могу отыскать решение в интернетеНачните с изучения мануала . Хотя бы, основы. Для начала.

Кроме того, не будет лишним привыкнуть писать красиво, структурировано, и при этом соблюдая правила. Как вариант:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
$sql = "
	UPDATE
		`customer`
        SET
        	`F_name` = '{$F_name}'
        WHERE
		`id` = {$id}
";

Читаемость кода от этого только выигрывает, да и банальные ошибки ищутся гораздо легче, не говоря о том, что некоторых можно избежать вовсе (попробуйте дать полю имя, идентичное какому-либо служебному слову).
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38389210
RomaT24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, спасибо огромное, всё заработало) Вся проблема-то в самих кавычках, блин) А мануал уже изучаю)
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38389462
RomaT24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, прошу прощения, еще один вопрос, чтобы тему отдельно не создавать) Если в таблице изменить значения сразу в нескольких ячейках, то обновляется только одно, последнее по порядку изменения, поле, остальные не изменяются. Получается, что в PHP мы принимаем только последний POST? Но как сделать, чтобы обрабатывались все поля?
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38389466
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что говорит Firebug? Запросов один или два?
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38389485
RomaT24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Паганель, при каждом изменении добавляется POST, но и его содержимое увеличивается на одну JSON-строку, где были сделаны изменения. Но посмотрел "Ответ" и там "Error!You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6"

А в PHP-файле line 6 соответствует
Код: php
1.
$link= mysql_connect($host, $user, $password) or die("MySQL сервер недоступен!".mysql_error());



Весь файл:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
<?php
$user="Roman";
$password="123";
$db="Roman";
$host="localhost";
$link= mysql_connect($host, $user, $password) or die("MySQL сервер недоступен!".mysql_error());
mysql_select_db($db,$link) or die("Нет соединения с БД".mysql_error());

$act = $_REQUEST['act'];

$objects_table = 'customer';
//$id = 'id';  // поле ID


$data = json_decode(file_get_contents('php://input'), true);
$id   = $data['id'];
$F_name   = $data['F_name'];
$sname   = $data['sname'];

switch ($act) {
    case 'read':
       $query = "select * from $objects_table";
       $result = mysql_query($query, $link);
       while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
         {
           $data_c[] = array(
           'id' => $row['id'],
           'F_name' => $row['F_name'],
           'sname' => $row['sname'],
           );
         }
      $d = json_encode($data_c);
      echo $d;
	  break;
	case 'update':
        $sql = "
                   UPDATE
				        customer
                   SET 
                         `F_name` = '{$F_name}',
                         `sname` = '{$sname}'						 
                   WHERE id  = {$id}
                ";
        $result_upd = mysql_query($sql, $link) or die("Error!".mysql_error());;		
        break;
	default:
        echo "default";
}; 

//mysql_free_result($result);
mysql_close($link);
?>
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38389505
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставьте уже в своем нетбинсе точку останова и посмотрите что внутри $sql

про инъекции промолчу т.к. уже сказали
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38389529
RomaT24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Паганель, я в Notepad пишу, с ним никак этот вопрос не решить?
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38389719
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RomaT24Получается, что в PHP мы принимаем только последний POST?var_dump($_POST); для начала. А там уж смотрите, что принимается.
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38390016
RomaT24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, уж простите за глупый вопрос, но где этот var_dump вставить?) Если в отдельный php файл, то при его запуске выводит array(0) { } (уже после того, как в основном файле POST отправлен), а в моем коде как его применить?
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38390115
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RomaT24,

В тот файл, где принимаете входные данные. Однако, не пора ли взяться за учебник?
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38390190
RomaT24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, я понимаю, что в файл, но где бы я не размещал в нем эту проверку, не выводится тогда вообще ничего. В учебниках и интернете очень хорошо описываются функции, методы и тд. Просто так, предварительно не поискав решение в интернете, я бы вам такие вопросы не задавал)
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38390247
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RomaT24где бы я не размещал в нем эту проверку, не выводится тогда вообще ничего var_dump тем и хороша, что в любом случае что-то выведет, будь то пустая строка или пустой массив, не определенная ранее переменная и т.п. Даже при отключенных сообщениях об ошибках. Если же действительно ничего не выводит, то причин вижу две: не там смотрите или этот кусок кода не выполняется.
...
Рейтинг: 0 / 0
ExtJS + PHP сохранение измененных данных в БД
    #38390671
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как можно разрабатывать без среды разработки? как можно отлаживать без точек останова? как можно вообще к проекту приступать без нормально подготовленного рабочего места? я не понимаю. изнините за оффтоп
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / ExtJS + PHP сохранение измененных данных в БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]