Make a pet monitoring system using Raspberry Pi. Create a webpage where you can check streaming image of a pet and the temperature and humidity.
Can't read csv data (temperature and humidity) using PHP and pass it to javascript in a html file.
The following gives me a blank page.
test.html
<?php
$data = array();
$fp = fopen('temphumid.csv', 'r');
$row = fgetcsv($fp); // skip the header
while ($row = fgetcsv($fp)) { $data[] = sprintf("['%d', %d, %d] ", $row[0], $row[1], $row[2]); }
$str = implode(', ' . PHP_EOL, $data);
?>
<html>
<head>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([ ['day', 'avg_temp', 'avg_humid'],
<?php $str; ?>
]);
var options = { title: 'This is a test graph' };
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="chart_div" style="width: 80%; height: 400px;"></div>
</body>
</html>
temphumid.csv is in the same directory as test.html.
temphumid.csv
dateandtime,temp,humid
1,20.0701749938488,48.0275514992728
2,20.2401044696121,57.2354245801184
3,19.1474087424506,45.5657495890199
4,18.8319188605772,62.4405658353862
5,20.8854516366497,46.5185590247232
6,20.7459481702926,47.4137986506082
7,20.9609524855751,48.5064890268627
8,17.0936718055156,46.1276393517355
9,18.4273511669417,42.4825830307023
10,20.9669696456074,51.5502032331834
I tried a lot of things including adding echo
to php clause, hard-coding a sample array in javascript, etc... in vain.
Changing the line of <?php echo $str; ?>
to [0, 5, 4], [1, 9, 10], [2, 20, 23]
works fine. So there's something wrong with PHP but I can't figure out what it is.
I also referred to this post. - How to pass variables and data from PHP to JavaScript? But this wasn't helpful.
Also, the javascript console told me the following message.
The console tells me Uncaught SyntaxError: Unexpected token <
How can I solve this issue? Thanks in advance.
I added echo
and ran the program in a web server in Raspberry Pi. However, I still see a blank page and Uncaught SyntaxError: Unexpected token <
on console.
I changed the extension to php
and now it works fine. Thanks, folks!
Replace <?php $str; ?>
with <?php echo $str; ?>
, change the extension of your file to .php instead of .html, and everything will work well.
Maybe it's because the php file doesn't have a .php extension. Try renaming test.html
in test.php
.
Some similar code I wrote:
$seperator = $_POST['seperator'];
$escape = $_POST['escape'];
$default_val = $_POST['default_val'];
$files = $_FILES['filesToUpload']['name'];
$files_array = array();
//no files selected
if ($files[0] == "") {
echo "You have to select at least 1 file";
exit();
}
//preprocess by creating an array per file with it's path and name
$count = 0;
foreach ($files as $file) {
$current_file = array();
$current_file['name'] = $file;
$current_file['path'] = $_FILES['filesToUpload']['tmp_name'][$count];
$files_array[$file] = $current_file;
++$count;
}
$translation_array = array();
$languages = array();
foreach ($files_array as $file_key => $file_value) {
$text_file = file($file_value['path']);
$languages[] = $file_value['name'];
foreach ($text_file as $line_number => $line) {
$line = rtrim($line, "
");
$line_parts = explode('=', $line);
$translation_key = $line_parts[0];
if ($file_value['name'] != 'brndportal.properties') {
$translation_array[$translation_key][$file_value['name']] = $line_parts[1];
} else {
$translation_array[$translation_key][$file_value['name']] = $line_parts[0];
}
}
}
$translation_csv = fopen("files/translation.csv", "w") or die("Unable to open file!");
//headers
$txt = "key" . $seperator;
foreach ($files as $file) {
$txt .= $file . $seperator;
}
$txt .= "
";
fwrite($translation_csv, $txt);
//translations
foreach ($translation_array as $translation_key => $translation_arr) {
if (array_key_exists('brndportal.properties', $translation_array[$translation_key])) {
$txt = '';
$txt .= $translation_key . $seperator;
foreach ($languages as $language) {
if(array_key_exists($language, $translation_arr)) {
$translation_value = $translation_arr[$language];
}
else {
$translation_value = $default_val;
}
if (strpos($translation_value, $seperator) !== false) {
$translation_value = $escape . $translation_value . $escape;
}
$txt .= $translation_value . $seperator;
}
$txt .= "
";
fwrite($translation_csv, $txt);
}
}
fclose($translation_csv);
It reads 1 or more CSV files and parse the lines. You can insert you own separator and stuff.
I think it would be best to read everything to arrays and serialize it to JSON, that way you can pass it to javascript with an ajax call. I'd suggest using jQuery for that part.
I had the same difficulty with Uncaught SyntaxError: Unexpected token <
on the console.
The <?php echo $str; ?>
solution works for certain variables. I had an array though.
So I used var myArray = <?php echo json_encode($myArray); ?>
and it worked.