2016-04-22 75 views
2

我在嘗試序列化數據表單時遇到問題。如何發送數據表單?

這是代碼。我有一個包含表單的page1.php。當通過AJAX發送表單時,我會檢索表單數據,然後將其發送到page2.php。

當它試圖序列化文件字段時出現問題。

page1.php中(含有表格)

$(document).ready(function(){ 
    $("#enviar").click(function(e){ 
     e.preventDefault(); 
      $.ajax({ 
       type: "POST", 
       url: "processar_updateUser.php", 
       data: $("form").serialize(), 
       success: function(data){ 
        alert(data); 
       } 
      }); 
     return false; 
    }); 
}); 

使page2.php(處理的形式的數據)

<?php 
    $personal_name = addslashes(htmlentities($_POST['personalname'])); 
    $name   = addslashes(htmlentities($_POST['name'])); 
    $surname  = addslashes(htmlentities($_POST['surname'])); 
    $concatnom  = $name.".".$surname; 
    $password  = addslashes(htmlentities($_POST['password'])); 
    $adegree  = addslashes(htmlentities($_POST['adegree'])); 
    $initials  = addslashes(htmlentities($_POST['initials'])); 
    $n    = substr($name,0,1); 
    $c    = substr($surname,0,1); 
    $initials  = $n.$c; 
    $email   = addslashes(htmlentities($_POST['email']));// que sigui [email protected]"+cadena+.+cadena 
    $telephone  = addslashes(htmlentities($_POST['telephone'])); //numero y nomes 9 
    $signature  = addslashes(htmlentities($_FILES['signature']['name']));//i have used $_POST, but dind't work 
?> 
+0

請使用PHP的[內置函數](http://jayblanchard.net/proper_password_hashing_with_PHP.html)來處理密碼安全性。如果您使用的PHP版本低於5.5,則可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。確保你[不要逃避密碼](http://stackoverflow.com/q/36628418/1011527)或在哈希之前使用其他任何清理機制。這樣做*更改密碼並導致不必要的附加編碼。 –

+0

你的表單標記在哪裏? –

+0

您在序列化時遇到什麼問題? –

回答

0
嘗試

此(根據你的HTML替換jQuery選擇):

var formData = new FormData(); 
formData.append('personalname', $("#personalname").val()); 
formData.append('name', $("#name").val()); 
formData.append('surname', $("#surname").val()); 
formData.append('password', $("#password").val()); 
formData.append('adegree', $("#adegree").val()); 
formData.append('initials', $("#initials").val()); 
formData.append('email', $("#email").val()); 
formData.append('telephone', $("#telephone").val()); 
formData.append('signature', $('#signature')[0].files[0]); 

$(document).ready(function(){ 
    $("#enviar").click(function(e){ 
     e.preventDefault(); 
      $.ajax({ 
       type: "POST", 
       url: "processar_updateUser.php", 
       data: formData, 
       success: function(data){ 
        alert(data); 
       } 
      }); 
     return false; 
    }); 
}); 

這可能很乏味,但它是我如何設法發送圖像到後端

方法$('#signature')將返回一個JQuery輸入對象。

這個:$('#signature')[0]返回HTML輸入標籤。

這個:$('#signature')[0].files返回一個JQuery對象,它包含您選擇的所有文件。

最後,這個:$('#signature')[0].files[0]將返回jQuery對象中的第一個文件...

我假設你接受只有一個文件...如果沒有,你必須附加到每一個文件formData存儲在$('#signature')[0].files


希望得到這個幫助。

Regards

+0

感謝您的回覆。使用這部分代碼:'$('#signature')[0] .files [0]',我將檢索第一個文件的名稱,如$ _FILES ['signature'] ['name']'所以我怎麼也可以檢索tmp_name,如'$ _FILES ['signature'] ['tmp_name']'或size ..等等 – riztak

+0

這段代碼:'$('#signature')[0] .files [0 ]'讓你像使用標準POST(不是AJAX)一樣發送文件... 它工作嗎? –

0

我前段時間有同樣的問題。我使用這個插件 jQuery Form Plugin作爲混合形式 - 數據加檔案,或在其他情況下,這一個blueimp,但這隻用於文件上傳。

我使用它們很多,它們像魅力一樣工作,很容易整合。

希望這會有所幫助。