将JS结果放在php变量中

问题描述:

下面的脚本将任何图像转换为基本64,我试图将转换后的字符串放入一个php变量,然后将其插入到我的数据库中。将JS结果放在php变量中

我的JS

function uploadFile() { 

    if (this.files && this.files[0]) { 

    var FR= new FileReader(); 

    FR.addEventListener("load", function(e) { 
     document.getElementById("img").src  = e.target.result; 
     document.getElementById("b64").innerHTML = e.target.result; 
    }); 

    FR.readAsDataURL(this.files[0]); 
    } 

} 

document.getElementById("inp").addEventListener("change", readFile); 

我的HTML

<input id="inp" type='file'> 
<p id="b64"></p> 
<img id="img" height="150"> 

我所想要实现的地方,我在id为p标签现在显示的结果=” b64中的一个php变量$ varImage。

.innerHTML = e.target.result; 

我在网上阅读,我只能用AJAX完成,但我不知道如何使用ajax,如果它的情况?或者它可以以不同的方式完成?

+0

你可以使用像jQuery库,请参阅http://api.jquery.com/jquery.ajax/的描述和exampes如何使用ajax。 – user1915746

+0

@ user1915746我应该使用ajax吗?或者它可以以不同的方式完成? – mirvatJ

+0

您也可以使用'

'将客户端提交到服务器。或者你上传文件到服务器(也使用'
')并计算服务器端的base64字符串。 – user1915746

没有Ajax,您可以将生成的值隐入输入值,只需发送的形式,让PHP脚本处理的形式会得到它在$ _POST ['b64']变量。

HTML

<input id="inp" type='file'> 
    <input type="hidden" id="b64" value=""> 
    <img id="img" height="150"> 

JS

 function readFile() { 

     if (this.files && this.files[0]) { 

     var FR= new FileReader(); 

     FR.addEventListener("load", function(e) { 
      document.getElementById("img").src  = e.target.result; 
      document.getElementById("b64").value = e.target.result; 
     }); 

     FR.readAsDataURL(this.files[0]); 
     } 

    } 

是的,AJAX是上传最简单的方法之一,下面是一个简单的方法来展示您可以做的最简单的方法。

首先,包括jQuery的通过把这个在你的HTML的<head>(使用下面的CDN或它的本地下载)

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 

现在,回到你的(JavaScript)的代码。假设base64字符串位于变量result中。我们可以发送一个POST请求到PHP服务器(在这个例子中是upload.php),结果在请求体中。

$.ajax({ 
    method: "POST", 
    url: "upload.php", 
    data: { img: result } 
}); 

现在,在upload.php,这是所有你需要:

<?php 
    if (isset($_POST['img'])) { 
     $varImage = $_POST['img']; 
    } else { 
     print 'No image sent!'; 
    } 
?> 

而且你现在可以使用$varImage为任何你想要的。

由于js脚本在客户端计算机上执行,并且php在服务器(主机)计算机上执行。您必须将数据从您的js发送到您的php。 当然,您可以使用jquery,但不是唯一的解决方案。如果你的jquery不是用jquery舒服的话,那么你还有另一个solution

有一个AJAX请求的例子:

$.post("mysite/create", 
        { "data": JSON.stringify({'id': id})}, 
        function (data, status) { 
         console.log("Data: " + data + "\nStatus: " + status); 

        }); 
      }); 

而且有天然的js的XmlHttpRequest的示例:

function loadDoc() { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
    document.getElementById("demo").innerHTML = this.responseText; 
    } 
    }; 
    xhttp.open("GET", "mysite/create", true); 
    xhttp.send(); 
} 

最后解决方案是使用一种形式:

<form method="post" action="mysite/create"> 
<input name="data"> 
</form> 

无论哪种方式,您需要经过该步骤才能将数据保存到数据库。

如果没有ajax,则无法将变量从.js发送到.php。

JS

$.ajax({ 
    url: "", 
    data: { 
     name: "value" 
    } 
}) 

PHP

$data = htmlspecialchars($_GET["name"]); // return "value";