10.08.2017, 17:32
|
Интересующийся
|
|
Регистрация: 10.08.2017
Сообщений: 10
|
|
Помогите вывести результат на страницу
здраствуйте! Есть код
<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 скрипт выводит уменя все записи храняшиеся в таблице, но я незнаю как реализовать все таким образом чтобы следуюшая добавленная запись динамически подгружалась на страницу без перезагрузки страницы!
|
|
10.08.2017, 17:40
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
<form method="POST" id="formx" action="javascript:void(null);" onsubmit="call()"/>
function call() {..
$(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."', - это и плохо, и ошибка.
Сообщение от Tomson123
|
как реализовать все таким образом чтобы следуюшая добавленная запись динамически подгружалась на страницу без перезагрузки страницы
|
Пояснить.
|
|
10.08.2017, 18:18
|
Интересующийся
|
|
Регистрация: 10.08.2017
Сообщений: 10
|
|
Сообщение от laimas
|
<form method="POST" id="formx" action="javascript:void(null);" onsubmit="call()"/>
function call() {..
$(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."', - это и плохо, и ошибка.
Пояснить.
|
Подскажи как правильно сделать чтобы можно было передать с записью GETы!
Пояснения! При отправке данных через форму уменя возврашается в блок <div id="results"></div>
ответ типа "Запись успешно добавленна" вслучае если все данные получены и успешно обработаны с последуюшим добавлением в базу!
А мне нужно чтобы вместо этова ответа при успешном добавлении записи эта запись автоматически отображалась на странице! Как тут http://dnzl.ru/demo/ajax_add_delete/demo.php
|
|
10.08.2017, 18:20
|
Интересующийся
|
|
Регистрация: 10.08.2017
Сообщений: 10
|
|
Предложи какую нибудь реализацию этой задачи,я просто в JS ваше слаб.
|
|
10.08.2017, 18:36
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Tomson123
|
Подскажи как правильно сделать чтобы можно было передать с записью GETы!
|
Так и предается - через URL запроса, а POST данные передаются в теле запроса. Но, так как вы делаете, выводя скрипт посредством РНР ради того, чтобы указать переменную, это не самый лучший способ, для формы тем более. Данный обработчик вполне можно прописать в подключаемом скрипте, в обработчике загрузки страницы:
$(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(), //данные формы
//... код далее
})
});
Сообщение от Tomson123
|
мне нужно чтобы вместо этова ответа при успешном добавлении записи эта запись автоматически отображалась на странице
|
Ну в общем то, для этого и не нужно ничего возвращать серверу, достаточно клиенту ответить, что добавление записи Ок, и что было в форме пометить на страницу, и очистить форму.
Если же все таки требуется "вмешательство" в данный процесс сервера, например он снабжает эти данные еще какими либо сопутствующими добавленной записи (вложенные запросы к связанным таблицам), то тогда после записи данных формы нужно получить ID этой записи. Сделать запрос по этому ID, получить и отправить клиенту.
Но если переменная $id, это и есть добавленная запись (то есть вы так полагаете), то это конечно же не так.
И вот это htmlentities() слишком, достаточно htmlspecialchars().
Последний раз редактировалось laimas, 10.08.2017 в 18:51.
|
|
10.08.2017, 22:17
|
Интересующийся
|
|
Регистрация: 10.08.2017
Сообщений: 10
|
|
Сообщение от laimas
|
<form method="POST" id="formx" action="javascript:void(null);" onsubmit="call()"/>
function call() {..
$(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."', - это и плохо, и ошибка.
Пояснить.
|
Сообщение от laimas
|
Так и предается - через URL запроса, а POST данные передаются в теле запроса. Но, так как вы делаете, выводя скрипт посредством РНР ради того, чтобы указать переменную, это не самый лучший способ, для формы тем более. Данный обработчик вполне можно прописать в подключаемом скрипте, в обработчике загрузки страницы:
$(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().
|
Спасибо, от части мысль понел! Буду эксперементировать=)
|
|
10.08.2017, 23:44
|
Интересующийся
|
|
Регистрация: 10.08.2017
Сообщений: 10
|
|
При записи данных я испорльзую 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;
ну или другие две, в зависимости от того какой вид должен иметь текст после выборки!
|
|
10.08.2017, 23:45
|
Интересующийся
|
|
Регистрация: 10.08.2017
Сообщений: 10
|
|
А то малоли что отправят через авдресную строку=)
|
|
10.08.2017, 23:52
|
Интересующийся
|
|
Регистрация: 10.08.2017
Сообщений: 10
|
|
Подскажите, есть код
$("#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("Введите текст!"); вчем моя ощибка?
|
|
11.08.2017, 04:56
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Tomson123,
я пока не страдаю склерозом, то что недавно написано помню. Не надо цитировать все подряд, и вообще ничего не надо цитировать если ваш комментарий этого не требует. Не превращайте пост таким цитированием в большие бесполезные портянки.
Сообщение от Tomson123
|
А то малоли что отправят через авдресную строку
|
Не надо заниматься чепухой - strtr, str_replace и mysql_real_escape_string при выводе данных из базы, это полнейшая чепуха.
mysql_real_escape_string - это для экранирования данных перед записью в базу для исключения инъекции. Эта функция используется оригинальным расширением MySQL, которое разработчики настоятельно не рекомендуют использовать так как в новых версиях РНР оно исключено. Вместо этого расширения используйте mysqli или PDO, и работая с БД посредством подготовленных запросов, в которых экранирование будет выполнятся автоматически самим драйвером.
При выводе данных из БД на страницу, и не только из БД, а любых данных полученных от клиента, к ним применяется функция htmlspecialchars в первую очередь с целю, чтобы заменить html представлением эти два символа: < и >. И делается это для того, чтобы исключить XSS атаку на страницах пользователей, не допустить выполнение любого внедренного кода. htmlentities - производит замену на html-сущности для всех возможных символов, в чем нет никакой необходимости.
Замена же "\'" на "'" и т.п., это глупости. Куда полезнее при записи данных пользователя в БД удалять экранирование пользователя. А каким методом произведен запрос можно узнать из $_SERVER["REQUEST_METHOD"], а с какого домена из $_SERVER["HTTP_ORIGIN"], правда старые браузеры такой заголовок могут и не передавать. В случае проверки браузер ли производит запрос, проверка сложнее.
Сообщение от Tomson123
|
Буду эксперементировать
|
Тут не эксперименты требуются, а подумать. Я надеялся, что возникнет вопрос после моего поста, а коли его нет, значит вы не понимаете "бесполезности" своей затеи "при успешном добавлении записи эта запись автоматически отображалась на странице". Это сделать не сложно, но смысл какой?
Пусть у вас всего 5 пользователей. В разные моменты времени они вошли на страницу и каждый из них получил записи из БД существующие на тот момент в базе. То чего вы хотите означает, что каждый из них добавляя новые записи в базу будет видеть только свои добавленные, а те, что могут добавлять в это же время другие пользователи нет. Так как запросы формы асинхронные и не вызывают перезагрузки страницы.
Не "эта запись" должна добавляться на страницу, а все новые записи, которые на момент добавления пользователем своей были добавлены в базу. То есть, например, записи выводятся в контейнерах DIV начиная с первой. Если в атрибут этих контейнеров помещать ID записей, то при отправлении формы нужно получать из атрибута последнего контейнера ID последней (для клиента) записи и отправлять его на сервер. После успешного добавления записи сервер должен получить записи по условию WHERE `type` = 1 AND id > $id ORDER BY id, где $id, это последняя запись существующая у клиента на странице. Вот это он должен вернуть клиенту, а клиент их добавит на страницу в новых добавленных контейнерах.
Сообщение от Tomson123
|
Проблема в том, что когда я кликаю мышкой по полю ...
|
Проблема в том, что $("#FormSubmit").click(function (e) { ... это полная ахинея. Что за событие формы обрабатывается в моем коде в строке 01?
Последний раз редактировалось laimas, 11.08.2017 в 06:05.
|
|
|
|