将动态数据发送到PHP

时间:2017-11-23 12:39:10

标签: php jquery json ajax

我有表格,你可以在其中找到工作经历,这显示在一行三个输入中:职位,工作持续时间和工作地点。您可以添加添加一组空输入的工作,您可以在其中添加更多数据。

我通过AJAX将HTML表单发送到PHP脚本,它分别发送具有相同名称的所有输入集,因此不在数组中。在PHP方面,我通过将它们放在一个数组中来编码post变量。 $json_data

问题是PHP脚本只保存最后一组输入。所以如果你输入3个工作,它只保存最后一个。

<!-- employment row -->

    <p class="mt-3 text-left"> Employment history </p>
    <div class="row employment_block">

        <div class="col-md-3">
            <input type="text" name="job_title[]" placeholder="Job title">
        </div>

        <div class="col-md-3">
            <input type="text" name="job_duration[]" placeholder="Duration (i.e. 3 months / 1 year)">
        </div>

        <div class="col-md-3">
            <input type="text" name="job_location[]" placeholder="Country">
        </div>
        <div class="col-md-3 text-center">
        <button href="#" class="able_btn m-0 w-100 disabled" disabled aria-disabled="true" style="opacity:0.5"> remove </button>
        </div>

    </div>

        <div class="text-center mb-3 mt-3">
            <a class="add_employment" href=""> Add employment </a>  
        </div>



<!-- JS --> 

$(document).ready(function(){

$(".account_cv_update_form").submit(function(evt){  
evt.preventDefault();

      var formData = new FormData($(this)[0]);
   $.ajax({
       url: 'handlers/cv_update.php',
       type: 'POST',
       data: formData,
       async: false,
       cache:false,
       contentType: false,
       processData: false,
       dataType: "json",
    success: function (response) {

      switch(response.message){   
        case 'success': success();
        break;
        case 'error': error();
        break;

      }

    }
  });
return false;
});

});



$('.add_employment').click(function(evt) {
 evt.preventDefault();

    $('.employment_block:last').after('<div class="row employment_block"><div class="col-md-3"><input type="text" name="job_title" placeholder="Job title"></div><div class="col-md-3"><input type="text" name="job_duration" placeholder="Duration (i.e. 3 months / 1 year)"></div><div class="col-md-3"><input type="text" name="job_location" placeholder="Country"></div><div class="col-md-3 text-center"><button class="able_btn m-0 w-100 remove_employment"> remove </button></div></div>');
});



<!-- PHP code --> 

$json_data = array(
        'job_title' => $job_title,
        'job_location' => $job_location,
        'job_duration' => $job_duration );


$cv_data = json_encode($json_data);

    $stmt = $dbh->prepare("UPDATE  table SET profile_picute=:profile_picute, first_name=:first_name, last_name=:last_name, phone_number=:phone_number, email_address=:email_address, data=:data WHERE id=:id");

     $stmt->bindParam(':profile_picute', $new_file_name);
     $stmt->bindParam(':first_name', $first_name);
     $stmt->bindParam(':last_name', $last_name);
     $stmt->bindParam(':phone_number', $phone_number);
     $stmt->bindParam(':email_address', $email_address);
     $stmt->bindParam(':data', $cv_data);
     $stmt->bindParam(':id', $user_id);


if($stmt->execute()){
$response["message"] = 'success';   
}else{
$response["message"] = 'error'; 
$errors++;
}

echo json_encode($response);
exit();

1 个答案:

答案 0 :(得分:0)

正如我在评论区所述:

  

我不太了解JS,但$('.employment_block:last').after.....中的输入没有像上面的输入那样的数组[],所以我不确定他们是否应该拥有它们还

OP:

  

是的,我刚检查过。你是对的。创建答案,我会将其标记为正确。 - 鲍勃

所以我是对的,今天我学会了一些JS; - )

因此这一行:

$('.employment_block:last').after('<div class="row employment_block"><div class="col-md-3"><input type="text" name="job_title" placeholder="Job title"></div><div class="col-md-3"><input type="text" name="job_duration" placeholder="Duration (i.e. 3 months / 1 year)"></div><div class="col-md-3"><input type="text" name="job_location" placeholder="Country"></div><div class="col-md-3 text-center"><button class="able_btn m-0 w-100 remove_employment"> remove </button></div></div>');
});

应该读作并为输入添加[]

$('.employment_block:last').after('<div class="row employment_block"><div class="col-md-3"><input type="text" name="job_title[]" placeholder="Job title"></div><div class="col-md-3"><input type="text" name="job_duration[]" placeholder="Duration (i.e. 3 months / 1 year)"></div><div class="col-md-3"><input type="text" name="job_location[]" placeholder="Country"></div><div class="col-md-3 text-center"><button class="able_btn m-0 w-100 remove_employment"> remove </button></div></div>');
});

为了将它们视为数组。