Javascript 代码看起来不错,但表单提交未过帐<;帆布>;到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文档上有一个签名板。一切正常,直到我点击提交。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元素都可以正常工作,但是一旦表单提交,所有内容都将挂起,直到浏览器中出现连接重置错误。在过去的一天左右,我一直在努力追踪到底发生了什么,但到目前为止,我运气不佳

            <?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>&nbsp;</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);