Вывод сводных данных из базы в формате 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, время: 11:33. |