За последние 24 часа нас посетили 21989 программистов и 1104 робота. Сейчас ищут 725 программистов ...

2 кнопки и запись/удаление в БД через ajax

Тема в разделе "JavaScript и AJAX", создана пользователем Uint32, 12 июн 2019.

  1. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    Имеем такой код:

    HTML:
    1. <!DOCTYPE html>
    2. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
    3.  
    4. $(document).ready(function(){
    5.     $("#stop").hide();
    6.   $("#test").submit(function(e) {
    7.     $("#go").hide();
    8.     $("#stop").show();
    9.    
    10.    
    11.     /*$('#submit2').click( function()
    12.     {
    13.         //$("#submit2").hide();
    14.         $(this).hide();
    15.         //$('#submit').show();
    16.     });
    17.     */
    18.    
    19.    
    20.     e.preventDefault(); // замена отправки по умолчанию.
    21.  
    22.     var form = $(this);
    23.     var url = "server.php";
    24.  
    25.     $.ajax({
    26.            type: "GET",
    27.            url: url,
    28.            data: form.serialize(), // serializes the form's elements.
    29.            success: function(data)
    30.            {
    31.                alert('Успех!'); // show response from the php script.
    32.            }
    33.          });
    34.  
    35.  
    36.   });
    37.  
    38.  
    39. });
    40. </head>
    41.  
    42. <form id="test" action="">
    43.  
    44. <button type="submit" id="go">Запись</button>
    45. <button type="submit" id="stop">Покинуть</button>
    46. </form>
    47.  
    48. </body>
    49. </html>
    Код (Javascript):
    1. $(document).ready(function(){
    2.     $("#stop").hide();
    3.   $("#test").submit(function(e) {
    4.     $("#go").hide();
    5.     $("#stop").show();
    6.    
    7.    
    8.     /*$('#submit2').click( function()
    9.     {
    10.         //$("#submit2").hide();
    11.         $(this).hide();
    12.         //$('#submit').show();
    13.     });
    14.     */
    15.    
    16.    
    17.     e.preventDefault(); // замена отправки по умолчанию.
    18.  
    19.     var form = $(this);
    20.     var url = "server.php";
    21.  
    22.     $.ajax({
    23.            type: "GET",
    24.            url: url,
    25.            data: form.serialize(), // serializes the form's elements.
    26.            success: function(data)
    27.            {
    28.                alert('Успех!'); // show response from the php script.
    29.            }
    30.          });
    31.  
    32.  
    33.   });
    34.  
    35.  
    36. });
    Помогите решить 2 задачи:
    1. После нажатия на кнопку "го", она должна исчезнуть ,а кнопка "стоп" появится - это мне сделать удалось. А вот как сделать аналогичный еффект, в противоположной ситуации. Т.е по нажатию кнопки "стоп" она должна пропасть, и появится "го".
    2. По нажатию кнопки "го" в базу данных, в нужный столбец должно записаться любое слово в формате json. А по нажатию кнопки "стоп" это же слово должно удалится от туда. И очень желательно методом пост.

    По 1 задаче я в тупике.
    По 2 задаче не понятно, как мне в файле server.php поставить условие, и проверить была ли нажата одна из кнопок. Условие if ( isset() ) браузер игнорирует. И такой вопрос, соединятся с базой и записывать туда что либо, нужно в файле server.php или в ajax ? У меня все остальные соединения иду как раз в этом пшп файле, потому хотелось бы соединяться с бд в server.php.
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    а методом гет нельзя?))

    HTML:
    1. <!DOCTYPE html>
    2.     <head>
    3.         <meta charset="utf-8">
    4.         <title>Go go button!</title>
    5.     </head>
    6.     <body>
    7.     <button id="go">Запись</button>
    8.     <button id="stop" style="display: none">Покинуть</button>
    9.     <script>
    10.         (function() {
    11.             var go = document.getElementById('go'),
    12.             stop = document.getElementById('stop');
    13.  
    14.             go.onclick = function(){
    15.                 stop.style.display = 'inline';
    16.                 this.style.display = 'none';
    17.             }
    18.  
    19.             stop.onclick = function(){
    20.                 go.style.display = 'inline';
    21.                 this.style.display = 'none';
    22.             }
    23.         })()
    24.     </script>
    25.     </body>
    26. </html>
     
    #2 Artur_hopf, 12 июн 2019
    Последнее редактирование: 12 июн 2019
    Uint32 нравится это.
  3. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    Можно и ГЕТ, но работа с базой же будет, ушлые ребзя могут просечь это дело и добавлять в базу что-либо, через адресную строку. Пасибо за 1 задачку.
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    с post можно сделать абсолютна тоже самое

    вот тебе функция для гет запроса:
    Код (Javascript):
    1. function getAjax(url, success) {
    2.     var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    3.     xhr.open('GET', url);
    4.     xhr.onreadystatechange = function() {
    5.         if (xhr.readyState>3 && xhr.status==200) {success(xhr.responseText);}
    6.         if (xhr.status==500) { console.log(xhr.responseText); }
    7.     };
    8.     xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    9.     xhr.send();
    10.     return xhr;
    11. }
    использовать так:
    Код (Javascript):
    1. var test = 'приветик';
    2. getAjax("test.php?test="+test, function(data){
    3.          console.log(data);
    4. });
     
  5. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    Погоди, у меня с 1 задачей не все хорошо. При нажатии на кнопку ничего не происходит, мне общую функцию следовало вставить внутрь $(document).ready(function(){ ? Или другая библиотека требуется ?
     
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    выкинь то что ты там написал, и просто вставь себе:
    p.s. jquery тоже убери в сторонку.
     
  7. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    Во нихрена себе, а как оно работает не имея библиотеки ?
     
  8. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    https://ru.wikipedia.org/wiki/JQuery
    --- Добавлено ---
    Если до сих пор непонятно. Вот есть у тебя яблоко, назовем его javascript. И у тебя есть нож, назовем его jquery. Ты можешь съесть яблоко без ножа?
    А в данном твоем случае тебе нож не нужен.
     
  9. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    Тогда, если я правильно понял, в целом это должно быть так:

    Код (Javascript):
    1. (function()
    2.         {
    3.             var go = document.getElementById('go');
    4.             var stop = document.getElementById('stop');
    5.          
    6.             function getAjax(url, success)
    7.             {
    8.                 var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    9.                 xhr.open('GET', url);
    10.                 xhr.onreadystatechange = function() {
    11.                     if (xhr.readyState>3 && xhr.status==200) {success(xhr.responseText);}
    12.                     if (xhr.status==500) { console.log(xhr.responseText); }
    13.                 };
    14.                 xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    15.                 xhr.send();
    16.                 return xhr;
    17.             }
    18.             go.onclick = function()
    19.             {
    20.                 stop.style.display = 'inline';
    21.                 this.style.display = 'none';
    22.              
    23.                 var test = 'Hello';
    24.                 getAjax("test.php?test="+test, function(data){
    25.                          console.log(data);
    26.                 });
    27.             }
    28.             stop.onclick = function()
    29.             {
    30.                 go.style.display = 'inline';
    31.                 this.style.display = 'none';
    32.              
    33.                 var test = 'Bye';
    34.                 getAjax("test.php?test="+test, function(data){
    35.                          console.log(data);
    36.                 });
    37.             }
    38.         })()
    А уже в пшп файле, проверять условием на наличие слов Bye и Hello, через if ( $_GET['Bye'] ) ?
     
  10. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    на $_GET['test'].
     
  11. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    В скрипте заменил test.php на server.php, и на этой странице условие $_GET['test'] почему-то не выполняется.

    п.с
    А в логе, выводит слово привет и пока по 2 раза почему-то.
     
    #11 Uint32, 13 июн 2019
    Последнее редактирование: 13 июн 2019
  12. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    А, значит в кнопки нужно добавить атрибут "нейм" и его проверять условием в ГЕТ ?
     
  13. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    у вас задача стоит оправлять что то на сервер, а потом удалять это же самое с сервера, вы научились?)
     
  14. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    Только не на сервер, по нажатию на кнопки должна в базу записываться информация. Вот если условие $_GET[''] выполняется, тогда соединяемся с базой и записываем/удаляем. Сейчас в папке лежит 2 файла, index.php(тут html и JS код) и server.php. Вот в файле server.php у меня и не выполняется условие.
     
  15. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    а у меня почему работает?
    HTML:
    1. <!DOCTYPE html>
    2.     <head>
    3.         <meta charset="utf-8">
    4.         <title>Go go button!</title>
    5.     </head>
    6.     <body>
    7.     <button id="go">Запись</button>
    8.     <button id="stop" style="display: none">Покинуть</button>
    9.     <script>
    10.         (function() {
    11.             var go = document.getElementById('go'),
    12.             stop = document.getElementById('stop');
    13.             go.onclick = function(){
    14.                 stop.style.display = 'inline';
    15.                 this.style.display = 'none';
    16.                
    17.                 var test = 'приветик';
    18.                 getAjax("server.php?test="+test, function(data){
    19.                      console.log(data);
    20.                 });
    21.             }
    22.             stop.onclick = function(){
    23.                 go.style.display = 'inline';
    24.                 this.style.display = 'none';
    25.             }
    26.            
    27.             function getAjax(url, success) {
    28.                 var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    29.                 xhr.open('GET', url);
    30.                 xhr.onreadystatechange = function() {
    31.                     if (xhr.readyState>3 && xhr.status==200) {success(xhr.responseText);}
    32.                     if (xhr.status==500) { console.log(xhr.responseText); }
    33.                 };
    34.                 xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    35.                 xhr.send();
    36.                 return xhr;
    37.             }
    38.         })()
    39.     </script>
    40.     </body>
    41. </html>
    42.  
    43.  
    44.  
    PHP:
    1. <?php
    2. if(isset($_GET['test'])){
    3.     echo $_GET['test'];
    4. }else{
    5.     echo 'нет такого параметра';
    6. }
    7.  
    8. ?>
     
  16. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    Так вот в том-то и дело, что какая бы не была нажата кнопка, всегда выводит "иначе", т.е это - нет такого параметра
     
  17. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    покажи js код свой.
    --- Добавлено ---
    и php тоже бы, носом ткну тебе сейчас =)
     
  18. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    Код тот же, я только название файла пшп сменил:

    Код (Javascript):
    1. (function()
    2.         {
    3.             var go = document.getElementById('go');
    4.             var stop = document.getElementById('stop');
    5.            
    6.            
    7.             function getAjax(url, success)
    8.             {
    9.                 //var url = "server.php";
    10.                 var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    11.                
    12.                 xhr.open('GET', url);
    13.                 xhr.onreadystatechange = function() {
    14.                     if (xhr.readyState>3 && xhr.status==200) {success(xhr.responseText);}
    15.                     if (xhr.status==500) { console.log(xhr.responseText); }
    16.                 };
    17.                 xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    18.                 xhr.send();
    19.                 return xhr;
    20.             }
    21.             go.onclick = function()
    22.             {
    23.                 stop.style.display = 'inline';
    24.                 this.style.display = 'none';
    25.                 alert("you are join!");
    26.                
    27.                 var test = 'Hello';
    28.                 getAjax("server.php?test="+test, function(data){
    29.                          console.log(data);
    30.                 });
    31.             }
    32.             stop.onclick = function()
    33.             {
    34.                 go.style.display = 'inline';
    35.                 this.style.display = 'none';
    36.                 alert("you are left!");
    37.                
    38.                 var test = 'Bye';
    39.                 getAjax("server.php?test="+test, function(data){
    40.                          console.log(data);
    41.                 });
    42.             }
    43.         })()
     
  19. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    и php пожалуйста, там где проверяешь.
     
  20. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    Вот:

    PHP:
    1. //echo "<pre>"; print_r( $_REQUEST ); echo "</pre>";
    2.     /*if (    isset($_GET['test'])    )
    3.     {  
    4.         echo $_GET['test'];
    5.         $ag = $_GET['test'];
    6.         echo $ag;
    7.         echo $test;
    8.        
    9.    
    10.     }
    11.     */
    12.    
    13.    
    14.     if (    isset($_GET['test'])    )
    15.     {
    16.         echo $_GET['test'];
    17.     }
    18.     else
    19.     {
    20.         echo 'нет такого параметра';
    21.     }
     
  21. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    напишите на server.php просто print_r($_GET);

    и покажите что там
     
  22. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    Во всех случаях, всегда выводит : Array ( )

    п.с А на странице ,где сама кнопка ,в логе(консоле) выводит вроде правильно:

    Array
    (
    [test] => Hello
    )
     
  23. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    чудес не бывает, уберите alert();
     
  24. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    dfg.png
    Убрал, такой же еффект. Всегда выполняется "елсе".
     
  25. Uint32

    Uint32 Новичок

    С нами с:
    16 дек 2018
    Сообщения:
    45
    Симпатии:
    1
    Может что-то с переменной url в функции, чо-то я запутался уже