如何使用PHP捕获Szimek / Signature_Pad(将Javascript捕获到PHP变量中)?

时间:2013-08-17 01:00:05

标签: php javascript

我正在浏览StackOverflow并遇到Szimek / Signature_Pad使用Javascript捕获电子/数字签名。

我研究过,我仍然对如何将DATA URI捕获到变量中感到茫然。

http://szimek.github.io/signature_pad/

我希望像$inputESignature = signaturePad.toDataURL()一样捕获它,其中signaturePad.toDataURL()是Javascript。

如果需要澄清,请告诉我。对不起,如果我的请求有点模糊。

5 个答案:

答案 0 :(得分:2)

对于需要推进正确方向的其他用户,发现$ _POST或$ _REQUEST非常含糊......

这就是我所做的。

首先我添加了一个隐藏的输入,因为我将其整合到一个表单中:

<input type="hidden" name="input_name" value="" />

然后你可以将数据uri图像存储到该输入的值中,它将与表格一起存储。

我将此添加到JS中以将数据uri添加到表单中:

var input = wrapper.querySelector("input");

canvas.addEventListener("mouseup", function(event) {
    if ( signaturePad.isEmpty() ) {
        input.value = '';
    } else {
        input.value = signaturePad.toDataURL();
    }
});

然后使用input.value = '';更新清除按钮以擦除字段:

clearButton.addEventListener("click", function (event) {
    signaturePad.clear();
    input.value = '';
});

这是基于Szimek's demo code

将数据发布到php的另一个选择是使用ajax请求,使用jQuery的$ .ajax或$ .post非常容易。

这个脚本非常容易使用...

答案 1 :(得分:1)

我还使用Szimek的演示代码作为我的解决方案的基础。我在使用iPad时使用Jake的方法遇到了一些麻烦,因此我对演示代码的干预更少。

我还添加了一个HTML表单,但我的表单没有按钮,它只是有不可见的输入元素:

<form id="sigform" action="myscript.php" method="post">
    <input id="siginput" type="hidden" name="sig" value="" />
</form>

然后我在demo app.js代码中将以下var定义和此更改添加到saveButton侦听器:

var form = document.getElementById("sigform"),
    input = document.getElementById("siginput")

saveButton.addEventListener("click", function (event) {
    if (signaturePad.isEmpty()) {
        alert("Please provide signature first.");
    } else {
        input.value = signaturePad.toDataURL();
        form.submit();
    }
}

最后,为了处理PHP中的结果,我使用了这个:

if ( $_POST['sig'] ) {
    file_put_contents("myfile.png", file_get_contents($_POST['sig']));
}

这就是诀窍。

答案 2 :(得分:0)

正确回答你的问题。

您可以使用$_POST$_REQUEST在PHP中检索帖子变量 http://www.php.net/manual/en/reserved.variables.request.php

答案 3 :(得分:0)

我使用此脚本以php格式回显结果。

saveButton.addEventListener("click", function (event) {
    if (signaturePad.isEmpty()) {
        alert("Please provide signature first.");
    } else {
      var image = signaturePad.toDataURL(); // data:image/png....
     document.getElementById('mydata').value = image;
     document.getElementById('results').innerHTML = '<img src="'+image+'"/>';
    }
});

HTML

   <div id="results"><b>Preview:</b></div>
   <input id="mydata" type="hidden" name="mydata" value=""/>

使用&#34; mydate&#34;将它存储在文件夹或mysql中。

答案 4 :(得分:0)

我想补充一点,您还必须将以下代码添加到app.js文件的顶部,以使EFC解决方案起作用。另外,必须创建一个具有相同数据操作的新按钮。

var saveButton = wrapper.querySelector("[data-action=save]");



<button type="button" class="button save" data-action="save">Save</button>

由于我不擅长JavaScript,因此我为此感到困惑。经过数小时的处理,我终于弄明白了。我挂在html表单上,隐藏字段没有提交按钮。然后我意识到javascript正在使用“保存”按钮提交表单。希望这对其他人有帮助。