Mysql, не сохраняющий разрывы строки из JQuery ajax сообщение?

У меня есть приложение PHP/Mysql, которое позволяет пользователям отправить текст от формы. Когда я вставляю текст от текстовой области HTML в мою mysql таблицу, это не сохраняет возвраты/разрывы строки каретки. Текст не хранится в DB как "Эй Так, \n Это новая строка". Это снабжено пробелом в столбце (точно как, он вводится), но нет никакого способа для меня произвести его с nl2br() и сохраните повреждения. Я выхожу прежде, чем вставить текст как так:

$foo_text = mysql_real_escape_string(ucfirst($_POST['foo_text']));

Но даже если я удаляю все и просто использую параметр POST, он все еще делает то же самое. Это имело бы какое-либо отношение ко мне сериализация и регистрация этой формы через ajax (я использую JQUERY)? Я нашел это на stackoverflow, но я действительно не вижу решения. Я отправляю с:

$.ajax({
        type: "POST",
        url: "insertFooBar.php",
        data: $("#foo_form").serialize(),
        success: function(msg) {
            ETC...
        }
    })

Там что-то действительно очевидно, что я отсутствую здесь? Я застреваю...

Заранее спасибо за любую справку!

5
задан Community 23 May 2017 в 12:07
поделиться

2 ответа

Импорт: с помощью System.Runtime.InteropServices;

Мое предложение, когда мышь находится в форме, обрабатывать события перемещения мыши вверх (Чтобы захватить мышь вне формы с помощью крючка окна, посмотрите здесь: http://support.microsoft.com/kb/318804 ), и когда кнопка мыши отпущена, получить положение мыши на экране, и получить окно за курсором, используя ссылку вы предоставили так:

[DllImport("user32.dll")]
public static extern IntPtr WindowFromPoint(Point lpPoint);
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out Point lpPoint);
public static IntPtr GetWindowUnderCursor()
{
   Point ptCursor = new Point();
   if (!(PInvoke.GetCursorPos(out ptCursor)))
       return IntPtr.Zero;
   return WindowFromPoint(ptCursor);
}

Теперь у вас есть ручка окна, оттуда возможности бесконечны.

ПРИМЕЧАНИЕ: Ссылка выше (крюк окна) будет работать только в том случае, если мышь падает на вашей форме, и крючок заканчивается, когда мышь поднимается

-121--4859390-

Это более надежный подход, который учитывает, как пользователи намерены использовать этот тип ввода. Например, если пользователь ввел «12», он ожидает, что это будет 12 часов вечера (полдень), а не 12 часов утра. Следующая функция обрабатывает все это. Он также доступен здесь: http://blog.de-zwart.net/2010-02/javascript-parse-time/

/* * * Синтаксический анализ последовательности, которая выглядит как объект time и возвращает дату. * @ return Date object on success, false on error. */String.prototype.parseTime = function () {//обрезайте ее, чтобы минуты всегда были жадными первыми: var value = this.trim () .reverse () ;//Сначала необходимо изменить последовательность на обратную, чтобы она соответствовала минутам в жадном, затем часам var timeParts = value.match (/( a 'p) ?\s * ((\d {2})?:?) (\d {1,2} )/i) ;//Это не соответствует тому, что мы знаем, если (! timeParts) {return false; }//reverse it: timeParts = timeParts.reverse () ;//Обратить внутренние части: для (var i = 0; i < timeParts.length; i++) {timeParts [i] = timeParts [i] = = = undefined? ": timeParts [i] .reverse (); }//Разбор разделов: var minutes = parseInt (timeParts [1], 10) | | 0; var hours = parseInt (timeParts [0], 10); var afternoon = timeParts [3] .toLowerCase () = = «p»? true: false ;//Если меридиан не набор, а часы 12, то предположим, что днем. вторая половина дня =! timeParts [3] & & hours = = 12? верно: вторая половина дня ;//В любое время часы больше 12, они означают вторую половину дня = часы > 12? true: вторая половина дня ;//Сделать часы между 0 и 12: часы - = часы > 12? 12:0 ;//Добавить 12, если его PM, но не полдень часов + = днем & & часами! = 12? 12:0 ;//Удалить 12 на полночь: часы - =! днем & & часы = 12? 12:0 ;//Проверка работоспособности номера: if (minutes > = 60 | | hours > = 24) {return false; }//Возврат объекта даты с заданными значениями. var d = новая дата (); d.setHours (часы); d.setMinutes (минут); возвратить d;} вар проверяет = ['13:00', '13:00', '1:00 p', '13:00', '1:00p.m'., '1:00p', '13:00', '13:00', '1 p', '13:00', '1p.m '., '1p', '13:00', '13', '1a', '12', '12a', '12p', '12:00', '12:00', '2400am', '2400pm', '2400', '1000', '100', '123', '2459', '2359', '2359am', '1100', '123p', '1234', '1', '9', '99', '999', '9999', '99999', '0000', '0011', '-1', 'mioaw']; для (var i = 0; i < tests.length; i++) {console.log (тесты [i] .padStart (9, ') + «=» + тесты [i] .parseTime ());} 

Это строковый прототип, поэтому его можно использовать так:

var str = '12am';
var date = str.parseTime();
-121--931481-

Спасибо за ответы. В итоге я удалил serialize () и отправил каждый параметр вручную в виде строки. Я добавил $ ("# foo _ bar") .replace (/\n/g, '< br >')) в текстовую область в качестве обходного решения, и теперь я получаю перерывы. Хотел бы я не взламывать это, чтобы это сработало, но это делает работу.

2
ответ дан 14 December 2019 в 13:34
поделиться

У меня никогда не возникало проблем с вставкой данных из HTML-формы в базу данных, как при обычной отправке формы, так и при использовании AJAX.

Пробовали ли вы отправить форму без AJAX? Каков результат? Я хочу предложить вам использовать jQuery form plugins, чтобы не делать AJAX запрос вручную.

Я также хочу предложить вам использовать AdoDB для сохранения данных в базе данных. Эта библиотека предоставляет отличную абстракцию для работы с базами данных. Я не обнаружил никаких проблем при вставке/обновлении данных, все экранирование значений выполняется автоматически. Вот пример обновления с помощью AdoDB:

$data['foo_text'] = ucfirst($_POST['foo_text']);
$adodb->AutoExecute($tablename, $data, 'UPDATE', "id=$id");

Надеюсь, эти библиотеки помогут вам.

1
ответ дан 14 December 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: