2015-07-29 5 views
0

Я хочу отправить форму с помощью JQuery $.ajax, но у меня есть проблема. Похоже, что PHP не может быть сериализован $_POST. Странно, потому что переменная elementiPost не пуста, действительно, если я делаю console.log(parametriPost), консоль покажет мне правильный контент. Самое странное, что PHP получает параметры, которые я добавляю вручную к параметруPost ($_POST['data_r']), но не к $(this).serialize()! Если я вручную помещаю число в $ ore, он отлично работает, поэтому проблема не в запросе.PHP не получает JQuery serialize() Параметры POST

спасибо.

Вот код:

JQuery

$('form').submit(function(e) { 

       e.preventDefault(); 

       var formId = $(this).attr('id'); 
       var data = area_get_row_date(formId); 

       var parametriPost = $(this).serialize() + '&data_r=' + data; 


       $.ajax({          
        url: 'insert_db.php',     
        method: 'POST', 
        async: false, 
        data: parametriPost, 
        success: function() { 

         // Success code 
        }, 
        error: function(xhr, status, error) { 
         alert("Errore!"); 
        } 
       }); 
      }); 

PHP (insert_db.php)

$data = str_replace('_', '.', $_POST['data_r']); 
$ore = $_POST['orelavorateore_2_07_2015']; 

    $sql = "INSERT INTO ore_lav 
      VALUES (NULL, 134, 4,STR_TO_DATE('" . $data . "', '%d.%m.%Y'), " . $ore . ", 1, 1)"; 


    $results = api_store_result(api_mysql_query($sql)); 

Это то, что содержит parametriPost:

lavorati_prenotati=L&periodointegrazione_3_07_2015=on&orelavoratechf_3_07_2015=&orelavorateore_3_07_2015=a&extra_field1_orelavoratechf_3_07_2015=&extra_field1_orelavorateore_3_07_2015=&extra_field2_orelavoratechf_3_07_2015=&extra_field2_orelavorateore_3_07_2015=&orenonlavoratechf_3_07_2015=&orenonlavorateore_3_07_2015=&orenonlavoratetipologia_3_07_2015=L&extra_field1_orenonlavoratechf_3_07_2015=&extra_field1_orenonlavorateore_3_07_2015=&extra_field1_orenonlavoratetipologia_3_07_2015=L&extra_field2_orenonlavoratechf_3_07_2015=&extra_field2_orenonlavorateore_3_07_2015=&extra_field2_orenonlavoratetipologia_3_07_2015=L&orenonpagateore_3_07_2015=&orenonpagatetipologia_3_07_2015=L&extra_field1_orenonpagateore_3_07_2015=&extra_field1_orenonpagatetipologia_3_07_2015=L&extra_field2_orenonpagateore_3_07_2015=&extra_field2_orenonpagatetipologia_3_07_2015=L&orelavoratechf_3_07_2015=&orelavorateore_3_07_2015=&data_r=3_07_2015 
+1

базовая отладка: 'va r_dump ($ _ POST, $ _SERVER ['REQUEST_METHOD']). подтвердите, что php действительно получил эти данные и что POSt фактически был выполнен. И вы уязвимы для [sql injection attack] (http://bobby-tables.com) –

+0

Возможно, это поможет: http://stackoverflow.com/questions/6627936/jquery-post-with-serialize-and-extra- данные – P0rnflake

+1

'data_r = ')); DROP TABLE ore_lav; ':(В любом случае, это работает для меня -' $ _POST' содержит все поля, как ожидалось. – riv

ответ

0

Вы можете использовать этот фрагмент кода, чтобы преобразовать данные формы в формате JSON:

$.fn.serializeObject = function() 
    { 
     var o = {}; 
     var a = this.serializeArray(); 
     $.each(a, function() { 
      if (o[this.name]) { 
       if (!o[this.name].push) { 
        o[this.name] = [o[this.name]]; 
       } 
       o[this.name].push(this.value || ''); 
      } else { 
       o[this.name] = this.value || ''; 
      } 
     }); 
     return o; 
    }; 

    $("form").submit(function(event) { 

     event.preventDefault(); 

     //convert form data to JSON 
     var params = $(this).serializeObject(); 
     //add a 'data_r' field with some data to our JSON 
     params.data_r = 'sample data'; 

     $.ajax({ 
      url: 'app.php', 
      type: 'POST', 
      data: JSON.stringify(params), 
     }) 
     .done(function(data) { 
      console.log(data); 
     }); 
    }); 

и на PHP стороне:

<?php 

    $data = json_decode(file_get_contents('php://input'), false); 

    print_r($data->data_r); 


?> 

Теперь данные $ является объектом, и вы можете доступ к определенному полю:

$data->data_r 
Смежные вопросы