Помогите вывести результат на страницу
здраствуйте! Есть код
<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, это последняя запись существующая у клиента на странице. Вот это он должен вернуть клиенту, а клиент их добавит на страницу в новых добавленных контейнерах. Цитата:
|
Часовой пояс GMT +3, время: 08:53. |