【问题标题】:PHP wont send text area to filePHP不会将文本区域发送到文件
【发布时间】:2012-12-26 02:45:34
【问题描述】:

我现在对 Jquery 很感兴趣,但想将文本区域保存到 txt 文件中。最终目标是能够将文本文件上传到同一个地方。我的代码中缺少什么?

不确定我在这段代码中定义文本区域的位置,或者它是否应该在另一个文件中,或者 html 文件是否应该具有 php 后缀?

下面的干杯是我对 php 的尝试。

代码

<?php
    if(isset($_POST['submit_save'])) {
        $file = "output.txt";
        $output = $_POST['output_str'];
        file_put_contents($file, $output);
        $text = file_get_contents($file);

        header("Content-type: application/text");
        header("Content-Disposition: attachment; filename=\"$file\"");
        echo $text; 
    }  
    else 
    {    
        $_POST['output_str'] = "";
    }
?>

</head>

<body>
    <input id="submit_save" type="button" value="save" />
    </br></br></br>
    <div id="opt"></div>
</body>
</html>

【问题讨论】:

  • 有什么问题?文件没有创建吗?创建的文件是空的吗?调用文件的(jQuery)代码在哪里?
  • 另外,textarea 在哪里?还有form 标签?
  • @yankee 抱歉忘了把它放进去我期待保存文件对话框出现,但我什么也没得到

标签: php html scripting


【解决方案1】:

我认为你正在尝试这样的事情。

<?php

  if(isset($_POST['textfield'])) {
    $file = "output.txt";
    $output = htmlspecialchars ($_POST['textfield'] );
    file_put_contents($file, $output );
    $text = file_get_contents($file);

    header("Content-type: application/text");
    header("Content-Disposition: attachment; filename=\"$file\"");
    echo $text;
    exit;

  }
?>

<html>
<head>
    <title>Your app</title>
</head>

<body>
  <form method="POST">
    <textarea name="textfield"></textarea>
    <input id="submit_save" type="button" value="save" />
  </form>

</body>
</html>

【讨论】:

  • 谢谢,但它似乎对我不起作用,我的文本区域可以有一个 ID 和名称吗?
  • 是的,你可以给 textarea 一个单独的“id”和一个“name”。 name 被表单使用,如果我是正确的,id 被 DOM 使用。
【解决方案2】:

使用 readfile 功能,不要忘记“退出”,以免损坏文件。和Enve said 一样,POST 数组键是 html "name"。

这是手册页中的一个示例:

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}

来源:http://php.net/manual/en/function.readfile.php

【讨论】:

    【解决方案3】:

    您的 PHP 脚本在您的网络服务器上运行,而不是在浏览器中。脚本的结果就是浏览器接收到的!

    在阅读您的问题时,(对我而言)不清楚您是将输入的(文本区域的)数据作为 文件 还是 HTML 页面。你似乎两者都想要,这是不可能的,选择一个。

    Fab Sa 已经演示了如何从 PHP 向浏览器发送 文件,所以我不再讨论这个。

    要在HTML 页面 的文本区域中填写输入的数据,您必须在HTML &lt;form&gt; 中添加&lt;textarea&gt;-标签。像这样的:

    <form method="post" action="<?= $PHP_SELF ?>">
    <textarea name="output_str"><?= $_POST['output_str'] ?></textarea>
    <input id="submit_save" name="submit_save" type="button" value="save" />
    </form>
    

    删除这部分代码(将部分数据作为文件发送):

        $text = file_get_contents($file);
        header("Content-type: application/text");
        header("Content-Disposition: attachment; filename=\"$file\"");
        echo $text; 
    

    注意:出于安全原因,您应该切勿在没有 sanitizing 的情况下使用 $_POST['output_str'](为了清楚起见,我在示例中省略了它)。

    【讨论】:

    • 谢谢,我想我对 PHP 感到头疼,我希望 textarea 保存为用户可以首先下载的文件。然后我会尝试解决上传部分。
    【解决方案4】:

    $_POST 用于名称。你需要添加名字到#submit_save

    <input name="submit_save" id="submit_save" type="button" value="save" />
    

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      相关资源
      最近更新 更多