我正在尝试仅使用HTML表单上传CSV文件,然后使用PHP和Javascript将其保存在数组中。
我有一些代码,完全可以作为单独的文件使用。虽然,当我尝试将它们合并到一个文件中时,它拒绝工作,Javascript数组最终只是警告null
。
我试图只在表单已发布时调用PHP,然后仅在按下提交按钮时调用Javascript。
分离的版本 - 工作
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>
答案 0 :(得分:3)
失败是因为{<1}}在表单提交到服务器之前单击按钮时触发。为此,您需要将表单提交给服务器。您可以使用真实表单提交(将重新加载页面)执行此操作,您可以将表单提交到onclick
,或者您可以使用AJAX提交表单。
第一次加载页面时,当然<iframe>
为空,因为没有上传文件。当your_array
触发时(在提交表单之前),它只是从初始页面加载中提醒此空值。
要使当前解决方案正常工作(重新加载整个页面),请从PHP代码内部而不是onclick
触发JavaScript:
onclick
答案 1 :(得分:0)
真的吗?你可以把整个html表单放到一个变量中,然后当用户访问页面时,php会检查表单是否被提交。如果它被提交,它什么都不做,但它将其余部分留给javascript.If它没有提交,它显示变量中的表单并暂停脚本的执行。这样,你就不必删除onclick或你在那里获得的所有其他很酷的东西。
<html>
<?php $form=<form>...</form>;
if (!isset($_GET['submit']))
{die ("$form");}
<script>...</script>
</html>
这样,除非提交表单,否则不会执行您的javascript。