2014-03-07 145 views
0

如何检查数据库中是否已存在数据($ chassis,$ pin),如果存在,我希望它将错误返回为“用户存在”。 我使用json显示错误,现在使用下面的代码插入数据,即使机箱和引脚已经存在于数据库中。如何检查数据库中是否存在数据?

<?php 
session_start(); 

require("config/config.php"); 
date_default_timezone_set('Asia/Calcutta'); 
if (isset($_POST['user_submit'])) 
    $chassis = mysql_real_escape_string($_POST['chassis']); 
$pin   = mysql_real_escape_string($_POST['pin']); 
$title   = mysql_real_escape_string($_POST['title']); 
$fname   = mysql_real_escape_string($_POST['fname']); 
$lname   = mysql_real_escape_string($_POST['lname']); 
$email   = mysql_real_escape_string($_POST['email']); 
$mobile  = mysql_real_escape_string($_POST['mobile']); 
$dob   = mysql_real_escape_string($_POST['dob']); 
$anniversary = mysql_real_escape_string($_POST['anniversary']); 
$company  = mysql_real_escape_string($_POST['company']); 
$designation = mysql_real_escape_string($_POST['designation']); 
$home_business = mysql_real_escape_string($_POST['home_business']); 
$add1   = mysql_real_escape_string($_POST['add1']); 
$add2   = mysql_real_escape_string($_POST['add2']); 
$city   = mysql_real_escape_string($_POST['city']); 
$state   = mysql_real_escape_string($_POST['state']); 
$pincode  = mysql_real_escape_string($_POST['pincode']); 
$date   = date('y.m.d h:i:s A'); 

$hostname = ''; 
$database = ''; 
$username = ''; 
$password = ''; 

$conn = mysql_connect($hostname, $username, $password); 
if (!$conn) { 
    $json['error'] = "Unable to Connect server!" . mysql_error(); 
} 
if (empty($json)) { 
    mysql_select_db($database) or die("Unable to select database!" . mysql_error()); 
    $sql = mysql_query('SELECT chassis,pin FROM checking_chassis WHERE chassis="' . $chassis . '" && pin="' . $pin . '" '); 

    if (mysql_num_rows($sql) == 1) { 

     $sql1 = mysql_query('SELECT chassis,pin FROM taj_contact_info WHERE chassis="' . $chassis . '" && pin="' . $pin . '" '); 
     if (mysql_num_rows($sql1) == 1) { 
      $json['error'] = "User already exists"; 
      exit(); 
     } else { 
      $query = 'INSERT INTO taj_contact_info (chassis,pin,title,fname,lname,email,mobile,dob,anniversary,company,designation,home_business,add1,add2,city,state,pincode,date_added) VALUES("' . $chassis . '","' . $pin . '","' . $title . '","' . $fname . '","' . $lname . '","' . $email . '","' . $mobile . '","' . $dob . '","' . $anniversary . '","' . $company . '","' . $designation . '","' . $home_business . '","' . $add1 . '","' . $add2 . '","' . $city . '","' . $state . '","' . $pincode . '","' . $date . '")'; 

      $sql1 = mysql_query($query); 

      $message = "Thank you for registering. You can indulge in the fine dining experience with the Taj gift certificate, which will reach you within 30 days. Team Purple Club"; 

      $sms = "http://bulkpush.mytoday.com/BulkSms/SingleMsgApi?feedid=340479&UserName=&password=&sendername=PURPLE&To=" . $mobile . "&message=" . urlencode($message) . ""; 

      $work = file_get_contents($sms); 

      $json['success'] = "Successfully inserted"; 
     } 
    } else { 
     $json['error1'] = "Please enter valid chassis number and pin"; 

    } 

} 

echo json_encode($json); 
?> 

的Javascript

<script type="text/javascript"> 
    $(document).ready(function(){ 

     $("#user_submit_form").submit(function(){ 
      var user_data = $("#user_submit_form").serialize(); 

           var mobile = new Array();                
               mobile = $('#mobile').val().split(""); 

               var pincode = new Array();               
               pincode = $('#pincode').val().split(""); 

               if($('#chassis').val() =='') 
               {            
                       alert('Please enter chassis'); 
               }    
               else if ($('#pin').val() =='') 
               {            
                       alert('Please enter pin'); 
               } 


               else  { 

                       $.ajax({ 
                       type               : "post", 
                       url                : "validate_user.php", 
                       data               : user_data, 
                       dataType              : "json", 
                       success: function(json){ 

                           if(json.error) 
                           { 
                               alert(json.error) 
                           } 
                           else if(json.error1) 

                           { 
                               alert(json.error1) 

                           } 
                           else 
                           { 
                               alert(json.success) 
                               /*location.reload(); 

                               window.location="http://clps.cequitysolutions.com/taj/thankyou.php";*/ 

                           } 
                       } 


                       }); 


                       } 
     });     

       }); 
     function validateEmail(email) 
       { 
           var re = /^(([^<>()[\]\\.,;:\[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 re.test(email); 
       } 
</script> 
+0

可能是个好在插入之前检查用户是否存在任何用户名或电子邮件,如果返回的行数大于1,则可以抛出错误,否则执行插入查询并向用户显示成功消息。 – rsakhale

+0

JavaScript在哪里? –

+0

希望PHP的缩进/结构现在好一些,不是很可读:) – davidkonrad

回答

2

我会说你应该chassispin创建唯一索引。避免重复也正是为什么唯一索引存在:

alter table taj_contact_info add unique index(chassis, pin) 

现在你可以安全地运行您的插入查询:

$query = 'INSERT INTO taj_contact_info (chassis,pin,title,fname,lname,email,mobile,dob,anniversary,compa ... 

和检查后,如果记录已经插入:

if (mysql_affected_rows()>0) { 
    //success 
} else { 
    $json['error'] = "User already exists" 
} 

如果mysql_affected_rows返回-1,则插入脚本失败。如果(我猜)机箱无效,就会发生这种情况,就像空字符串一样。

+0

谢谢。它像一个魅力:) – Phantom

+0

@Phantom,很高兴听到你有它的工作! :) – davidkonrad

1

为taj_contact_info表上的两列创建唯一索引。

ALTER TABLE taj_contact_info ADD UNIQUE INDEX uniqueindex (chassis,pin) 

,当您尝试插入正常后,在PHP中,你会得到一个重复键错误,你可以在PHP处理...如果你做一个SELECT查询

$sql = "insert into taj_contact_info set chassis='1234', pin='12345',etc..."; 
$result = mysql_query($sql); 
if (!$result) { 
    if (mysql_errno() == 1586) { 
     echo "ID is already in the database, user exists"; 
    } else { 
     die('Invalid query: ' . mysql_error()); 
    } 
} else { 
    echo "All cool, user inserted."; 
} 
+0

+1为唯一索引解决方案,但它是基于个人mysql错误代码的基本代码非常活泼。 100件事情可能会出错,然后你必须检查100个不同的错误代码。如果errno不是1586,该怎么办?然后,系统将“死亡”,而不会向用户提供有意义的信息。这就是为什么我认为,检查'mysql_affected_rows'更好。 – davidkonrad

+0

如果使用mysql_affected_rows(),即使您的sql查询错误或者mysql服务器关闭,您也会得到该用户“存在”。我的答案的重点是为您的问题提供解决方案,而不是描述错误处理方式。使用err 1586你只处理重复的代码为错误,你不必将die()或对待所有的错误代码....这只是一个例子,所以你可以调试。 – Jinxmcg

相关问题