<?php
require_once('dbdata.php');
try {
//читаем параметры
$curPage = $_POST['page'];
$rowsPerPage = $_POST['rows'];
$sortingField = $_POST['sidx'];
$sortingOrder = $_POST['sord'];
//подключаемся к базе
$dbh = new PDO('mysql:host='.$dbHost.';dbname='.$dbName, $dbUser, $dbPass);
//указываем, мы хотим использовать utf8
$dbh->exec('SET CHARACTER SET utf8');
//определяем количество записей в таблице
$rows = $dbh->query('SELECT COUNT(id) AS count FROM users');
$totalRows = $rows->fetch(PDO::FETCH_ASSOC);
$firstRowIndex = $curPage * $rowsPerPage - $rowsPerPage;
//получаем список пользователей из базы
$res = $dbh->query('SELECT * FROM users ORDER BY '.$sortingField.' '.$sortingOrder.' LIMIT '.$firstRowIndex.', '.$rowsPerPage);
//сохраняем номер текущей страницы, общее количество страниц и общее количество записей
$response->page = $curPage;
$response->total = ceil($totalRows['count'] / $rowsPerPage);
$response->records = $totalRows['count'];
$i=0;
while($row = $res->fetch(PDO::FETCH_ASSOC)) {
$response->rows[$i]['id']=$row['id'];
$response->rows[$i]['cell']=array($row['id'], $row['surname'], $row['fname'], $row['lname']);
$i++;
}
echo json_encode($response);
}
catch (PDOException $e) {
echo 'Database error: '.$e->getMessage();
}
// end of getdata.php
Спустя 15 минут, 50 секунд (4.07.2012 - 08:59) sergeiss написал(а):
Кроме меня и еще пары человек, по Постгре тебе не подскажут тут :)
Вобщем, давай по порядку. Где-то должна выдаваться ошибка. Где именно? Если подключение успешно, то я думаю, что вот здесь
потому что в Постгре нету такой команды!!!
Да и вообще у тебя не видно, где ты именно к Постгре подключаешься. К Мускулю - видно. А к Постгре - не видно.
PS. Используй специальные тэги при вводе кода в сообщение, тогда он подсвечивается и лучше читается. Для этого есть кнопки справа над окном ввода сообщения. PHP, SQL и другие.
Вобщем, давай по порядку. Где-то должна выдаваться ошибка. Где именно? Если подключение успешно, то я думаю, что вот здесь
$dbh->exec('SET CHARACTER SET utf8');
потому что в Постгре нету такой команды!!!
Да и вообще у тебя не видно, где ты именно к Постгре подключаешься. К Мускулю - видно. А к Постгре - не видно.
PS. Используй специальные тэги при вводе кода в сообщение, тогда он подсвечивается и лучше читается. Для этого есть кнопки справа над окном ввода сообщения. PHP, SQL и другие.
Спустя 1 минута, 52 секунды (4.07.2012 - 09:00) Natair написал(а):
Так я и не могу сообразить как этот код изменить под Постгри. Пробовал команды переписать, так на странице ничего не отбражаеться. А когда использую Майскл все работает замечательно.
Спустя 1 минута, 26 секунд (4.07.2012 - 09:02) sergeiss написал(а):
ОК. Начни с подключения тогда. Какие задаешь параметры подключения, подключаешься ли? И как это проверяешь?
Сделай контрольные выводы состояний.
Сделай контрольные выводы состояний.
Спустя 2 минуты, 25 секунд (4.07.2012 - 09:04) Natair написал(а):
Я новичек в этой теме, но в общем подключение сделал так:
$dbh = new PDO('pgsql:dbname=relayprot; port=5432; host=astra; username=andrey; password=andrey');
$dbh = new PDO('pgsql:dbname=relayprot; port=5432; host=astra; username=andrey; password=andrey');
Спустя 5 минут, 13 секунд (4.07.2012 - 09:10) sergeiss написал(а):
Давай определимся с терминами
"Сделал подключение" - это подключился. А ты пока только "задал параметры подключения" и не понятно, подключился ли. Вот я и спрашиваю - ты подключился? И как это проверил?

Спустя 2 минуты, 13 секунд (4.07.2012 - 09:12) Natair написал(а):
Хм, а как это проверить? Понимаю, что групый вопрос, но все же

