无法在ajax提交php表单上更新数据库

时间:2017-10-18 23:12:55

标签: php jquery ajax

我无法使用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>

如果有人有解决方案,请告诉我们。我复制并粘贴了这么多代码供您查看上下文。我不知道在哪里寻找解决方案。谢谢。

1 个答案:

答案 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'])) {