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!

9
  • 1
    Can you show a sample of what $str looks like after the implode() Commented Jan 18, 2016 at 9:31
  • 3
    Also have you tried <?php echo $str; ?> Commented Jan 18, 2016 at 9:33
  • 1
    As @RiggsFolly pointed out the code reads <?php $str; ?> instead of <?php echo $str; ?> Commented Jan 18, 2016 at 9:42
  • 1
    Can you show a sample of what $str looks like after the implode() Do an echo $str; and paste that result into your question Commented Jan 18, 2016 at 9:51
  • 1
    Ok so move the echo $str; to be inside the <body> maybe then you will see it Commented Jan 18, 2016 at 10:23

4 Answers 4

1

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

Sign up to request clarification or add additional context in comments.

4 Comments

What does the Javascript console tell you? I copied/paste your code and everything works well with these fixes.
The console tells me Uncaught SyntaxError: Unexpected token <. ....do I have to escape < or something?
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?
No, I was executing it with my browser. The file extension is .php.
1

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

5 Comments

I tried that now. Instead of a blank page, I see the html source code.
Check that the file name has not become test.php.txt
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??
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...
If you need to install a web server in your machine (required to run php files), take a look at XAMPP: apachefriends.org/it/index.html
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.

3 Comments

Okay, I'll check it out. Thanks!
@dixhom you have to make some adjustments yourself, but feel free to ask questions and don't forget to debug (var_dump) a this stuff so you know what happens where.
Your code is far above my knowledge so I'd like to start by "interpreting" your code. Many thanks.
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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.