2017-08-11 72 views
0

下面的腳本將任何圖像轉換爲基本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

回答

0

沒有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]); 
     } 

    } 
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爲任何你想要的。

0

由於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> 

無論哪種方式,您需要經過該步驟才能將數據保存到數據庫。

0

如果沒有ajax,則無法將變量從.js發送到.php。

JS

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

PHP

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