2015-07-07 3 views
2

Так что я только что узнал об автозагрузке jquery и хотел бы добавить его на свою веб-страницу. Я хочу подключить его к моему php-коду, чтобы я мог искать свою базу данных sql. Однако всякий раз, когда я пытаюсь запустить автозаполнение, он, похоже, не находит передаваемый php-массив im (im, просто пытающийся заставить массив работать на данный момент). Может кто-нибудь помочь?JQuery и PHP, autocomplete

Jquery код

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>jQuery UI Autocomplete - Default functionality</title> 
    <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> 
    <script src="//code.jquery.com/jquery-1.10.2.js"></script> 
    <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
    <script> 
    $(function() { 
    $("#tags").autocomplete({ 
     source: "test.php" 
    }); 
    }); 
    </script> 
</head> 
<body> 

<div class="ui-widget"> 
    <label for="tags">Tags: </label> 
    <input id="tags"> 
</div> 


</body> 
</html> 

PHP код

<?php 
    $data[] = array(
     'c++','Java','JavScript',"c#"); 
echo json_encode($data); 
?> 
+1

Вы уверены, что это '$ data [] = array ( 'C++', 'Java', 'JavScript', 'C#');', а не '$ data = array ( 'C++', 'Java ',' JavScript ', "C#"); ' – Stefan

+0

У меня на самом деле был [], просто не скопировал его правильно. Это не сработало –

+0

И вы можете использовать его как $ data = array ('C++', 'Java', 'JavScript', 'C#'); BTW –

ответ

1

Это обновленная версия вашего ответа, который должен решить устаревший драйвер SQL и вопрос введения. Вам нужно заменить SECOND_COLUMNNAME на имя вашего фактического столбца. Кроме того, я думаю, что это должно сработать.

<?php 
try { 
    $dbh = new PDO('mysql:host=localhost;dbname=DB','username','password'); 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 
if(empty($_REQUEST['term'])) 
    exit(); 
//require_once('connect.php'); connection to db is in this file so connection is not needed 
$query = 'SELECT name, SECOND_COLUMNNAME FROM locations 
     WHERE name 
     LIKE ? 
     ORDER BY id ASC 
     LIMIT 0,10'; 
$stmt = $dbh->prepare($query); 
$stmt->execute(array(ucfirst($_REQUEST['term']) . '%')); 
$data = array(); 
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    $data[] = array(
       'label' => $row['name'], 
       'value' => $row['SECOND_COLUMNNAME'] 
       ); 
} 
echo json_encode($data); 
flush(); 

Ссылки:

http://php.net/manual/en/pdo.prepared-statements.php
http://php.net/manual/en/pdo.connections.php
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
How can I prevent SQL injection in PHP?

Также не уверен, что если что-нибудь еще в connect.php, вам может понадобиться, чтобы привести его обратно.

+0

Удивительное спасибо за помощь –

+0

Когда я добавил $ stmt = $ dbh-> prepare ($ query); $ stmt-> execute (array (ucfirst ($ _ REQUEST ['term']). '%')); $ data = array() ;. Я не работал –

+0

О, подождите, у меня была опечатка, неважно –

1

Узор массив используется здесь должен быть, как показано ниже.

<?php 
$data = array(
    array("value"=>'C++'), 
    array("value"=>'Java'), 
    array("value"=>'Javascript'), 
    array("value"=>'C#'), 
); 
echo json_encode($data); 
+0

Примите, если он работает для вас. –

+0

Он работает, но он отображает все элементы вместо элементов, содержащих одни и те же буквы. –

+0

Также попытался $ data = array ( "value" => 'C++', "value" => 'Java', " value "=> 'Javascript', " value "=> 'C#' ); Это возвращает только C# всякий раз, когда я набираю что-нибудь –

0
<?php 
    $data = array(
     'c++', 
     'Java', 
     'JavScript',"c#"); 
echo json_encode($data); 
?> 
+0

Нет, вернет все, независимо от того, что вы набираете в –

+0

, потому что этот код возвращает 4 значения. Вы должны написать код PHP для фильтрации результатов: D – ryrysz

1

Если вы используете PHP> = 5,4:

$data = [ 
    [ 'value' => 'C++' ], 
    [ 'value' => 'Java' ], 
    [ 'value' => 'Javascript' ], 
    [ 'value' => 'C#' ] 
]; 
echo json_encode($data); 

Вот рабочий пример моего автозавершения кода:

function get_data(type, target, min_length) 
{ 
    $(target).autocomplete({ 
     source: function(request, response) { 
      var submit = { 
       term: request.term, 
       type: type 
      }; 
      $.ajax({ 
       url: '/request/get', 
       data: { thisRequest: submit}, 
       dataType: "json", 
       method: "post", 
       success: function(data) { 
        response($.map(data.Data, function(item) { 

         return { 
          label: item.label, 
          value: item.label 
         } 
        })); 
       } 
      }); 
     }, 
     minLength: min_length 
    }) 
} 
+0

Да, все равно не работает. srry –

+0

Вы опубликовали весь обработчик javascript? – visevo

+0

Возможно, это невозможно сделать, передав массив по php –

-1

Так я хочу с советом Pratik Soni и сделал поиск. Вот код PHP, если кто-то хочет использовать его

<?php 
// Connect to server and select databse. 
$dblink = mysql_connect('localhost','username','password') or die(mysql_error()); 
mysql_select_db('DB'); 
?> 

<?php 
if(!isset($_REQUEST['term'])) 
exit(); 
require('connect.php'); 
    $term = 
    $query = mysql_query(' 
SELECT * FROM locations 
WHERE name 
LIKE "'.ucfirst($_REQUEST['term']).'%" 
ORDER BY id ASC 
LIMIT 0,10', $dblink 
); 
    $data = array(); 
    while($row = mysql_fetch_array($query, MYSQL_ASSOC)){ 
     $data[] = array(
    'label' => $row['name'], 
    'value' => $row['name'], 
    ); 
} 
echo json_encode($data); 
    flush(); 
+1

Это доступно для SQL-инъекций и использования устаревших функций 'mysql_'. – chris85

+0

Спасибо за это, я бы хотел некоторые предложения, чтобы сделать его лучше, если у вас есть. –

+1

Начните здесь: http://php.net/manual/en/book.mysqli.php и познакомьтесь с ним очень хорошо. – visevo