【问题标题】:how to get image type(not file type) data from form in html to php?如何从 html 到 php 的表单中获取图像类型(不是文件类型)数据?
【发布时间】:2020-07-10 04:59:18
【问题描述】:

<?php

 if(isset($_POST['submit'])){
     $data=$_POST['image'];
     echo $data;           //echo "hello";
 }
?>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        #canvas {
            border: 1px solid black;
        }
    </style>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <!-- <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> -->
    <script>
        function send() {
            var dataURL = canvas.toDataURL();
            console.log(dataURL);
            document.getElementById('image').src=dataURL;
            documnet.getElementById('submit').click();
            
        }
    </script>
</head>

<body>

    <canvas id="canvas"></canvas>

    <button onclick="send()">Done</button>

    
    <form action="index.php"  method="post">
        <input type="image" name="image" id="image" hidden >
        <input type="submit" id="submit"  name="submit" >
    </form>

    <script>
        window.addEventListener("load", () => {
            const canvas = document.querySelector("#canvas");
            const ctx = canvas.getContext("2d");

            canvas.height = window.innerHeight - ((10 * window.innerHeight) / 100);
            canvas.width = window.innerWidth;
            //variables
            let painting = false;


            function startPosition(e) {
                painting = true;
                draw(e);
            }

            function finishPosition() {
                painting = false;
                ctx.beginPath();
            }

            function draw(e) {
                if (!painting) return;
                ctx.lineWidth = 10;
                ctx.lineCap = "round";

                ctx.lineTo(e.clientX, e.clientY);
                ctx.stroke();
                ctx.beginPath();
                ctx.moveTo(e.clientX, e.clientY);
            }
            //listners
            canvas.addEventListener("mousedown", startPosition);
            canvas.addEventListener("mouseup", finishPosition);
            canvas.addEventListener("mousemove", draw);

        });
    </script>
</body>

</html>

首先,我使用画布在浏览器上绘制一些东西,点击完成后,该绘图将作为图像提交给表单,然后提交表单。 此表单数据被接收到同一页面并通过 post 方法检索,但在打印 post 方法时,显示没有任何输出。 有人可以帮我解决这个问题吗?我是新手

【问题讨论】:

  • 您的示例有语法错误。对于这些,很难知道真正的问题是什么。
  • 对;启用错误报告。关于上述评论,如果他们指的是 php,我可以(也)看到。
  • 图片不能“隐藏”。有一种特定的方式来处理文件,而为了让它工作,你已经丢失了它的代码。
  • 我是编码新手,有人能说一下 php 有什么问题吗?回显 Hello 以检查是否执行了内部块(发布时忘记删除)

标签: javascript php html forms file


【解决方案1】:

您正在使用一个图像提交按钮(在可以编写 &lt;button&gt;&lt;img src="..."&gt;&lt;/button&gt; 之前使用),您可能会通过设置其 value 然后实际单击它来滥用它作为表单字段但我认为这不是你想要的。您想使用&lt;input type="hidden"&gt; 而不是&lt;input type="image"&gt;,然后您会得到一个隐藏的表单字段,您可以将其值设置为您想要的任何值。

所以,改变这个...

<input type="image" name="image" id="image" hidden >

...到这个:

<input type="hidden" name="image" id="image">

然后,您还必须更改代码以分配给value 而不是src

改变这个...

document.getElementById('image').src=dataURL;

...到这个:

document.getElementById('image').value=dataURL;

然后您应该会看到从 PHP 返回的数据 URL 就好了。如果需要,您还可以将其输出为图像:&lt;img src="&lt;?php echo htmlentities($_POST['image']); ?&gt;"&gt;

【讨论】:

  • 这不是他们代码的唯一错误。我不太了解 JS,但我对它也不陌生,但在“php”方面存在错误。我认为您没有涵盖它的 php 方面,对吗?
  • 我没有看到 PHP 代码有任何问题(除了它当然还没有完成)。如果正确发送了值,那么 OP 会看到数据 URL 按预期从 PHP 回显(加上“hello”,在实际 HTML 之前,所以它会使 HTML 无效,但现在没关系,我认为他们只是想看看他们是否能拿回价值)。
  • Read my comment I left to them under their question 我很确定您会想要更改您的回复嘿!
  • 哦,但我忽略了输入的类型是“图像”。秒,更新。
  • 好的,我们同时注意到了^^
猜你喜欢
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 2021-10-24
相关资源
最近更新 更多