- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
В общем суть такая....
Есть некая разметка:
<td><div id="channel-1"><a href="#" onclick="update_channel_comment(1)">комментарий</a></div></td>
Человек кликает по этому комментарию-ссылке, и ему вместо него выскакивает поле для ввода:
<input type=\"text\" id=\"channelComment\" onBlur=\"insert_channel_comment("+channelID+", "+commentValue+")\">
Он такой вводит новый комментарий и всё, коммент обновляется в базе и челу в ответ выводится такая же ссылка с новым комментарием.
Это идея. Теперь о том, как это работает...
update_channel_comment(channelID)
function update_channel_comment(channelID) {
var channel = "#channel-"+channelID;
var commentValue = $(channel).val();
var html = "<input type=\"text\" id=\"channelComment\" onBlur=\"insert_channel_comment("+channelID+", "+this.value+")\">";
$(channel).html(html);
}
insert_channel_comment(channelID, commentValue)
function insert_channel_comment(channelID, commentValue) {
if (commentValue !== '') {
$.ajax({
type: 'POST',
datatype: 'json',
url: '/includes/ajax.php?request=insert_channel_comment',
data: {'channel_id':channelID, 'comment':commentValue},
success: function(data) {
var json = $.parseJSON(data);
if (json.success == true) {
var html = "<a href=\"#\" onclick=\"update_channel_comment("+json.channel_id+")\">"+json.updated_comment+"</a>";
var elem_id = "#channel-"+json.channel_id;
$(elem_id).html(html);
}
else {
alert(json.error);
return false;
}
}
});
}
else {
alert('Empty comment!');
}
и, наконец, сама реализация запроса:
if ($_GET['request'] == 'insert_channel_comment') {
$channel_id = $_POST['channel_id'];
$comment = $_POST['comment'];
global $sql;
$data['channel_id'] = (int)$channel_id;
$query = "UPDATE channels SET channel_comment = '".$sql->real_escape_string($comment)."' WHERE id = '".$channel_id."'";
$sql->query($query);
if (empty($sql->error)) {
$query = "SELECT channel_comment FROM channels WHERE id = '".$channel_id."'";
$result = $sql->query($query);
$result_row = $result->fetch_row();
$data['updated_comment'] = $result_row[0];
$data['success'] = true;
}
else {
$data['success'] = false;
$data['error'] = $sql->error;
}
die(json_encode($data));
}
В принципе это работает, но... как-то странно.... добавляю коммент - добавляется. Изменяю - пустая строка. Изменяю второй раз - всё ок. Третий раз - всё ок. Четвертый раз - пустая строка. Никак не могу понять закономерность, а самое главное - выяснить, в чём прикол. PHP знаю, ajax знаком, вроде выводится всё то, дебажил, выводил различные переменные, всё норм... не могу понять, откуда такой странный глюк.
Я бы для начала сравнил запросы которые к ajax.php идут одинаковые они или нет в случаях когда всё нормально и когда "глючит".
У вас тут по коду SQL Injection
и
надо поправить на
$channel_id = (int) $_POST['channel_id'];
Так же у вас не проверяется что коммент не пустой и в целом конечно тут всё так себе