Javascript 代码看起来不错,但表单提交未过帐<;帆布>;到php
我在php文档上有一个签名板。一切正常,直到我点击提交。A.png正在写入服务器,但该文件不可读,0kb表示没有数据。我的猜测是,图片没有从画布上正确发送,或者是通过邮件发送给我的php,以便在必要时捕获和处理。任何帮助都将不胜感激。在javascript方面,我并不是最强的。signature_pad.js将把signature pad启动到画布上,画布工作正常,app.js包含表单上的clear按钮和submit按钮的功能。我包含了app.js的代码。我编辑app.js以将数据发送到一个隐藏字段,这样我就可以在php中提取png/canvas数据,并将其保存到服务器并进行相应处理。在我的php中,在使用$u POST提取隐藏字段之后,我使用了var_dump(),它只显示字符串(0),表示为空。我已经在js中设置了一个警报,单击submit查看数据字符串是否也在那里,它是否在那里。我对数据丢失的地方感到困惑 更新 因此,我进一步挖掘这是一个问题的形式使用邮政。js和php元素都可以正常工作,但是一旦表单提交,所有内容都将挂起,直到浏览器中出现连接重置错误。在过去的一天左右,我一直在努力追踪到底发生了什么,但到目前为止,我运气不佳Javascript 代码看起来不错,但表单提交未过帐<;帆布>;到php,javascript,php,todataurl,signaturepad,Javascript,Php,Todataurl,Signaturepad,我在php文档上有一个签名板。一切正常,直到我点击提交。A.png正在写入服务器,但该文件不可读,0kb表示没有数据。我的猜测是,图片没有从画布上正确发送,或者是通过邮件发送给我的php,以便在必要时捕获和处理。任何帮助都将不胜感激。在javascript方面,我并不是最强的。signature_pad.js将把signature pad启动到画布上,画布工作正常,app.js包含表单上的clear按钮和submit按钮的功能。我包含了app.js的代码。我编辑app.js以将数据发送到一个隐藏
<?php
if (isset($_POST['GetImage'])) {
define('UPLOAD_DIR', 'PDF_Docs/HomeownerAgreements/SigImages/');
$img = $_POST['SaveSig'];
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = UPLOAD_DIR . uniqid() . '.png';
file_put_contents($file, $data);
exit;
?>
<html><body>
<form id="form1" class="default-form" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post">
<input type="hidden" name="SaveSig" value="" id="SaveSig">
<input type="hidden" name="GetImage" value="Yes" id="GetImage">
<!-- SIGNATURE PAD : begin -->
<div id="signature-pad" class="m-signature-pad">
<div class="m-signature-pad--body">
<div class="description">Sign Below</div>
<canvas id="signature" width="750" height="150" style="border:1px solid #000000;"></canvas>
</div>
<div class="m-signature-pad--footer">
<div class="form-field">
<button type="button" class="button clear c-button" data-action="clear">Clear Signature</button></div>
</div>
<!-- SIGNATURE PAD : end -->
<!-- SUBMIT BUTTON : begin -->
<div class="form-field">
<button class="submit-btn c-button" type="submit" data-label="Send Message" data-loading-label="Sending..." data-action="send-form">Submit</button>
</div>
<!-- SUBMIT BUTTON : end -->
</div>
</div>
<p> </p>
</form>
<!-- CONTACT FORM : end -->
<!-- SIGNATURE PAD JS : begin -->
<script src="SigPad/js/signature_pad.js"></script>
<script src="SigPad/js/app.js"></script>
<!-- SIGNATURE PAD JS : end -->
</body></html>
请在项目的php.ini文件中尝试
file\u uploads=On
。以下是解决我的问题的方法。我得出结论,我需要删除数据:image/png;base64,
在发送前从dataURL()
字符串发送,因为所有其他文本字符串都可以发送。使用split()
删除图像编码,一切正常。我还将字符串保存到名为“Image”的表单中的隐藏字段中,然后使用ajax提交表单的全部内容。工作完美无瑕
//CONVERT IMAGE TO DATA URL AND
//REMOVE data:image/png;base64, FROM STRING
var GetImage = canvas.toDataURL();
console.log(GetImage);
var pngImg = GetImage.split(',')[1]; //THIS WAS WHAT FIXED IT
//PUT DATA URL STRING IN 'IMAGE' HIDDEN FIELD
document.getElementById('Image').value = pngImg;
//Now send the HIDDEN "Image" FIELD USING AJAX
下面是检索图像字符串并将其保存到服务器目录进行处理的PHP代码
$FileDate = date("m-d-Y", time());
$FileName = "Your File Name";
$img = $_POST['Image'];
//UPLOAD DIRECTORY FOR IMAGE
$upload_dir = "Your Directory On Server Here";
$DecodedImg = base64_decode($img);
//NAME THE IMAGE
$ImgFile = $FileName . '_' . $FileDate . ".png";
//SAVE THE FILE TO THE SERVER
$success = file_put_contents($upload_dir.$ImgFile, $DecodedImg);
我希望这能帮助一些人,因为我真的很痛苦,因为这从来没有向我解释过,也导致了我花了很多时间去弄清楚。快乐编码。文件上传已设置为打开。这是checkedOk的第一件事,然后尝试在表单标记中添加file=true您的代码看起来很好。我不熟悉标记的“file”属性,除非您可能引用了其他内容?不,Pratik尚未解决。js是正确的,当我在提交时测试一个警报时,它正在生成一个数据字符串。该字符串用于测试变量,以查看php是否将该字符串写入文件,以及该字符串是否也起作用。现在发生的是,当我提交发送数据字符串的表单时,浏览器会收到连接重置错误。数据字符串甚至没有到达php代码。搞清楚到底发生了什么是一场噩梦Hello@Micha我知道现在问这个问题已经很晚了,你可能已经完成了这个项目。但我只是想知道这个问题。它可能会帮助我在将来解决一些问题:尝试将此添加到标记中。enctype=“多部分/表单数据”。更多信息请参见此处
$FileDate = date("m-d-Y", time());
$FileName = "Your File Name";
$img = $_POST['Image'];
//UPLOAD DIRECTORY FOR IMAGE
$upload_dir = "Your Directory On Server Here";
$DecodedImg = base64_decode($img);
//NAME THE IMAGE
$ImgFile = $FileName . '_' . $FileDate . ".png";
//SAVE THE FILE TO THE SERVER
$success = file_put_contents($upload_dir.$ImgFile, $DecodedImg);