Ajax, jquery, PHP, mysql и удаленные функции PHP
Всем привет,
Разрабатывая небольшое приложение для отслеживания времени, я слишком часто использую comboboxes... Я только что узнал, что пользовательский интерфейс может использовать jquery для обработки текстовых вводов с автозаполнением...
Таким образом, все становится проще, когда у вас есть много данных для фильтрации.
Это говорит о том, что после образцов в Интернете у меня все работает нормально... У меня есть текстовый ввод, который предлагает варианты на выбор, как только вы начинаете писать.
У меня есть файл интерфейса вспомогательной базы данных (database.php) где у меня есть все функции базы данных, даже небольшой скрипт connect to database (getConn() , который возвращает указатель на соединение с базой данных).
В основном PHP файле у меня есть:
<script> $(function() { $("#edCustomer").autocomplete( { source: "autoCustomer.php" }); }); </script>
И в autoCustomer.php:
<?php include('127.0.0.1/rt/database.php' $DB = getConn(); // getConn is a function declared inside database.php... $term = $_GET['term']; $arr = array(); $sql = "SELECT * FROM tCustomers WHERE name LIKE '%".$term."%' ORDER BY name ASC"; $result = $DB->query($sql); if ($result != 0) { while ($row = $result->fetch_assoc()) { array_push($arr, $row["name"]); } mysqli_free_result($result); echo json_encode($arr); }?>
Если я вставлю функцию getConn (функция getConn(){и все содержимое функции}) в autoCustomer.php файл, он работает отлично, но когда я пытаюсь использовать функцию getConn из удаленного файла, она терпит неудачу, возвращая ошибку 500 (Внутренняя ошибка сервера).
Как я могу включить в него database.php файл в этом файле autoCustomer.php-что?
Я пытался:
include_once($_SERVER['DOCUMENT_ROOT'].'/globals.php'); include($rootpath.'/rt/database.php');
$rootpath - это переменная, которая обновляется в globals.php-да.
Кроме того, для упрощения я попробовал:
include('127.0.0.1/rt/database.php');
В обоих случаях не повезло...
Есть идеи?
Что я уже пробовал:
Попытался использовать другой синтаксис для части include... ни с одним не повезло.
Richard Deeming
$sql = "SELECT * FROM tCustomers WHERE name LIKE '%".$term."%' ORDER BY name ASC";
Не делай этого так!
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
PHP: SQL-инъекция - руководство пользователя[^]
Joan M
Спасибо тебе, Ричард!
Учитывая то, что я прочитал в ссылках, которые вы предоставили... простое использование mysqli_real_escape_string должно избежать этой проблемы... Это правда?
Спасибо еще раз... Я действительно получаю удовольствие от этого маленького проекта... :D ничего общего с роботами и машинами, которые я обычно программирую... ^^
Richard Deeming
Это может иметь дело с очевидными случаями, но все еще могут быть крайние случаи, которые пройдут.
Как говорится в документе PHP, используйте его только в качестве запасного варианта, если вы работаете с базой данных, которая не поддерживает параметры. MySQL, безусловно, поддерживает параметры, поэтому вы должны их использовать. :)
РНР: Подготовленные инструкции и хранимые процедуры - руководство пользователя[^]
Joan M
Ооооок! Я определенно могу сказать, что сегодня многому научился...
Не использовал хранимую процедуру с 1999 года! :Д:Д:Д:Д
Очень приятно это знать... теперь я закончу приложение (я почти там), и как только я закончу его, я обновлю все запросы, чтобы быть в безопасности.
СПАСИБО!
Richard Deeming
Вам не нужно использовать хранимые процедуры для использования параметров. :)
Joan M
Лол! хорошо, я перечитаю его (дважды) и обязательно перенесу в параметры, а потом... thx!