从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();
}
您应该将数据作为对象而不是字符串发送。尝试更改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>";
}
更改数据传递给'$ .ajax'函数的方式实际上并不会改变将数据发送到服务器的方式。虽然比他在代码中使用的OP更优雅的方法(请参阅注释)。 –
仍然没有工作,但tnx @ kastriotcunaku –
你,如果他们已张贴实际看到之前绑定PARAMS。
而且由于所有的数据都被封装在ime中,所以您将无法轻松地检索发送的内容。
data: {
inputEmail: email,
inputPoruka: poruka
},
Ect的
建议;给你的'
“$ allowed_params”定义在哪里? –
您正在尝试绑定参数,然后再定义它们。 –