#php #mysql #html
#php #mysql #HTML
Вопрос:
Я создал автосохранение через Ajax для своей системы управления контентом. Возникла проблема. Проблема в том, что когда я тестирую на своем локальном сервере, php-сторона легко обновляет большой фрагмент данных, но когда я тестирую его на своем веб-хостинге, я вижу, что если обновленный контент представляет собой большие данные, то php не обновляет строку таблицы с первой попытки, обновляет только послевторая попытка. Есть предложения? Как справиться с этой проблемой?
Сторона PHP
<?php
session_start();
require '../../core/includes/common.php';
$err=array();
$name=filter($_POST['name'],$db);
$id=$db->escape_string($_POST['id']);
$title=filter($_POST['title'], $db);
$parentcheck=$db->escape_string($_POST['parentcheck']);
if(isset ($_POST['parent'])) $parent=$db->escape_string($_POST['parent']);
else $parent=$parentcheck;
$menu=$db->escape_string($_POST['menu']);
$content = html($_POST['content'], $db);
if (!isset($content)) die('error');
$result=$db->query("UPDATE pages AS p, menu AS m SET m.parent='$parent', m.name='$name', m.showinmenu='$menu', p.id='$id', p.title='$title', p.content='$content' WHERE m.id='$id' AND p.id=m.id") or die($db->error);
if ($result){
echo "{";
echo '"msg": "Success" ';
echo "}";
}
else{
echo "{";
echo
'"err": "Error"';
echo "}";
}
?>
Комментарии:
1. насколько велики ваши данные ?! Я не думаю, что можно превысить ограничение по времени выполнения php с сохранением простой строки html. Возможно, ваш столбец базы данных на сервере слишком мал, и ошибка не отображается или что-то в этом роде … кроме того, нам могут понадобиться некоторые примеры кода 😉
2. Выдает ли ваш php какое-либо предупреждение или ошибку?
3. нет. я обновлю свой вопрос. проверьте, пожалуйста
4. он возвращает успех, и я отслеживаю все процессы с помощью firebug. Php не возвращает ошибку, но не обновляет таблицу БД. Странно. Я не могу найти неправильный код, логику. Он отлично работает на моем локальном сервере
Ответ №1:
Похоже, что в вашем коде может быть множество потенциальных ошибок, этот пример должен только показать, что вы можете сделать, чтобы всегда возвращать что-то обратно, что может быть в формате, с которым может работать ваш AJAX-запрос:
Вы смешиваете два типа обработки ошибок: сразу умираете и сообщаете о результате вашего действия AJAX. Вы должны делать так или иначе, этот отчет всегда возвращается:
<?php
session_start();
require '../../core/includes/common.php';
...
if (!isset($content)) die('{"err": "No content"}'); // This will never happen BTW.
$result = $db->query("UPDATE pages AS p, menu AS m SET m.parent='$parent', m.name='$name', m.showinmenu='$menu', p.id='$id', p.title='$title', p.content='$content' WHERE m.id='$id' AND p.id=m.id");
if ($result)
{
echo '{"msg": "Success"'}';
}
else
{
echo '{"err": "Error"}';
}
?>
Ответ №2:
Можете ли вы сделать что-то подобное, проанализировать содержимое html только для важного содержимого, то есть для div, а не для всей страницы, текстовый тип данных Mysql поддерживает 2 ГБ, но перегружать mysql небезопасно.
Идея 1 Можете ли вы случайно сохранить содержимое HTML в XML и передать ссылку вместе с узлом в столбце Mysql, чтобы AJAX получал xml и узел для отображения данных на лету.
Идея 2 Сжать содержимое и сохранить в Mysql