2012-12-13 62 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