我无法使用ajax更新表单提交时的数据库表。我不知道发生这种情况的原因或原因。我在下面发布了我的代码。感谢。
sbt 'set asciiGraphWidth := 10000' 'inspect tree clean'
HTML
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$ime = !empty($_POST['ime']) ? stripslashes(trim($_POST['ime'])) : '';
$email = !empty($_POST['email']) ? stripslashes(trim($_POST['email'])) : '';
$poruka = !empty($_POST['poruka']) ? stripslashes(trim($_POST['poruka'])) : '';
$ime = htmlspecialchars($_POST['ime']);
$email = htmlspecialchars($_POST['email']);
$poruka = htmlspecialchars($_POST['poruka']);
//Validate Phone
if (empty($_POST["ime"])) {
http_response_code(400);
echo "Molimo, unesite Vaše ime i prezime.";
exit;
}else {
if (!preg_match('/^[a-zA-Z\s]+$/',$ime)) {
http_response_code(400);
echo "Dozvoljena su samo slova i space.";
exit;
}
}
//Validate Email
if (empty($_POST["email"])) {
http_response_code(400);
echo "Molimo, unesite Vaš e-mejl.";
exit;
} else {
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
http_response_code(400);
echo "Nepravilan e-mejl format";
exit;
}
}
if (empty($_POST["poruka"])) {
http_response_code(400);
echo "Molimo, unesite Vašu poruku.";
exit;
}
if(isset($_POST['submit']) && !empty($_POST['ime']) && !empty($_POST['email']) && !empty($_POST['poruka'])){
$link = new mysqli("localhost", "admin", "", "proba");
$stmt = $link->prepare("INSERT INTO message(ime, email, poruka) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $ime, $email, $poruka);
$stmt->execute();
$stmt->close();
$link->close();
$email_message .= "Ime i prezime: ".htmlspecialchars($ime)."\n";
$email_message .= "E-mejl: ".htmlspecialchars($email)."\n";
$email_message .= "Poruka: ".htmlspecialchars($poruka)."\n";
$to = "somemail@mail.com";
$headers = 'From: '.$email."\r\n".
'Reply-To: '.$email."\r\n" .
'X-Mailer: PHP/' . phpversion();
if (mail($to, $subject, $email_message, $headers)) {
http_response_code(200);
echo "Poruka je uspešno poslata!";
exit;
} else {
http_response_code(400);
echo "Message is not successfully sent";
exit;
}} else {
// Not a POST request, set a 403 (forbidden) response code.
http_response_code(403);
echo "There was a problem with your submission, please try again.";
exit;
}
}
?>
和JQuery
<div class="container">
<h1>Kontakt</h1>
<div id="form-messages"></div>
<form action="mail.php" method="POST" id="form">
<input id="ime" type="text" name="ime" value="<?php echo !empty($ime) ? $ime : ''; ?>" placeholder="Ime i Prezime">
<input id="email" type="text" name="email" value="<?php echo !empty($email) ? $email : ''; ?>" maxlength="20" placeholder="E-mejl">
<textarea name="poruka" id="poruka" placeholder="Poruka" maxlength="700" cols="30" rows="10"><?php echo !empty($poruka)?$poruka:''; ?></textarea>
<input id="submit" type="submit" name="submit" value="Pošalji Poštu">
</form>
</div>
如果有人有解决方案,请告诉我们。我复制并粘贴了这么多代码供您查看上下文。我不知道在哪里寻找解决方案。谢谢。
答案 0 :(得分:0)
这不能通过ajax工作(但通过传统的回发)是因为jQuery的.serialize()
方法不序列化按钮值。
因此,尽管按钮上有name="submit"
,但在进行ajax调用时,其值不会发送到请求中的服务器。在传统的回发中,如果按钮被用作提交表单的手段,那就是。
文档说:
注意:只有“成功控件”被序列化为字符串。没有 由于表单未提交,因此提交按钮值已序列化 使用按钮。
虽然您的按钮点击可能已触发提交表单的代码,但它不再直接执行表单提交(而是ajax正在执行此操作)。从理论上讲,这可以由任何东西触发,而jQuery无法知道它是启动该过程的按钮。
有关详细信息,请参阅https://api.jquery.com/serialize/。
这会导致您遇到问题,因为您在进行数据库调用并发送电子邮件之前会测试是否存在此“提交”值。由于您正在验证所有其他输入字段,因此没有必要这样做。我想您可以从isset($_POST['submit'])
声明中删除if
,但您没有任何问题。因此,您将留下:
if(!empty($_POST['ime']) && !empty($_POST['email']) && !empty($_POST['poruka'])) {