[英]How to insert data with mysqli using PHP, AJAX & JSON?
的PHP
$data = array(
'success' => false,
'errors' => array()
);
if(isset($_POST['inputs'])) {
$inputs = $_POST['inputs'];
foreach($inputs as $input) {
$name = $input['name'];
$value = $input['value'];
switch ($name) {
case 'email':
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
$msg = "You must provide a valid e-mail address";
}
break;
default:
$msg = "Sorry, we do not understand the data, please try again";
break;
}
if(!empty($msg)) {
$data['errors'][] = array(
'msg' => $msg,
'field' => $name
);
}
}
if(empty($data['errors'])) {
$data['success'] = true;
$json = file_get_contents('php://input');
$obj = json_decode($json,true);
foreach ($obj as $item) {
$query = "INSERT INTO users (email)
VALUES
('".$item['email']."')";
$objConnection->query($query) or die($objConnection->error);
$objConnection->close();
}
}
} else {
$data['errors'][] = "Data missing";
}
header("Content-type: application/json; charset=UTF-8");
echo json_encode((object)$data);
jQuery / AJAX
$(function() {
$('.submit').click(function() {
var formInputs = new Array();
var formId = $(this).parent().attr('id');
$('#' + formId + ' input').each(function() {
var obj = {
'value': $(this).val(),
'name': $(this).attr('name')
};
formInputs.push(obj);
});
$.ajax({
url: 'add.php',
type: 'POST',
dataType: 'json',
cache: false,
data: {
'inputs': formInputs
},
success: function(data) {
if(data.success) {
$(".hej").html("worked");
} else {
$.each(data.errors, function() {
var list = "<p>"+this.msg+"</p>";
$(".hej").html(list);
});
}
}
});
return false;
});
});
我一直在尋找答案,看看自己是否能解決這個問題,我的確使用JSON和mysql找到了此插入數據 。 除了給我一個錯誤說:“為foreach()提供了無效的參數”外,它似乎正在工作。 如果有人有更好的方法/解決方案來插入數據,我會敞開心ear。
改變這個...
$json = file_get_contents('php://input');
$obj = json_decode($json,true);
foreach ($obj as $item) { //
至
$inputs = $_POST['inputs'];
foreach ($inputs as $item) { // rest of your code
原因是因為您要發布,而不是告訴它application / json,所以它使用默認的application / x-www-form-urlencoded
因此請注意,當您在頂部進行檢查時,將使用$ _POST。 但接下來的部分使用file_get_contents。 只需使用$ _POST,您的foreach將具有值。
從頂部的switch語句判斷,您可能還必須執行類似的開關才能插入正確的電子郵件。
像這樣
$inputs = $_POST['inputs'];
foreach($inputs as $item) {
$name = $item['name'];
$value = $item['value'];
if($name=='email'){
$query = "INSERT INTO users (email) VALUES ('".$value."')";
$objConnection->query($query) or die($objConnection->error);
$objConnection->close();
}
}
我想到了!
if(empty($data['errors'])) {
$data['success'] = true;
$inputs = $_POST['inputs'];
$email = $inputs[0]['value']; // I select the first element in my array, then I select its value
$password = $inputs[1]['value']; // I select the second element in my array, then I select its value
$query = "INSERT INTO users (email, password)
VALUES
('{$email}', '{$password}')";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.