Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.08.2017, 17:32
Интересующийся
Отправить личное сообщение для Tomson123 Посмотреть профиль Найти все сообщения от Tomson123
 
Регистрация: 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&amp;dir='.$res['namelat'].'">' . htmlentities($res['name'], ENT_QUOTES, 'UTF-8') . '</a>';








            }


Суть проблемы заключается в следушем...
Скрипт обрабатывает мои данные, и сохранение проходит успешно!
PHP скрипт выводит уменя все записи храняшиеся в таблице, но я незнаю как реализовать все таким образом чтобы следуюшая добавленная запись динамически подгружалась на страницу без перезагрузки страницы!
Ответить с цитированием
  #2 (permalink)  
Старый 10.08.2017, 17:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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
как реализовать все таким образом чтобы следуюшая добавленная запись динамически подгружалась на страницу без перезагрузки страницы
Пояснить.
Ответить с цитированием
  #3 (permalink)  
Старый 10.08.2017, 18:18
Интересующийся
Отправить личное сообщение для Tomson123 Посмотреть профиль Найти все сообщения от Tomson123
 
Регистрация: 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
Ответить с цитированием
  #4 (permalink)  
Старый 10.08.2017, 18:20
Интересующийся
Отправить личное сообщение для Tomson123 Посмотреть профиль Найти все сообщения от Tomson123
 
Регистрация: 10.08.2017
Сообщений: 10

Предложи какую нибудь реализацию этой задачи,я просто в JS ваше слаб.
Ответить с цитированием
  #5 (permalink)  
Старый 10.08.2017, 18:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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.
Ответить с цитированием
  #6 (permalink)  
Старый 10.08.2017, 22:17
Интересующийся
Отправить личное сообщение для Tomson123 Посмотреть профиль Найти все сообщения от Tomson123
 
Регистрация: 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().
Спасибо, от части мысль понел! Буду эксперементировать=)
Ответить с цитированием
  #7 (permalink)  
Старый 10.08.2017, 23:44
Интересующийся
Отправить личное сообщение для Tomson123 Посмотреть профиль Найти все сообщения от Tomson123
 
Регистрация: 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("\'", "&#39;", $str);
    $str = str_replace('\\', "&#92;", $str);
    $str = str_replace("|", "I", $str);
    $str = str_replace("||", "I", $str);
    $str = str_replace("/\\\$/", "&#36;", $str);
    $str = mysql_real_escape_string($str);
    return $str;
ну или другие две, в зависимости от того какой вид должен иметь текст после выборки!
Ответить с цитированием
  #8 (permalink)  
Старый 10.08.2017, 23:45
Интересующийся
Отправить личное сообщение для Tomson123 Посмотреть профиль Найти все сообщения от Tomson123
 
Регистрация: 10.08.2017
Сообщений: 10

А то малоли что отправят через авдресную строку=)
Ответить с цитированием
  #9 (permalink)  
Старый 10.08.2017, 23:52
Интересующийся
Отправить личное сообщение для Tomson123 Посмотреть профиль Найти все сообщения от Tomson123
 
Регистрация: 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("Введите текст!"); вчем моя ощибка?
Ответить с цитированием
  #10 (permalink)  
Старый 11.08.2017, 04:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести текст на страницу? Hurray Events/DOM/Window 4 03.11.2013 15:21
Цикл завешивает страницу, помогите Romingood jQuery 5 19.10.2013 14:30
Как сделать ссылку на страницу видимой при определенных условиях? zonkon Общие вопросы Javascript 2 03.10.2013 13:04
Помогите вставить скрипт на страницу alexsio Работа 7 22.04.2013 18:19
Подскажите, пжлст, как вывести в тот же документ результат ф-ции? LexXxeL Элементы интерфейса 4 13.05.2009 13:26