2

我正在尝试仅使用 HTML 表单上传 CSV 文件,然后使用 PHP 和 Javascript 将其保存在数组中。

我有一些代码,可以作为单独的文件完美运行。虽然,当我尝试将它们合并到一个文件中时,它拒绝工作,并且 Javascript 数组最终只是以 null.

我试图仅在表单已发布时调用 PHP,然后仅在按下提交按钮时调用 Javascript。

分离版 - WORKING

的HTML

<form action="yourscript.php" method="post" enctype="multipart/form-data">
 <input type="file" name="upload_file" />
 <input type="submit" />
</form>

Javascript 和 PHP

<?php
$csv_array = Array();
$file = fopen($_FILES['upload_file']['tmp_name'], 'r');
if($file){
    while (($line = fgetcsv($file)) !== FALSE) {
      //$line is an array of the csv elements
      array_push($csv_array,$line);
    }
    fclose($file);
}
?>
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script>var your_array = <?php echo json_encode($csv_array); ?></script>
</head>
<body>

</body>
</html>

合并版本 - 不工作

<?php

if(isset($_POST['savecsv']))
{
    $csv_array = Array();
    $file = fopen($_FILES['upload_file']['tmp_name'], 'r');
    if($file)
    {
        while (($line = fgetcsv($file)) !== FALSE) 
        {
            //$line is an array of the csv elements
            array_push($csv_array,$line);
        }
        fclose($file);
    }
}

?>


<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script>
    function saveArray()
    {
        var your_array = <?php echo json_encode($csv_array); ?>

        alert(your_array);
    }
    </script>
</head>
<body>

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
 <input type="file" name="upload_file" />
 <input type="submit" name="savecsv" onClick="saveArray();"/>
</form>

</body>
</html>
4

2 回答 2

3

它失败了,因为在表单提交到服务器之前onclick单击按钮时触发。为了使其工作,您需要将表单提交到服务器。您可以通过真正的表单提交(这将重新加载页面)来完成此操作,您可以将表单提交到.,或者您可以使用 AJAX 提交表单。<iframe>

页面第一次加载时,当然your_array是 null 因为没有上传文件。当onclick触发时(在提交表单之前),它只是在初始页面加载时提醒这个空值。

要使您当前的解决方案正常工作(重新加载整个页面),请从 PHP 代码内部触发 JavaScript,而不是onclick

<?php
if (isset($csv_array)) {
    $json = json_encode($csv_array);
    echo <<<HTML
    <script>
        var your_array = $json;
        alert(your_array);
    </script>
HTML;
}
于 2013-08-22T02:59:56.707 回答
0

真的吗?您可以将整个 html 表单放入一个变量中,然后当用户访问该页面时,php 检查表单是否已提交。如果已提交,它什么也不做,而是将其余部分留给 javascript。如果没有提交后,它会显示变量中的表单并停止脚本的执行。这样,您不必删除 onclick 或所有其他很酷的东西。

 <html>
 <?php $form=<form>...</form>;
 if (!isset($_GET['submit']))
{die ("$form");} 

<script>...</script>
</html>

这样,除非提交表单,否则您的 javascript 将不会被执行。

于 2013-08-22T03:31:59.687 回答