Спустя 7 минут, 6 секунд (4.07.2012 - 09:19) sergeiss написал(а):
Ты пользуешься неким классом. С которым я лично не работал никогда. Ищи в свойствах/методах класса. Как вариант, проверь, что ты получаешь после вызова
Либо объект, либо false - но это мои предположения, я не знаю, что должно быть. Я с Постгре "напрямую" работаю. pg_connect() - и поехали.
$dbh = new PDO('pgsql:dbname=relayprot; port=5432; host=astra; username=andrey; password=andrey');
Либо объект, либо false - но это мои предположения, я не знаю, что должно быть. Я с Постгре "напрямую" работаю. pg_connect() - и поехали.
Спустя 3 минуты, 27 секунд (4.07.2012 - 09:22) Natair написал(а):
Мне нужно было создать редактируемую таблицу и отправлять данные таблицы на сервер.
Нашел информацию здесь: http://www.simplecoding.org/jqgrid-redakti...redaktorov.html
Сам с таким не работал, да и интересно оно выглядет при использовании Mysql. Вот и хочеться все это сделать под Postgresql, на котором у меня все и работает.
Нашел информацию здесь: http://www.simplecoding.org/jqgrid-redakti...redaktorov.html
Сам с таким не работал, да и интересно оно выглядет при использовании Mysql. Вот и хочеться все это сделать под Postgresql, на котором у меня все и работает.
Спустя 30 минут, 33 секунды (4.07.2012 - 09:53) Natair написал(а):
Не обязательно использовать именно этот вариант. В целом требуется сделать возможность редактирования таблицы.
Нашел еще такой вариант:
$(function() {
$('td').click(function(e) {
//ловим элемент, по которому кликнули
var t = e.target || e.srcElement;
//получаем название тега
var elm_name = t.tagName.toLowerCase();
//если это инпут - ничего не делаем
if(elm_name == 'input') {return false;}
var val = $(this).html();
var code = '<input type="text" id="edit" value="'+val+'" />';
$(this).empty().append(code);
$('#edit').focus();
$('#edit').blur(function() {
var val = $(this).val();
$(this).parent().empty().html(val);
});
});
});
$(window).keydown(function(event){
//ловим событие нажатия клавиши
if(event.keyCode == 13) { //если это Enter
$('#edit').blur(); //снимаем фокус с поля ввода
}
});
Но ни как не могу сообразить, что надо написать, чтобы данные отправлялись на сервер.
Нашел еще такой вариант:
$(function() {
$('td').click(function(e) {
//ловим элемент, по которому кликнули
var t = e.target || e.srcElement;
//получаем название тега
var elm_name = t.tagName.toLowerCase();
//если это инпут - ничего не делаем
if(elm_name == 'input') {return false;}
var val = $(this).html();
var code = '<input type="text" id="edit" value="'+val+'" />';
$(this).empty().append(code);
$('#edit').focus();
$('#edit').blur(function() {
var val = $(this).val();
$(this).parent().empty().html(val);
});
});
});
$(window).keydown(function(event){
//ловим событие нажатия клавиши
if(event.keyCode == 13) { //если это Enter
$('#edit').blur(); //снимаем фокус с поля ввода
}
});
Но ни как не могу сообразить, что надо написать, чтобы данные отправлялись на сервер.
Спустя 3 минуты, 5 секунд (4.07.2012 - 09:56) sergeiss написал(а):
Natair - так я и не понял. У тебя что с подключением к БД Постгре? Проходит оно или нет?
Кстати, для работы с ПДО, согласно хэлпу, надо подключать библиотеки для каждого типа БД. Например,
Так что проверь для начала свой php.ini и наличие самих библиотек в нужном каталоге, где все библиотеки лежат.
Как я понял, пока надо разобраться с тем, что есть подключение к БД или его нет.
Кстати, для работы с ПДО, согласно хэлпу, надо подключать библиотеки для каждого типа БД. Например,
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
Так что проверь для начала свой php.ini и наличие самих библиотек в нужном каталоге, где все библиотеки лежат.
Как я понял, пока надо разобраться с тем, что есть подключение к БД или его нет.
Спустя 5 минут, 26 секунд (4.07.2012 - 10:01) Natair написал(а):
А если рассмотреть то, что я добавил недавно и не заморачиватся с PDO?
Спустя 16 минут, 47 секунд (4.07.2012 - 10:18) sergeiss написал(а):
Цитата (Natair @ 4.07.2012 - 11:01) |
А если рассмотреть то, что я добавил недавно и не заморачиватся с PDO? |
Ты там добавил что-то из JQuery (с которым я также не работал). Но только это клиентская часть! А на сервере все равно что-то надо делать с данными. Так что можно и не с ПДО заморачиваться, а с "прямой" работой с БД. Но с ней, т.е. с БД, все равно работать придется на сервере.
Спустя 7 минут, 37 секунд (4.07.2012 - 10:26) Natair написал(а):
Вот и я не работал. Может подскажите примеры редактируемых таблиц? (желательно написанных под Postgresql)
Спустя 48 минут, 53 секунды (4.07.2012 - 11:15) sergeiss написал(а):
Так я не понял до конца суть проблемы. Речь идет о редакторе таблиц, работающем в браузере? Если да, то при чем тут тип базы данных? Основные заморочки будут на клиентской стороне и не зависят от типа БД.
Ты как-нибудь разбей задачу на части сначала, что ли. Где проблемы на сервере, где проблемы с клиентом. А то такое ощущение, что ты сам не представляешь до конца, что же хочешь - кроме некоего смутного ощущения.
Ты как-нибудь разбей задачу на части сначала, что ли. Где проблемы на сервере, где проблемы с клиентом. А то такое ощущение, что ты сам не представляешь до конца, что же хочешь - кроме некоего смутного ощущения.
Спустя 4 минуты, 56 секунд (4.07.2012 - 11:20) Natair написал(а):
Хочу сделать редактор таблицы, для удобства заноса информации на сервер. Но ни как не могу сообразить как это надо сделать?
Смог сделать построчный ввод в таблицу, но когда записей много то это очень долго. Вот поэтому и хочется вводить данные прямо в таблицу и отправлять все вместе.
Смог сделать построчный ввод в таблицу, но когда записей много то это очень долго. Вот поэтому и хочется вводить данные прямо в таблицу и отправлять все вместе.
Спустя 1 день, 11 минут, 36 секунд (5.07.2012 - 11:31) Natair написал(а):
Ошибку нашел и все исправил, осталось только одно. LIMIT в mysql и postgresql работает по разному, а хотелось бы чтобы это работало и в postgresql подскажите что надо сделать.
<?php
require_once('dbdata.php');
try {
//читаем параметры
$curPage = $_POST['page'];
$rowsPerPage = $_POST['rows'];
$sortingField = $_POST['sidx'];
$sortingOrder = $_POST['sord'];
//подключаемся к базе
$dbh = new PDO('pgsql:host='.$dbHost.';dbname='.$dbName, $dbUser, $dbPass);
//определяем количество записей в таблице
$rows = $dbh->query('SELECT COUNT(id) AS count FROM users');
$totalRows = $rows->fetch(PDO::FETCH_ASSOC);
$firstRowIndex = $curPage * $rowsPerPage - $rowsPerPage;
//получаем список пользователей из базы
$res = $dbh->query('SELECT * FROM users ORDER BY '.$sortingField.' '.$sortingOrder);
//сохраняем номер текущей страницы, общее количество страниц и общее количество записей
$response->page = $curPage;
$response->total = ceil($totalRows['count'] / $rowsPerPage);
$response->records = $totalRows['count'];
$i=0;
while($row = $res->fetch(PDO::FETCH_ASSOC)) {
$response->rows[$i]['id']=$row['id'];
$response->rows[$i]['cell']=array($row['id'], $row['surname'], $row['fname'], $row['lname']);
$i++;
}
echo json_encode($response);
}
catch (PDOException $e) {
echo 'Database error: '.$e->getMessage();
}
// end of getdata.php
Спустя 1 час, 47 минут, 33 секунды (5.07.2012 - 13:19) sergeiss написал(а):
А где у тебя вообще тут ЛИМИТ? Пока запрос, как он в Мускуле был. И не надо, плз, весь скрипт показывать!
Если говорим о запросе, то только его и показывай. И не забывай использовать тэги оформления кодов! Это кноки справа над полем ввода сообщений. А то я уже замучался за тобой их вводить...
PS. И напиши, в чем была ошибка. А то мало ли, кто сюда зайдет с подобной проблемой. Глядишь, твой ответ ему и поможет.

PS. И напиши, в чем была ошибка. А то мало ли, кто сюда зайдет с подобной проблемой. Глядишь, твой ответ ему и поможет.
Спустя 20 часов, 14 минут, 35 секунд (6.07.2012 - 09:33) Natair написал(а):
Изначально было так:
Я переделал вот так и все заработало:
Вот теперь хотелось бы узнать есть ли аналог LIMIT в Postgresql
$res = $dbh->query('SELECT * FROM users ORDER BY '.$sortingField.' '.$sortingOrder.' LIMIT '.$firstRowIndex.', '.$rowsPerPage);
Я переделал вот так и все заработало:
$res = $dbh->query('SELECT * FROM users ORDER BY '.$sortingField.' '.$sortingOrder);
Вот теперь хотелось бы узнать есть ли аналог LIMIT в Postgresql
Спустя 52 минуты, 56 секунд (6.07.2012 - 10:26) Michael написал(а):