Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

SQL डेटाबेस के आधार पर स्वत:पूर्ण टेक्स्टबॉक्स परिणाम

JQuery UI स्वतः पूर्ण स्रोत विकल्प के 3 विभिन्न प्रकार के मान ले सकता है :

  1. एक सरणी
  2. . के साथ स्वतः पूर्ण करने के लिए चीजों की सूची युक्त
  3. एक स्ट्रिंग एक स्क्रिप्ट का URL होता है जो एक सूची को फ़िल्टर करता है और हमें परिणाम भेजता है। प्लगइन इसमें टाइप किए गए टेक्स्ट को ले जाएगा और इसे term . के रूप में भेज देगा हमारे द्वारा प्रदान किए गए URL में संलग्न क्वेरी-स्ट्रिंग में पैरामीटर।
  4. एक फ़ंक्शन जो डेटा को पुनः प्राप्त करता है और फिर उस डेटा के साथ कॉलबैक को कॉल करता है।

आपका मूल कोड पहले, एक सरणी का उपयोग करता है।

var availableTags = [
  "autocomplete.php";
];

जो स्वतः पूर्ण बताता है वह यह है कि स्ट्रिंग "autocomplete.php" चीजों की सूची में केवल एक चीज है जिसके साथ स्वत:पूर्ण करना है।

मुझे लगता है कि आप जो करने की कोशिश कर रहे थे, वह इसे कुछ इस तरह से एम्बेड कर रहा है:

$(function() {

  var availableTags = [
    <?php include("autocomplete.php"); /* include the output of autocomplete as array data */ ?>;
  ];

  $( "#tags" ).autocomplete({
    source: availableTags
  });

});

यह शायद यह मानकर ठीक काम करेगा कि डेटाबेस से लौटाई जा रही चीजों की सूची हमेशा छोटी रहेगी। इसे इस तरह से करना नाजुक है, हालांकि आप PHP से कच्चे आउटपुट को अपने जेएस में भेज रहे हैं। यदि लौटाए गए डेटा में " . है आपको ऐडस्लैश का उपयोग करना पड़ सकता है इसे सही ढंग से बचने के लिए। हालांकि आपको * . के बजाय किसी एक फ़ील्ड को वापस करने के लिए क्वेरी को बदलना चाहिए , आप शायद केवल एक फ़ील्ड को स्वत:पूर्ण में लेबल के रूप में पूरी पंक्ति नहीं चाहते हैं।

एक बेहतर तरीका, खासकर यदि सूची संभावित रूप से बहुत बड़ी हो सकती है, तो दूसरी विधि का उपयोग करना होगा:

$(function() {

  var availableTags = "autocomplete.php";

  $( "#tags" ).autocomplete({
    source: availableTags
  });

});

इसके लिए आपको बैक-एंड स्क्रिप्ट में बदलाव करने की आवश्यकता होगी जो सूची को हथिया रही है ताकि यह फ़िल्टरिंग करे। यह उदाहरण एक तैयार स्टेटमेंट का उपयोग करता है यह सुनिश्चित करने के लिए कि उपयोगकर्ता ने $term . में डेटा प्रदान किया है आपको SQL इंजेक्शन तक नहीं खोलता है :

<?php

include('conn.php');

// when it calls autocomplete.php, jQuery will add a term parameter
// for us to use in filtering the data we return. The % is appended
// because we will be using the LIKE operator.
$term = $_GET['term'] . '%';
$output = array();

// the ? will be replaced with the value that was passed via the
// term parameter in the query string
$sql="SELECT name FROM oldemp WHERE name LIKE ?";

$stmt = mysqli_stmt_init($mysqli);

if (mysqli_stmt_prepare($stmt, $sql)) {

  // bind the value of $term to ? in the query as a string
  mysqli_stmt_bind_param($stmt, 's', $term);

  mysqli_stmt_execute($stmt);

  // binds $somefield to the single field returned by the query
  mysqli_stmt_bind_result($stmt, $somefield);

  // loop through the results and build an array.
  while (mysqli_stmt_fetch($stmt)) {
      // because it is bound to the result
      // $somefield will change on every loop
      // and have the content of that field from
      // the current row.
      $output[] = $somefield;
  }

  mysqli_stmt_close($stmt);
}

mysqli_close($mysqli);

// output our results as JSON as jQuery expects
echo json_encode($output);

?>

जब से मैंने mysqli के साथ काम किया है, तब से कुछ समय हो गया है, ताकि कोड को कुछ ट्वीविंग की आवश्यकता हो क्योंकि इसका परीक्षण नहीं किया गया है।

तैयार कथनों का उपयोग करने की आदत डालना अच्छा होगा क्योंकि जब ठीक से उपयोग किया जाता है, तो वे SQL इंजेक्शन को असंभव बना देते हैं। आप इसके बजाय एक सामान्य गैर-तैयार कथन का उपयोग कर सकते हैं, प्रत्येक उपयोगकर्ता द्वारा प्रदत्त आइटम से बचकर mysqli_real_escape_string इससे पहले कि आप इसे अपने SQL कथन में सम्मिलित करें। हालांकि , ऐसा करना बहुत त्रुटिपूर्ण है। हमलों के लिए खुद को खोलने के लिए केवल एक चीज से बचना भूल जाता है। अधिकांश प्रमुख "हैक्स" हाल के इतिहास में एसक्यूएल इंजेक्शन कमजोरियों को पेश करने वाली मैला कोडिंग के कारण हैं।

यदि आप वास्तव में गैर-तैयार कथन के साथ रहना चाहते हैं, तो कोड कुछ इस तरह दिखाई देगा:

<?php
  include('conn.php');

  $term = $_GET['term'];
  $term = mysqli_real_escape_string($mysqli, $term);
  $output = array();

  $sql = "SELECT name FROM oldemp WHERE name LIKE '" . $term . "%';";

  $result = mysqli_query($mysqli,$sql) or die(mysqli_error());

  while($row=mysqli_fetch_array($result))
  {
    $output[] = $row['name'];
  }

  mysqli_close($mysqli);

  // output our results as JSON as jQuery expects
  echo json_encode($output);
?>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CONVERT_TZ - क्वेरी में MySQL टाइमज़ोन कैसे बदलें

  2. उपयोगकर्ता 'www-data'@'localhost के लिए प्रवेश निषेध - इससे कैसे निपटें?

  3. MySQL प्रदर्शन ट्यूनिंग पर 10 उपयोगी टिप्स

  4. आदेश sql ट्री पदानुक्रम

  5. MySQL में विदेशी कुंजी की मूल बातें?