【问题标题】:Post saves filename as array;jpg instead of input namePost 将文件名保存为数组;jpg 而不是输入名称
【发布时间】:2019-12-07 12:33:38
【问题描述】:

尝试使用输入框中的名称将 jpg 文件保存到服务器,但保存为 Array.jpg

html文件内容:

<input type="text" name="datepicker" id="datepicker">

php文件内容:

$image = $_POST['image'];

$location = "upload/";

$image_parts = explode(";base64,", $image);

$image_base64 = base64_decode($image_parts[1]);

$filename = ['datepicker'].'.jpg';
echo $_REQUEST['datepicker'];

$file = $location . $filename;

file_put_contents($file, $image_base64);

来自 html 的脚本:

<script type='text/javascript'>
function screenshot(){
  html2canvas(document.body).then(function(canvas) {

    // Get base64URL
    var base64URL = canvas.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');

    // AJAX request
    $.ajax({
       url: 'ajaxfile.php',
       type: 'post',
       data: {image: base64URL},
       success: function(data){
       console.log('Upload successfully');
       }
    });
  });
}
</script>

没有错误信息,只是用错误的名字保存。

已经尝试过:

$filename = ['datepicker']; - saves as: Array (no extension).  
$filename = $_POST['datepicker']; (nothing gets saved at all).   
$filename = $_POST['datepicker'].'.jpg'; (saves as .jpg (just extension, no file name).   
$filename = $_FILES['datepicker']['name'];  (nothing gets saved at all).   
$filename = $datepicker;   (nothing gets saved at all).   
$filename = "screenshot_".uniqid().'.jpg'; saved as screenshot_5d40158a1dad5.jpg

在我看来,表单名称字段 datepicker 对 php 文件根本不可用。 也许这是因为对 php 文件的调用(或您调用的任何名称)都包含在 javascript 标签中?我不知道。在尝试了 24 小时后才感到沮丧。

我想我必须将表单名称字段 datepicker 传递给 ajax 代码,然后在 php 文件中使用它。 有谁知道如何修改我的代码来做到这一点?

我现在已经解决了这个问题。我不得不修改 html 中的 javascript 以在文本输入框中包含一个带有 vale 的 var,并更新 ajax 以将其包含在数据行中。

<script type='text/javascript'>
function screenshot(){
  html2canvas(document.body).then(function(canvas) {

    // Get base64URL
    var base64URL = canvas.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');
    var val1 = $('#datepicker').val();

    // AJAX request
    $.ajax({
       url: 'ajaxfile.php',
       type: 'post',
       //data: {image: base64URL, name: datepicker},
       data: {image: base64URL, datepicker: val1},
       success: function(data){
       console.log('Upload successfully');
       }
    });
  });
}
</script>

然后我必须用文件名更新 php 文件,以在文件名中包含表单中的 txt 数据:

<?php 

$image = $_POST['image'];

$location = "upload/";

$image_parts = explode(";base64,", $image);

$image_base64 = base64_decode($image_parts[1]);

$filename = $_POST['datepicker'].'.jpg';

$file = $location . $filename;

file_put_contents($file, $image_base64);

?>

【问题讨论】:

  • 如果您使用 post take as $_POST[“name”] 或 fir get $_GET[“name”] for basic php,您将收集名称作为数组
  • 您正在这里主动创建一个数组['datepicker'] - 这是一个包含一个元素的数组,即字符串datepicker。由于您随后尝试将其与后缀 .jpg 连接,因此该数组被强制转换为字符串,其结果始终是 word“数组”。
  • 谢谢 samuhay,我使用下面的示例尝试了 $_POST[“name”],但这仅保存为 .jpg。我尝试修改该行以使用 $_GET[“name”] ($_GET['datepicker'].'.jpg';) 但根本没有上传任何内容。
  • 谢谢 misorude。我不知道这是在创建一个数组。我对此非常陌生。永远不需要创建数组,因为它始终只是一个文件。我看过的几乎所有示例都提供了这种方法,尽管只是针对一个文件(但他们没有添加 ext)。
  • 我将html文件中的脚本代码添加到原帖中

标签: php post user-input


【解决方案1】:

$filename = $_POST['datepicker'].'.jpg';

【讨论】:

  • 非常感谢 Ryan,但这只是将其保存为 .jpg
  • 你能给我一个 var_dump($_POST['datepicker']); 的结果吗? ?
  • 如果我知道把它放在哪里就可以了。
  • 谢谢,我更新了 ajax 和 javascript(因为输入框中的 txt 根本没有发送到 php),然后能够在 php 中使用您的示例,现在一切正常.使用新代码查看我更新的原始帖子。
【解决方案2】:

您使用的不是在 PHP 中存储文件的好方法。

您应该在存储图像之前为图像名称添加当前日期和一些由 PHP 生成的随机数,因为如果要将两个图像存储在服务器上的同一文件夹中,则第一个图像将被覆盖,而第二个文件将存储在其使第一张图片完全消失的地方

尝试将“date('Ymdhis').rand(100000,999999)”前缀到您的图像文件,并使用$_FILES['something']['name']$_FILES['something']['tmp_name']分别获取图像的名称和临时名称来存储图像

【讨论】:

  • 谢谢阿卜杜勒。该文件将与日期一起保存。这是一个简单的时间表应用程序,其中输入了一周的预期工作时间。这几乎总是会发生变化,因此文件至少需要被覆盖一次。
【解决方案3】:

我现在已经解决了这个问题。我不得不修改 html 中的 javascript 以包含一个带有文本输入框中值的 var 并更新 ajax 以将其包含在数据行中。

<script type='text/javascript'>
function screenshot(){
  html2canvas(document.body).then(function(canvas) {

    // Get base64URL
    var base64URL = canvas.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');
    var val1 = $('#datepicker').val();

    // AJAX request
    $.ajax({
       url: 'ajaxfile.php',
       type: 'post',
       //data: {image: base64URL, name: datepicker},
       data: {image: base64URL, datepicker: val1},
       success: function(data){
       console.log('Upload successfully');
       }
    });
  });
}
</script>

然后我必须用文件名更新 php 文件,以在文件名中包含表单中的 txt 数据:

<?php 

$image = $_POST['image'];

$location = "upload/";

$image_parts = explode(";base64,", $image);

$image_base64 = base64_decode($image_parts[1]);

$filename = $_POST['datepicker'].'.jpg';

$file = $location . $filename;

file_put_contents($file, $image_base64);

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2012-04-09
    相关资源
    最近更新 更多