3

Environment

  • Windows 8.1 64bit
  • Google Chrome

What I'm trying to do

Ultimate goal

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.

Current issue

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.

update1

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.

update2

I changed the extension to php and now it works fine. Thanks, folks!

Community
  • 1
  • 1
dixhom
  • 2,419
  • 4
  • 20
  • 36

4 Answers4

1

Maybe it's because the php file doesn't have a .php extension. Try renaming test.html in test.php.

roibeart
  • 82
  • 6
  • I tried that now. Instead of a blank page, I see the html source code. – dixhom Jan 18 '16 at 09:47
  • 1
    Check that the file name has not become `test.php.txt` – RiggsFolly Jan 18 '16 at 09:50
  • 1
    Also _probably a silly question but I will ask anyway_ You are running this through a web server and NOT launching this code from a double click on a filename in explorer? RIGHT?? – RiggsFolly Jan 18 '16 at 09:55
  • The file name is not `test.php.txt`. And I'm doing the latter. Sorry, I don't know much about what's matters of course in web development... – dixhom Jan 18 '16 at 10:01
  • If you need to install a web server in your machine (required to run php files), take a look at XAMPP: https://www.apachefriends.org/it/index.html – roibeart Jan 18 '16 at 10:46
1

Replace <?php $str; ?> with <?php echo $str; ?>, change the extension of your file to .php instead of .html, and everything will work well.

  • 1
    What does the Javascript console tell you? I copied/paste your code and everything works well with these fixes. – Maxime Alay-Eddine Jan 18 '16 at 09:48
  • The console tells me `Uncaught SyntaxError: Unexpected token <`. ....do I have to escape < or something? – dixhom Jan 18 '16 at 09:55
  • 1
    Are you executing your script through a web server that can handle PHP? If your Javascript console says 'Unexpected token <' I think it's that the PHP code is not interpreted... Also, did you check that your file extension is .php? – Maxime Alay-Eddine Jan 18 '16 at 09:58
  • No, I was executing it with my browser. The file extension is .php. – dixhom Jan 18 '16 at 10:13
1

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, "\n");
        $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 .= "\n";
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 .= "\n";
        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.

online Thomas
  • 8,864
  • 6
  • 44
  • 85
1

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.

ajoposor
  • 17
  • 5