Помогите вывести результат на страницу
здраствуйте! Есть код
<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, время: 15:58. |