Помогите вывести результат на страницу
здраствуйте! Есть код
<script type="text/javascript"> function call() { var msg = $('#formx').serialize(); $.ajax({ type: 'POST', url: 'index.php?act=add&id=".$id."', dataType:'text', data: msg, success: function(data) { $('#results').html(data).show().delay(1500).fadeOut(800); $('#name').val(''); //очищаем текстовое поле после успешной вставки $('#desc').val(''); //очищаем текстовое поле после успешной вставки }, error: function(xhr, str){ alert('Возникла ошибка: ' + xhr.responseCode); } }); } </script> <div id="results"></div> <form method="POST" id="formx" action="javascript:void(null);" onsubmit="call()"/> <legend>Test From</legend> <label for="name">Заголовок:</label><input id="name" name="name" value="" type="text"><br /> <label for="desc">Превью:</label><input id="desc" name="desc" value="" type="text"> <br /> <input value="Send" type="submit"/> </form> $req = mysql_query("SELECT * FROM `test` WHERE `type` = '1' ORDER BY `id`"); while ($res = mysql_fetch_array($req)) { $i++; echo '<a href="?act=list&dir='.$res['namelat'].'">' . htmlentities($res['name'], ENT_QUOTES, 'UTF-8') . '</a>'; } Суть проблемы заключается в следушем... Скрипт обрабатывает мои данные, и сохранение проходит успешно! PHP скрипт выводит уменя все записи храняшиеся в таблице, но я незнаю как реализовать все таким образом чтобы следуюшая добавленная запись динамически подгружалась на страницу без перезагрузки страницы! |
<form method="POST" id="formx"
$(function() { $('#formx').submit(function(e) { e.preventDefault(); $.ajax({ type: 'POST', url: 'index.php?act=add&id=".$id."', dataType:'text', data: msg, ... }) }) }); url: 'index.php?act=add&id=".$id."', - это и плохо, и ошибка. Цитата:
|
Цитата:
Пояснения! При отправке данных через форму уменя возврашается в блок <div id="results"></div> ответ типа "Запись успешно добавленна" вслучае если все данные получены и успешно обработаны с последуюшим добавлением в базу! А мне нужно чтобы вместо этова ответа при успешном добавлении записи эта запись автоматически отображалась на странице! Как тут http://dnzl.ru/demo/ajax_add_delete/demo.php |
Предложи какую нибудь реализацию этой задачи,я просто в JS ваше слаб.
|
Цитата:
$(function() { //..... }) Думаю, что такое в вашем коде уже есть. URL запроса же, который будет содержать и переменную $id прописать в action формы, ибо форму в любом случае будет отдавать сервер: <form id="formx" action="index.php?act=add&id=<?=$id?>"> В Ajax запросе получить этот адрес у формы: $('#formx').submit(function(e) { e.preventDefault(); //отмена действия по умолчанию $.ajax({ type: 'POST', url: this.action, //URL запроса dataType:'text', data: $(this).serialize(), //данные формы //... код далее }) }); Цитата:
Если же все таки требуется "вмешательство" в данный процесс сервера, например он снабжает эти данные еще какими либо сопутствующими добавленной записи (вложенные запросы к связанным таблицам), то тогда после записи данных формы нужно получить ID этой записи. Сделать запрос по этому ID, получить и отправить клиенту. Но если переменная $id, это и есть добавленная запись (то есть вы так полагаете), то это конечно же не так. И вот это htmlentities() слишком, достаточно htmlspecialchars(). |
Цитата:
Цитата:
|
При записи данных я испорльзую mysql_real_escape_string, а на выходе использую уже свою функцию
$str = htmlentities(trim($str), ENT_QUOTES, 'UTF-8'); $str = nl2br($str); $str = strtr($str, array ( chr(0)=> '', chr(1)=> '', chr(2)=> '', chr(3)=> '', chr(4)=> '', chr(5)=> '', chr(6)=> '', chr(7)=> '', chr(8)=> '', chr(9)=> '', chr(10)=> '', chr(11)=> '', chr(12)=> '', chr(13)=> '', chr(14)=> '', chr(15)=> '', chr(16)=> '', chr(17)=> '', chr(18)=> '', chr(19)=> '', chr(20)=> '', chr(21)=> '', chr(22)=> '', chr(23)=> '', chr(24)=> '', chr(25)=> '', chr(26)=> '', chr(27)=> '', chr(28)=> '', chr(29)=> '', chr(30)=> '', chr(31)=> '' )); $str = str_replace("\'", "'", $str); $str = str_replace('\\', "\", $str); $str = str_replace("|", "I", $str); $str = str_replace("||", "I", $str); $str = str_replace("/\\\$/", "$", $str); $str = mysql_real_escape_string($str); return $str;ну или другие две, в зависимости от того какой вид должен иметь текст после выборки! |
А то малоли что отправят через авдресную строку=)
|
Подскажите, есть код
$("#FormSubmit").click(function (e) { e.preventDefault(); if($("#name").val()==="") //simple validation { alert("Введите текст!"); return false; } <form id="FormSubmit" action="add.php?id=<?=$id?>"> <div class="form_style"> Заголовок<input id="name" name="name" value="" type="text"/><br /> описание<textarea name="desc" id="desc" cols="45" rows="5"></textarea> <button id="FormSubmit">Отправить</button> </div></form> Проблема в том, что когда я кликаю мышкой по полю ввода скрипт отправляет уже пустые переменные name и desc и выходит окно с ошибкой alert("Введите текст!"); вчем моя ощибка? |
Tomson123,
я пока не страдаю склерозом, то что недавно написано помню. :) Не надо цитировать все подряд, и вообще ничего не надо цитировать если ваш комментарий этого не требует. Не превращайте пост таким цитированием в большие бесполезные портянки. Цитата:
mysql_real_escape_string - это для экранирования данных перед записью в базу для исключения инъекции. Эта функция используется оригинальным расширением MySQL, которое разработчики настоятельно не рекомендуют использовать так как в новых версиях РНР оно исключено. Вместо этого расширения используйте mysqli или PDO, и работая с БД посредством подготовленных запросов, в которых экранирование будет выполнятся автоматически самим драйвером. При выводе данных из БД на страницу, и не только из БД, а любых данных полученных от клиента, к ним применяется функция htmlspecialchars в первую очередь с целю, чтобы заменить html представлением эти два символа: < и >. И делается это для того, чтобы исключить XSS атаку на страницах пользователей, не допустить выполнение любого внедренного кода. htmlentities - производит замену на html-сущности для всех возможных символов, в чем нет никакой необходимости. Замена же "\'" на "'" и т.п., это глупости. Куда полезнее при записи данных пользователя в БД удалять экранирование пользователя. А каким методом произведен запрос можно узнать из $_SERVER["REQUEST_METHOD"], а с какого домена из $_SERVER["HTTP_ORIGIN"], правда старые браузеры такой заголовок могут и не передавать. В случае проверки браузер ли производит запрос, проверка сложнее. Цитата:
Пусть у вас всего 5 пользователей. В разные моменты времени они вошли на страницу и каждый из них получил записи из БД существующие на тот момент в базе. То чего вы хотите означает, что каждый из них добавляя новые записи в базу будет видеть только свои добавленные, а те, что могут добавлять в это же время другие пользователи нет. Так как запросы формы асинхронные и не вызывают перезагрузки страницы. Не "эта запись" должна добавляться на страницу, а все новые записи, которые на момент добавления пользователем своей были добавлены в базу. То есть, например, записи выводятся в контейнерах DIV начиная с первой. Если в атрибут этих контейнеров помещать ID записей, то при отправлении формы нужно получать из атрибута последнего контейнера ID последней (для клиента) записи и отправлять его на сервер. После успешного добавления записи сервер должен получить записи по условию WHERE `type` = 1 AND id > $id ORDER BY id, где $id, это последняя запись существующая у клиента на странице. Вот это он должен вернуть клиенту, а клиент их добавит на страницу в новых добавленных контейнерах. Цитата:
|
не асилил:help:
|
я пока не страдаю склерозом, то что недавно написано помню. Не надо цитировать все подряд, и вообще ничего не надо цитировать если ваш комментарий этого не требует. Не превращайте пост таким цитированием в большие бесполезные портянки.
Сообщение от Tomson123 А то малоли что отправят через авдресную строку Не надо заниматься чепухой - strtr, str_replace и mysql_real_escape_string при выводе данных из базы, это полнейшая чепуха. mysql_real_escape_string - это для экранирования данных перед записью в базу для исключения инъекции. Эта функция используется оригинальным расширением MySQL, которое разработчики настоятельно не рекомендуют использовать так как в новых версиях РНР оно исключено. Вместо этого расширения используйте mysqli или PDO, и работая с БД посредством подготовленных запросов, в которых экранирование будет выполнятся автоматически самим драйвером. Смотри... вся эта чепуха прописана там не для радости или красоты! Обьесняю! mysql_real_escape_string отвечает если я не ощибаюсь за то чтобы не было SQL иньекций! Торбишь чтобы какой нибудь залетный интузиаст не смог делать запросы в БД закоментировав часть моего обрашения к бд и прописав свое! Эти постоянные переменные, функции обработки текста и т д служат для того чтобы какой нибудь дурачок не смог писать посты с сотней двумя буквами и сотней пробелов между неми ними! Чтобы небыло сотни отступов между двумя сообщениями! Да, можно было бы довольствоваться одной функцией htmlentities при этом на выдаче данные которые добавляются полностью без модерации могут быть засоренны сотней ненужных символом! Которые будут портить вид всего сайта, особенно если утебя еще идет и мобильная версия! Бывали случаи когда на форуме писали посты дети так что приходилось долго пролистывать вниз чтобы добраться до следушева поста, хотя в текушем было всего несколько слов! Замена же "\'" на "'" и т.п., это глупости. Куда полезнее при записи данных пользователя в БД удалять экранирование пользователя. А каким методом произведен запрос можно узнать из $_SERVER["REQUEST_METHOD"], а с какого домена из $_SERVER["HTTP_ORIGIN"], правда старые браузеры такой заголовок могут и не передавать. В случае проверки браузер ли производит запрос, проверка сложнее. И как ты видишь тогда BB теги сылок,html кода и т д на выдаче после того как ты порезал все теги там? |
Пусть у вас всего 5 пользователей. В разные моменты времени они вошли на страницу и каждый из них получил записи из БД существующие на тот момент в базе. То чего вы хотите означает, что каждый из них добавляя новые записи в базу будет видеть только свои добавленные, а те, что могут добавлять в это же время другие пользователи нет. Так как запросы формы асинхронные и не вызывают перезагрузки страницы.
Я вкурсе, эти данные будут подгружаться по определенному интервалу постепенно ((если такая необходимость есть, например в чате или на форуме) если же речь идет о информационых разделах то эти данные будут доступны пользователю когда он сам обновит страницу или же часть его содержания Не "эта запись" должна добавляться на страницу, а все новые записи, которые на момент добавления пользователем своей были добавлены в базу. То есть, например, записи выводятся в контейнерах DIV начиная с первой. Если в атрибут этих контейнеров помещать ID записей, то при отправлении формы нужно получать из атрибута последнего контейнера ID последней (для клиента) записи и отправлять его на сервер. После успешного добавления записи сервер должен получить записи по условию WHERE `type` = 1 AND id > $id ORDER BY id, где $id, это последняя запись существующая у клиента на странице. Вот это он должен вернуть клиенту, а клиент их добавит на страницу в новых добавленных контейнерах. Да, да именно так! Я все же смог разобраться с этой проблемой! И уже написал шпаргалку себе! Сообщение от Tomson123 Проблема в том, что когда я кликаю мышкой по полю ... Проблема в том, что $("#FormSubmit").click(function (e) { ... это полная ахинея. Что за событие формы обрабатывается в моем коде в строке 01? Согласен, я там запутался и чуть пойже добавления того поста нашел где ощибся и все исправил! Спасибо. |
:D Ну юмористы. Я писал о том, что не нужно все что вам написано цитировать, включая и кучу кода, чего вами было сделано.
Теперь же, вы берете из моего цитаты, для комментирования, но не помещаете их в теги цитирования, и как теперь это прочесть? :) Цитата:
if($id = (int)$_POST['id']) { //запрос по WHERE id = $id } else //подстава Я не стану дальше комментировать ваши вопросы. Вы запутались в понимании и назначении функций, поэтому и "обезопасить" у вас превращается в кошмар. Как быть с ВВ тегами, ссылками и прочим, это совсем иной вопрос, ибо формат ВВ и выбран таковым, что символы его описывающие не несут в себе никакой опасности. БД может хранить в себе любые "колющиеся и режущиеся предметы", окошмаривать их непотребными действиями при записи в базу потому, что страшно, это от недопонимания. |
Часовой пояс GMT +3, время: 12:49. |