2012-12-13 240 views
-2

我有一個窗體的模態窗口,它應該提交字段數據到數據庫,而不是關閉模式窗口,然後在淡出之前顯示「你已經RSVP'd」模態窗口。數據沒有插入到數據庫

2件事:

1)提交時,模式窗口關閉?!它應該保持開放 2)中的數據不會插入數據庫..

模態窗口HTML

<form id="rsvp-yes" action="#" method="post" name="rsvp-yes"> 
<label for="email">Your E-mail</label> 
    <input id="email" class="txt" type="email" name="email" /> 
    <label for="location">Choose your location</label> 
    <select name="city" id="city"> 
    <option value="None Selected" selected>Select</option> 
    <option value="Perth">Perth</option> 
    <option value="Brisbane">Brisbane</option> 
    <option value="Sydney">Sydney</option> 
    <option value="Melbourne">Melbourne</option> 
    </select> 

    <button id="rsvp">RSVP</button></form></div> 

JAVASCRIPT

$(document).ready(function() { 
     $(".modalbox").fancybox(); 
     $("#rsvp").submit(function() { return false; }); 

     function validateEmail(email) { 
     var reg = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 
     return reg.test(email); 
    } 

     $("#rsvp").on("click", function(){ 
      var emailval = $("#email").val(); 
      var city  = $("#city").val(); 
      var mailvalid = validateEmail(emailval); 

      if(mailvalid == false) { 
       $("#email").addClass("error"); 
      } 
      else if(mailvalid == true){ 
       $("#email").removeClass("error"); 
      } 

      if(mailvalid == true) { 
       //&& msglen >= 4 
       // if both validate we attempt to send the e-mail 
       // first we hide the submit btn so the user doesnt click twice 
       $("#rsvp").replaceWith("<em>RSVP'ing you...</em>"); 

       $.ajax({ 
        type: 'POST', 
        url: 'rsvp-yes.php', 
        data: $("#rsvp-yes").serialize(), 
        success: function(data) { 
         if(data == "true") { 
          $("#rsvp-yes").fadeOut("fast", function(){ 
           $(this).before("<p><strong>You have been RSVP'd</strong></p>"); 
           setTimeout("$.fancybox.close()", 1000); 
          }); 
         } 
        } 
       }); 

PHP

<?php 
$email = $_POST['email']; 
$city = $_POST['city']; 

mysql_connect(myhost,myuser,mypass) or die("Could not connect: " . 
mysql_error()); 
mysql_query("USE mydbname"); 

mysql_query("INSERT INTO rsvp-yes (ID, email, city) 
VALUES ('NULL', '".$email"', '".$city"')"); 

?> 
+1

首先檢查連接是否成立? –

+0

這需要先進行基本的調試。提交按鈕是否被替換? ajax請求被解僱了嗎? ajax請求返回什麼? – hakre

+0

我該如何調試這些?並檢查連接是否建立? – Dave

回答

-1

您應該使用mysql_real_escape_string()函數來防止SQL注入。它還可以防止因引用或雙引號引起的數據插入錯誤。

$email = $_POST['email']; 
$email=mysql_real_escape_string($email); 

$city = $_POST['city']; 
$city=mysql_real_escape_string($city); 

希望你ID列是主鍵也是一個自動遞增場。所以你不應該在你的sql語句中包含ID

​​
+0

好吧,你可以同樣說,你應該使用預先準備好的語句(參數化查詢),但是這一切都不是問題的答案。請不要傳播不推薦使用的函數,如'mysql_real_escape_string'。 – hakre

+1

這不是mysql_real_escape_string()問題 –

+0

哎呀。應該逃脫他們。 – Dave

0

我覺得你ID在數據庫autoincreament。因此,而不是

mysql_query("INSERT INTO rsvp-yes (ID, email, city) VALUES ('NULL', '".$email"', '".$city"')"); 

使用

mysql_query("INSERT INTO rsvp-yes (ID, email, city) VALUES ('', '".$email"', '".$city"')"); 

刪除NULL