2012-03-18 19 views
8

के साथ डेटाबेस में मौजूद है तो मूल रूप से, मैं अपने पंजीकरण फॉर्म में एक सुविधा जोड़ना चाहता हूं, जिसे मैं जांचूंगा कि वह उपयोगकर्ता नाम डेटाबेस में पहले से मौजूद है या नहीं।जांचें कि उपयोगकर्ता नाम AJAX

मैं AJAX के बारे में कुछ प्रश्न हैं -

1) मैं समारोह on_change एक AJAX अनुरोध बनाना चाहते हैं, इसलिए कुछ इस तरह -

$('#username').change(function() { 
    $.ajax({ 
    url: "validation.php" 
    }); 
}); 

तो, जहाँ तक मैं समझ गया, मैं चाहिए validation.php फ़ाइल के अंदर PHP में किए गए सभी सत्यापन हैं, सही? क्या कोई विशेष सत्यापन आवश्यक है या यह एक एसक्यूएल कथन के साथ बस सरल सत्यापन हो सकता है - SELECT * FROM 'users' WHERE 'username' = '. $_POST['username'];

2) तो जैसा कि मैंने समझा कि मुझे POST मूल्यों को $ .ajax के माध्यम से भी पास करना होगा, सही? यदि हां, तो मैं validation.php फ़ाइल के माध्यम से उन्हें कैसे एक्सेस कर पाऊंगा?

3) परिणामों को validation.php फ़ाइल में प्राप्त करने के बाद, मैं उन्हें वापस कैसे पास कर सकता हूं (सत्य या गलत - मौजूद है या मौजूद नहीं है)? मुझे उन्हें वापस पास करने की आवश्यकता होगी, और फिर जांच करें, अगर यह सच है - एक त्रुटि दिखाएं कि उपयोगकर्ता नाम पहले से मौजूद है, अन्यथा, कुछ भी नहीं दिखाएं?

आशा है कि आप समझ गए हैं कि मैं क्या बनाने जा रहा हूं। मुझे पता है कि इंटरनेट पर बहुत सारे ट्यूटोरियल हैं, लेकिन मैं ट्यूटोरियल्स के माध्यम से कुछ बनाना पसंद नहीं करता, क्योंकि अगर मैं इसे अपने आप बना देता हूं, तो अगली बार समझना आसान होगा;)!

संपादित करें: इसके अलावा, मैं कोडइग्निटर फ्रेमवर्क के साथ अपनी वेबसाइट बना रहा हूं, तो मैं कोड इग्निटर मॉड्यूल में AJAX में यूआरएल विशेषता कैसे पास करूं?

+0

क्या आपने $ .ajax विधि –

+0

का पूरा उपयोग पढ़ा है हां, मैंने इसे पढ़ लिया है, लेकिन मैंने कुछ हिस्सों को समझ नहीं लिया है, जो ऊपर वर्णित हैं। –

+0

आप $ .ajax की डेटा प्रॉपर्टी का उपयोग करके जानकारी पास कर सकते हैं और उस जानकारी को मानक पोस्ट के रूप में resd या php पेज प्रिंट में पढ़ सकते हैं सच झूठी। यह जानकारी $ .ajax –

उत्तर

10

को रोकने के लिए। मेरा सुझाव है कि आप PHP डेटा ऑब्जेक्ट्स का उपयोग करें - http://php.net/manual/en/book.pdo.php

तो जैसा कि मैंने समझा कि मुझे POST मूल्यों को $ .ajax के माध्यम से भी पास करना होगा, सही? यदि हां, तो मैं validation.php फ़ाइल के माध्यम से उन्हें कैसे एक्सेस कर पाऊंगा?

क्योंकि यह एक आसान अनुरोध है, मेरा सुझाव है कि आप JQuery की विधि $.post() का उपयोग करें। आप जो भी करने का प्रयास कर रहे हैं उसके आधार पर एक नमूना आधारित है।

$.post('validation.php',{username: $('#username').val()}, function(data){ 
    if(data.exists){ 
     //tell user that the username already exists 
    }else{ 
     //username doesn't exist, do what you need to do 
    } 
}, 'JSON'); 

jQuery की पोस्ट विधि 4 पैरामीटर $.post(url, data, callback, datatype) लेती है। उपर्युक्त उदाहरण में, हम उपयोगकर्ता नाम $('#username').val() से validation.php पर पोस्ट करेंगे और JSON प्रतिक्रिया की अपेक्षा करेंगे। जब अनुरोध समाप्त हो जाता है, तो अनुरोध से प्रतिक्रिया होने पर कॉलबैक फ़ंक्शन data के साथ निष्पादित किया जाएगा। क्योंकि हमने निर्दिष्ट किया है कि वह प्रतिक्रिया JSON होगी, हम जावास्क्रिप्ट में मूल वस्तु की तरह इसे एक्सेस कर सकते हैं। अब चलिए वैधता.पीपी

जैसा मैंने ऊपर बताया है, मैंने सुझाव दिया है कि आप अपने डेटाबेस ड्राइवर के लिए पीडीओ का उपयोग करें। तो इस उदाहरण में, मैं आपको इसका मूल उपयोग दिखाऊंगा।

//set the headers to be a json string 
header('content-type: text/json'); 

//no need to continue if there is no value in the POST username 
if(!isset($_POST['username'])) 
    exit; 

