Вывод сводных данных из базы в формате json
Здравствуйте, уважаемые программисты!
Делаю свои первые шаги в изучении php и в работе с базами данных. Данные в базу отправляю так: на странице (назовем скрипт №1):
data_surv["age"] = encodeURIComponent("Мужской");
data_surv["sex"] = encodeURIComponent("20-30 лет");
jQuery.ajax({
type: "POST",
url: "response.php",
dataType:"text",
data:data_surv,
success:function(response){
$("html, body, .main").css("cursor", "default");
},
error:function (xhr, ajaxOptions, thrownError){
alert(thrownError); //выводим ошибку
}
});
в response.php (№2):
<?php
//подключаем бд
include_once("config.php");
$age = filter_var($_POST["age"],FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$sex = filter_var($_POST["sex"],FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
if( mysql_query("INSERT INTO test_table(age, sex) VALUES('".$age."','".$sex."')") ){
$my_id = mysql_insert_id();
mysql_close($connecDB);
}else{
header('HTTP/1.1 500 could not insert record!');
exit();
}
?>
Получаю данные так: на странице (№3):
$.ajax({
type: "POST",
url: "pivot_data.php",
dataType: "json",
success: function(data) {
console.log(data);
},
error: function(error){
console.log(JSON.stringify(error));
}
})
в pivot_data.php (№4):
<?php
//Наша БД
include_once("config.php");
$i=0;
$data = mysql_query("SELECT * FROM test_table");
if (!$data) {
//$result['error'] = 'Ошибка запроса: ' . mysql_error();
//echo json_encode($result);
exit;
}
while($row = mysql_fetch_array($data)){
$sex[$row["sex"]]++;
$age[$row["age"]]++;
$i++;
}
mysql_close($connecDB);
$result['records'] = $i;
$result['chart1'] = $sex;
$result['chart2'] = $age;
echo json_encode($result);
?>
Скрипт №3 возвращает ошибку:
{
"readyState":4,
"responseText":"{\"records\":4,\"chart1\":{\"%D0%96%D0%B5%D0%BD%D1%81%D0%BA%D0%B8%D0%B9\":2,\"%D0%9C%D1%83%D0%B6%D1%81%D0%BA%D0%BE%D0%B9\":2},\"chart2\":{\"25-34\":2,\"15-24\":1,\"45-54\":1},}",
"status":200,
"statusText":"OK"
}
Если в скрипте №3 поменять dataType на text, то все нормально возвращается. Я думала, раз текстов выводится, то можно тогда вернуть JSON.parse(data). Но так тоже ошибка появляется: Uncaught SyntaxError: Unexpected token in JSON at position 0 Подскажите пожалуйста, в чем может быть ошибка? |
Блин... 2-й день уже ищу ошибку, а проверить кодировку файла с php догадалась только сейчас:haha:
Поменяла на Utf-8 и все заработало, так что отбой паники)) |
Цитата:
Цитата:
Ошибка потому, что до передачи json клиенту уже был вывод в браузер. |
Цитата:
|
laimas,
Спасибо за дельные замечания! Села переделывать все.:thanks: |
Все замечания отсюда.
А обязательно фильтруя ввод не стоит впадать в паранойю, база данных тоже может хранить в себе "опасные" предметы как есть также как и дамская сумочка - пилочки, ножницы, и прочие колющиеся предметы. ;) |
Кажется, я все сломала:haha:
Помогите, пожалуйста, найти ошибку. config.php (подключение к бд):
<?php
$hostname = "tra-ta-ta";
$username = "tru-tu-tu";
$password = "purum-purum";
$dbName = "param-param";
$mysqli = mysqli_connect($hostname, $username, $password, $dbName);
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s\n", mysqli_connect_error());
exit();
}
mysqli_set_charset($mysqli, "utf8");
echo 'Соединение установлено... ' . mysqli_get_host_info($mysqli);
mysqli_close($mysqli);
?>
send_data.php (отправка данных):
<?php
include_once("config.php");
/*
$age = $_POST["age"];
$sex = $_POST["sex"];
$stores = $_POST["stores"];
$costs = $_POST["costs"];
*/
$age = mysqli_real_escape_string($mysqli, '25-35');
$sex = mysqli_real_escape_string($mysqli, 'Женский');
$stores = mysqli_real_escape_string($mysqli, '2 магазина');
$costs = '800';
if( mysqli_query($mysqli, "INSERT INTO L007_demo(age, sex, stores, costs) VALUES('$age','$sex','$stores','$costs')") ){
echo 'OK';
mysqli_close($mysqli);
}else{
echo 'Error';
exit();
}
?>
Файлики лежат в одной папке. Подключение проходит успешно, ошибка в отправке данных. Если убрать mysqli_real_escape_string, все равно не работает.:cray: Версия php, если это важно - 5.2.17. |
$sex = mysqli_real_escape_string($mysqli, 'Женский'); $stores = mysqli_real_escape_string($mysqli, '2 магазина'); и это http://fi2.php.net/manual/ru/mysqli.prepare.php, а иначе грех используя драйвер, не использовать его возможности. Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 14:50. |