Теперь я знаю, что это было задано раньше, но ни один из ответов не предложил мне прозрения на сегодняшний день;
У меня есть страница HTML со сценарием ниже (в конечном итоге я буду использовать этот скрипт для извлечения данных из приложения), в основном тестирование для отправки некоторых данных в формате JSON на страницу PHP, которая должна заполнить базу данных MYSQL записью.
Моя проблема в том, что я не получаю обновления записи в таблице. Нада.
Это уже несколько недель путало меня; самое близкое, что у меня есть:
Отправить данные JSON с Javascript на PHP?
Мой ограниченный успех на сегодняшний день состоял в том, чтобы захватить данные из файла.json и обновить базу данных таким образом на php-странице. Таким образом, JSON отлично работает в скрипте, и соединение с базой данных в порядке. Я просто не могу передать его с html-страницы на php и заполнить db. Я не могу понять, почему это должно быть так сложно.
Любые предложения/указатели будут оценены (мне нужно сохранить это просто, так как я относительный новичок). Заранее спасибо.
<script>
var jsonQuizData = {};
var qID = '9';
var learnersName = 'Bart Bundy';
var learnersEmail = '[email protected]';
var quizName = 'SomeQuiz99';
var quizScore = '33%';
var result1 = 'Some blob data goes in here?';
var dbString, request;
jsonQuizData = '{ "id":qID, usersName":learnersName, "usersEmail":learnersEmail, "quizTitle":quizName, "qScore":quizScore, "Output1":result1 }';
dbString = JSON.stringify(jsonQuizData);
request = new XMLHttpRequest();
request.open("POST", "process.php", true);
request.setRequestHeader("Content-Type", "application/json");
request.send(dbString);
</script>
<?php
header("Content-Type: application/json; charset=UTF-8");
//Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection etc. performed here
$data = json_decode(file_get_contents("php://input"));
$id = $data['id'];
$name = $data['usersName'];
$email = $data['usersEmail'];
$qtitle = $data['quizTitle'];
$result1 = $data['Output1'];
$qScore = $data['score'];
//insert into mysql table
$sql = "INSERT INTO quiz01(quiz_id, quiz_title, fName, eMail, quiz_score, q1_answer)
VALUES('$id', '$qtitle', '$name', '$email', '$qScore', '$result1')";
if(!mysqli_query($conn,$sql))
{
die('Error : ' . mysqli_error($conn));
}
else
{
echo "Data inserted successfully";
}
//Close connection
/?>
.... Время кирпичной стены
Обновление: правильно, заработал, делая следующее:
HTML-страница
<script>
var jsonQuizData = {};
var learnersName = 'Professor T';
var learnersEmail = '[email protected]';
var quizName = 'TidlyWinks101w';
var quizScore = '100%';
var result1 = 'Balls said the crow';
var dbString, request;
jsonQuizData = JSON.stringify({"quizTitle":quizName, "usersName":learnersName, "usersEmail":learnersEmail, "qScore":quizScore, "Output1":result1 });
$(document).ready(function()
{
$("button").click(function()
{
$.post("working01.php", 'json='+jsonQuizData,
function(data,status)
{
//alert("Data: " + data + "\nStatus: " + status);
document.getElementById("AV1").innerHTML = data;
});
});
});
</script>
И PHP-страница...
<?php
//Set up connections to database etc...
if (isset($_POST['json']))
{
$str = $_POST['json'];
$contents = json_decode($str);
$qtitle = $contents->quizTitle;
$name = $contents->usersName;
$email = $contents->usersEmail;
$qScore = $contents->qScore;
$result1 = $contents->Output1;
}
$sql = "INSERT INTO quiz01(quiz_title, fName, eMail, quiz_score, q1_answer)
VALUES('$qtitle', '$name', '$email', '$qScore', '$result1')";
if(!mysqli_query($conn,$sql))
{
die('Error : ' . mysqli_error($conn));
}
else
{
echo "Data inserted successfully";
}
//Close connections
?>
Но так захотите сделать это, используя объект XMLHttpRequest() и отправьте json. в соответствии с Rasclatt. Спасибо
Ваша строка в вашем примере неверна, это уже строка, поэтому я думаю, что вы хотите сделать:
var jsonQuizData = {};
var qID = '9';
var learnersName = 'Bart Bundy';
var learnersEmail = '[email protected]';
var quizName = 'SomeQuiz99';
var quizScore = '33%';
var result1 = 'Some blob data goes in here?';
var dbString, request;
// Here you have to stringify the data object, not a string of the data object.
jsonQuizData = JSON.stringify({"id":qID, "usersName":learnersName, "usersEmail":learnersEmail, "quizTitle":quizName, "qScore":quizScore, "Output1":result1});
request = new XMLHttpRequest();
request.open("POST", "process.php", true);
// Send the regular form header
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
alert(this.responseText);
}
};
// Now when it sends, it should send it properly as a post
request.send('json='+jsonQuizData);
Затем в PHP вам не нужно отправлять строку:
header("Content-Type: application/json; charset=UTF-8");
и вы можете изменить эту строку:
$data = json_decode(file_get_contents("php://input"));
чтобы просто:
$data = json_decode($_POST['json'],true);
Теперь все должно быть в регулярном $_POST
, тогда вам нужно привязать параметры при вставке.
file_get_contents("php://input")
вместо переменной$_POST
которую нужно передать? Добавитьprint_r($_POST);
наверх вашего php и посмотрите, что из этого выйдет, когда ваш XMLHttpRequest ударит его (вкладка сети в браузере). Примечание: все это очень легко, используя jquery .ajax.