从Ajax表单获取数据,然后使用PHP(PDO连接)插入数据库

问题描述:

我想从表单中获取数据,用AJAX写'谢谢你的问题'并发送数据到php脚本,然后用PHP插入数据到数据库并发送一封电子邮件。我的问题是它总是在数据库中插入空行。你有什么建议吗? enter image description here 备考 - kontakt.php从Ajax表单获取数据,然后使用PHP(PDO连接)插入数据库

<form> 
       <input type="text" name="ime" id="ime" placeholder="Ime" /> 
       <input type="text" name="prezime" id="prezime" placeholder="Prezime" /> 
       <input type="email" name="email" id="email" placeholder="Email" /> 
       <textarea type="text" style="width:100%; height:180px" name="poruka" id="poruka" placeholder="Poruka"></textarea> 

       <button class="graybtn" onclick="return formamsg1()">Pošalji</button><br><br> 
       <div id="placefortable"> 
       </div><br><br> 

     </form> 

阿贾克斯 - formamsg1

function formamsg1(){ 
      var ime = document.getElementById("ime").value; 
      var prezime = document.getElementById("prezime").value; 
      var email = document.getElementById("email").value; 
      var poruka = document.getElementById("poruka").value; 
      var dataString = "ime="+encodeURIComponent(ime)+"&prezime="+encodeURIComponent(prezime)+"&email="+encodeURIComponent(email)+"&poruka="+encodeURIComponent(poruka); 
     $.ajax({ 
       type:"post", 
       url: "obavestenje.php", 
       cashe: false, 
       data: dataString, 
       success: function(data){ 
        //window.alert(data); 
        document.getElementById("placefortable").innerHTML = data; 
       }, 
       error: function (req, status, err) { 
      console.log('Something went wrong', status, err); 
      } 
      }) 
      return false; 

}

PHP - obavestenje.php

require_once 'include/db.php'; 
$allowed_params = allowed_post_params(['ime', 'prezime', 'email', 'poruka', 'submit']); 
// niz sadrzi dozvoljene maksimalne duzine za sva polja 
$fields_lengths = ['ime' => 64, 'prezime' => 256, 'email'=>256, 'poruka' => 256]; 


// provera da li su polja odgovoarajuce duzine 
foreach ($fields_lengths as $field => $length) { 
if (!has_length($_POST[$field], ['min' => 0, 'max' => $length])) { 
    header('Location: greska.html'); 
    die(); 
} 
} 

try { 

// Priprema upita za unos podataka u bazu 
$prep = $db->prepare("INSERT INTO kontakt_forma (ime, prezime, email, poruka) VALUES(:ime, :prezime, :email, :poruka)"); 
$prep->bindParam(':ime', $ime); 
$prep->bindParam(':prezime', $prezime); 
$prep->bindParam(':email', $email); 
$prep->bindParam(':poruka', $poruka); 

$ime = isset($allowed_params['ime']) ? $allowed_params['ime'] : ""; 
$prezime = isset($allowed_params['prezime']) ? $allowed_params['prezime'] : ""; 
$email = isset($allowed_params['email']) ? $allowed_params['email'] : ""; 
$poruka = isset($allowed_params['poruka']) ? $allowed_params['poruka'] : "";  

// izvrsavanja upita 
$rez = $prep->execute(); 
} catch (PDOException $e) { 
echo 'greska kod upita'; 

} 
// Ukoliko je upis u bazu uspesan, salje se mejl korisnuku i klijentu o uspesnoj prijavi 
if ($rez) { 

$emailod = "$email"; 
$email_to = '[email protected]'; // treba da bude '[email protected]'; 
$subject = "samo organsko"; 
$headers = "From: $emailod\r\n"; 
$headers .= "Content-type: text/html; charset=utf-8\r\n"; 
$email_message = "Kontakt forma " . "<br>"; 

$email_message .= "Ime: $ime " . "<br>"; 
$email_message .= "Prezime: $prezime " . "<br>"; 
$email_message .= "Poruka: $poruka " . "<br>"; 

if (mail($email_to, $subject, $email_message, $headers)) { 
$htmltable = "Hvala na postavljenom pitanju. Ocekujte odgovor u roku od 24h."; 
echo $htmltable; 
} else { 
echo 'greska kod slanja mail f'; 
die(); 
} 
} else { 
echo 'greska kod emaila-dva'; 
die(); 

}

+3

建议;给你的'

'一个id,只是'data:$('#theFormId')。serialize()',而不是获取所有的值并构建你自己的字符串。 –
+2

“$ allowed_pa​​rams”定义在哪里? –

+0

您正在尝试绑定参数,然后再定义它们。 –

您应该将数据作为对象而不是字符串发送。尝试更改JavaScript和PHP:

JavaScript文件

function formamsg1(){ 
      var ime = document.getElementById("ime").value; 
      var prezime = document.getElementById("prezime").value; 
      var email = document.getElementById("email").value; 
      var poruka = document.getElementById("poruka").value; 
      var data = { 
       "ime" : ime, 
       "prezime" : prezime, 
       "email" : email, 
       "poruka" : poruka 
      } 

     $.ajax({ 
       type:"post", 
       url: "obavestenje.php", 
       cashe: false, 
       data: data, 
       success: function(data){ 
        //window.alert(data); 
        document.getElementById("placefortable").innerHTML = data; 
       }, 
       error: function (req, status, err) { 
      console.log('Something went wrong', status, err); 
      } 
      }) 
      return false; 

PHP文件

require_once 'include/db.php'; 


try { 

$ime = isset($_POST['ime']) ? $_POST['ime'] : ""; 
$prezime = isset($_POST['prezime']) ? $_POST['prezime'] : ""; 
$email = isset($_POST['email']) ? $_POST['email'] : ""; 
$poruka = isset($_POST['poruka']) ? $_POST['poruka'] : ""; 

// Priprema upita za unos podataka u bazu 
$prep = $db->prepare("INSERT INTO kontakt_forma (ime, prezime, email, poruka) VALUES(:ime, :prezime, :email, :poruka)"); 
$prep->bindParam(':ime', $ime); 
$prep->bindParam(':prezime', $prezime); 
$prep->bindParam(':email', $email); 
$prep->bindParam(':poruka', $poruka); 


// izvrsavanja upita 
$rez = $prep->execute(); 
} catch (PDOException $e) { 
echo 'greska kod upita'; 

} 
// Ukoliko je upis u bazu uspesan, salje se mejl korisnuku i klijentu o uspesnoj prijavi 
if ($rez) { 

$emailod = "$email"; 
$email_to = '[email protected]'; // treba da bude '[email protected]'; 
$subject = "samo organsko"; 
$headers = "From: $emailod\r\n"; 
$headers .= "Content-type: text/html; charset=utf-8\r\n"; 
$email_message = "Kontakt forma " . "<br>"; 

$email_message .= "Ime: $ime " . "<br>"; 
$email_message .= "Prezime: $prezime " . "<br>"; 
$email_message .= "Poruka: $poruka " . "<br>"; 
} 
+0

更改数据传递给'$ .ajax'函数的方式实际上并不会改变将数据发送到服务器的方式。虽然比他在代码中使用的OP更优雅的方法(请参阅注释)。 –

+0

仍然没有工作,但tnx @ kastriotcunaku –

你,如果他们已张贴实际看到之前绑定PARAMS。

而且由于所有的数据都被封装在ime中,所以您将无法轻松地检索发送的内容。

data: { 
inputEmail: email, 
inputPoruka: poruka 
}, 

Ect的