//initialize our PDO class. You will need to replace your database credentials respectively 
$db = new PDO('mysql:host=DATABASE_HOST;dbname=DATABASE_NAME','DATABASE_USERNAME','DATABASE_PASSWORD',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

//prepare our query. 
$query = $db->prepare('SELECT * FROM users WHERE username = :name'); 
//let PDO bind the username into the query, and prevent any SQL injection attempts. 
$query->bindParam(':name', $_POST['username']); 
//execute the query 
$query->execute(); 

//return the json object containing the result of if the username exists or not. The $.post in our jquery will access it. 
echo json_encode(array('exists' => $query->rowCount() > 0)); 

अब संक्षिप्त करने के लिए, हमारे jQuery स्क्रिप्ट जहां यह डेटाबेस से एक उपयोगकर्ता नाम का चयन करता है validation.php को पोस्ट करेंगे। यह JSON ऑब्जेक्ट लौटाएगा जिसमें exists की कुंजी है जो एक बूलियन है जो इंगित करता है कि उपयोगकर्ता नाम पहले से ही आपके डेटाबेस में एक पंक्ति के रूप में मौजूद है या नहीं। जब अनुरोध jQuery के माध्यम से पूरा हो जाता है, तो आप क्वेरी के परिणाम के आधार पर जो भी चाहते हैं वह कर सकते हैं। मुझे आशा है कि यह एक संपूर्ण स्पष्टीकरण है और जो आपको पूरा करने की उम्मीद कर रहा है उसे ले जाता है।

-2
  1. if (mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='".$_POST['username']."'")) < 1) { 
        true; 
    } else { 
        false; 
    } 
    
  2. आप प्राप्त या पोस्ट तरीकों से इसे पारित कर सकते हैं। इस कार्य को करने के लिए, आप चाहिए हमें प्राप्त - validation.php में आप बस के रूप में मैं सिर्फ तुम नहीं कर सकते डाक द्वारा चर पास या प्राप्त तरीकों कहा $somevar=$_POST['somevar'];

  3. लिखने के लिए की है।

मैं आशा मैं मददगार था;)

+0

हैलो, ठीक है! कुछ करने की कोशिश करो। वैसे आपको कोडइग्निटर के साथ कोई ज्ञान है, मैं मॉड्यूल पर AJAX अनुरोध कैसे पास करूंगा? –

+1

MYSQL_REAL_ESCAPE_STRING का उपयोग करें या एसक्यूएल इंजेक्शन – fabspro

0

यहाँ है कि मैं क्या मेरी वेबसाइट में से एक पर किया था: validation.php पर मैं उपयोगकर्ता नाम तो यहाँ के साथ सदस्य की संख्या की गिनती है jQuery स्क्रिप्ट:

var username = $('#username').val(); 
$('#username').change(function() { 
    $.ajax({ 
     url: "validation.php", 
     type: 'POST', 
     data: 'username=' + username, 
     success: function(result){ 
       if(result > 0){ 
        // do something if username already exist 
       } 
       else{ 
        // do something if username doesn't exist 
       } 
       } 
     }); 
}); 
+0

को रोकने के लिए तैयार कथन का उपयोग करें भविष्य में उपयोग –

+0

के लिए सफलता कॉलबैक की कमी है ठीक है! धन्यवाद, इसलिए मैं कुछ करने की कोशिश करूंगा;)! हो सकता है कि आपको CodeIgniter के साथ ज्ञान हो, और आप जानते हैं, मैं मॉड्यूल में यूआरएल कैसे पास करूं? –

+0

@ अमृतपाल सिंह: मुझे नहीं पता था, क्षमा करें। इसके बजाय मुझे क्या उपयोग करना चाहिए? – romainberger

4

इंटरनेट पर ट्यूटोरियल पढ़ने के साथ, आप बहुत सी चीजें सीख सकते हैं। मैं आपको निम्न पृष्ठ पर दिए गए निर्देशों का पालन करने की सलाह देता हूं: http://blog.webwizo.com/2011/05/04/simple-login-with-php-and-jquery-ajax/

आप निर्दिष्ट PHP फ़ाइल में पोस्ट के माध्यम से उपयोगकर्ता नाम भेजते हैं, जो आपके द्वारा प्रदान किए गए उपयोगकर्ता नाम की खोज करता है।

कृपया, इनपुट स्ट्रिंग पर mysql_real_escape_string फ़ंक्शन का उपयोग करें, इसलिए हैकर आपकी वेबसाइट पर एक एसक्यूएल इंजेक्शन हमले का उपयोग करने में सक्षम नहीं होंगे। यह इस प्रकार काम करता है:

$query = "SELECT * FROM users WHERE username = '".mysql_real_escape_string($_POST['username'])."'"; 
if (mysql_num_rows(mysql_query($query)) > 1) 
{ 
    print "inuse"; 
} 

फिर आप अपने AJAX jquery फ़ंक्शन में प्रतिक्रिया मान देख सकते हैं। यदि वेबसाइट "inuse" मान लौटाती है, तो एक त्रुटि संदेश दिखाएं कि उपयोगकर्ता नाम पहले से उपयोग में है। यदि नहीं, तो उपयोगकर्ता नाम उपलब्ध है।

लेकिन जैसा कि मैंने कहा है, ट्यूटोरियल और सबसे महत्वपूर्ण बात की जाँच करें: उपयोग mysql_real_escape_string से पहले जारी SELECT * FROM 'users' WHERE 'username' = '. $_POST['username']; सिर्फ एक SQL इंजेक्शन के लिए पूछ रहा है SQL इंजेक्शन हमले

संबंधित मुद्दे