Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka Mysql, PHP, Ajax suggest
Forum PHP.pl > Forum > XML, AJAX
wampo
Witam wszystkich na forum.
To jest moj pierwszy post i mam do was pytanie. Chciałbym zrobić wyszukiwarke do sklepiku internetowego opartego o Ajax z funkcją suggest. Miała by ona działać w następujący sposób:
wpisuje literke pojawia się uzupełnienie nazwy danego autora, produktu itp. Gdy juz wyświetli się interesująca mnie nazwa klikam  na nią i zostaję przekierowany na konkretną stronę z danym produktem lub autorem badź kategoriami Sklep jest oparty o Mysql i PHP w wersjach 5, szablon Smarty.
 Jestem laikiem w Ajaksie. Widziałem coś podobnego w książce "Ajax i PHP interaktywne aplikacje internetowe" ale tu zostaje przekierowany na strone php.net z opisem funkcji php. A mnie interesuje zeby przekierować na konkretną stronę np.: autora produkutu, kategorii lub  wyświetliła się strona z konkretnym produktem.
Czy jest to możliwe do wykonania. Muszę pewnie stworzyć tabelę w bazie z wszystkimi nazwami autorów, produktów oraz kategorii, czy powinienem stworzyć nową oddzielną bazę danych gdzie przez JavaScript odbywały by się przekierowania do tej bazy lub konkretnych stron autorów(kategorii) i produkutów, ale nie jestm pewien. Prosiłbym o pomoc jak to wykonać, zaczynając od mysql , php i na ajax skonczywszy. Jeśli jest to możliwe interesuje mnie kod z góry dziękuję i pozdrawiam.
JaRoPHP
Cytat(wampo @ 5.10.2007, 08:07:13 ) *
Jeśli jest to możliwe interesuje mnie kod z góry dziękuję i pozdrawiam.
Kod znajdziesz albo w wymienionej książce, albo na forum (były rozwiązywane problemu typu "Google suggest"). Każdy kod będziesz musiał przerobić, nie oczekuj gotowców.
wampo
Wiem. I nie oczekuję. Jak pisałem nie znam ajaksa. Ale jak w tym wypadku zmienić zeby wystąpiło odwołanie do konkretnej strony z danym produktem,  do danej kategorii czy producenta. W podanej przeze mnie książce nie ma tego. A chciałbym uzyskac efekt jaki przedstawiłem powyżej.


Ostatnio znalazłem takie coś
1.plik searchSuggest.php
CODE


//Send some headers to keep the user's browser from caching the response.

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );

header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );

header("Cache-Control: no-cache, must-revalidate" );

header("Pragma: no-cache" );

header("Content-Type: text/xml; charset=utf-8");



//Get our database abstraction file

require('database.php');

///Make sure that a value was sent.

if (isset($_GET['search']) && $_GET['search'] != '') {

//Add slashes to any quotes to avoid SQL problems.

$search = addslashes($_GET['search']);

//Get every page title for the site.

$suggest_query = db_query("SELECT distinct(title) as suggest FROM page WHERE title like('" .

$search . "%') ORDER BY title");

while($suggest = db_fetch_array($suggest_query)) {

//Return each page title seperated by a newline.

echo $suggest['suggest'] . "\n";

}

}

?>

2. plik ajax_search.js:
CODE

//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if(window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
} else {
alert("Your Browser Sucks!\nIt's about time to upgrade don't you think?");
}
}

//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();

//Called from keyup on the search textbox.
//Starts the AJAX request.
function searchSuggest() {
if (searchReq.readyState == 4 || searchReq.readyState == 0) {
var str = escape(document.getElementById('txtSearch').value);
searchReq.open("GET", 'searchSuggest.php?search=' + str, true);
searchReq.onreadystatechange = handleSearchSuggest;
searchReq.send(null);
}
}

//Called when the AJAX response is returned.
function handleSearchSuggest() {
if (searchReq.readyState == 4) {
var ss = document.getElementById('search_suggest')
ss.innerHTML = '';
var str = searchReq.responseText.split("\n");
for(i=0; i < str.length - 1; i++) {
//Build our element string. This is cleaner using the DOM, but
//IE doesn't support dynamically added attributes.
var suggest = '<div onmouseover="java script:suggestOver(this);" ';
suggest += 'onmouseout="java script:suggestOut(this);" ';
suggest += 'onclick="java script:setSearch(this.innerHTML);" ';
suggest += 'class="suggest_link">' + str[i] + '</div>';
ss.innerHTML += suggest;
}
}
}

//Mouse over function
function suggestOver(div_value) {
div_value.className = 'suggest_link_over';
}
//Mouse out function
function suggestOut(div_value) {
div_value.className = 'suggest_link';
}
//Click function
function setSearch(value) {
document.getElementById('txtSearch').value = value;
document.getElementById('search_suggest').innerHTML = '';
}

3. plik database.php
CODE

<?php

//Make the database connection.
db_connect() or die('Unable to connect to database server!');

//You will need to replace the parameters below with the values for your database connection
//server = the database server (usually localhost).
//username = The user name to connect to the database.
//password = The password to connect to the database.
function db_connect($server = 'your server', $username = 'your username', $password = 'your password', $database = 'your database', $link = 'db_link') {
global $link;

$link = mysql_connect($server, $username, $password);

if ($link) mysql_select_db($database);

return $link;
}
//Function to handle database errors.
function db_error($query, $errno, $error) {
die('<font color="#000000"><b>' . $errno . ' - ' . $error . '<br><br>' . $query . '<br><br><small><font color="#ff0000">[STOP]</font></small><br><br></b></font>');
}
//Function to query the database.
function db_query($query, $link = 'db_link') {
global $link;

$result = mysql_query($query, $link) or db_error($query, mysql_errno(), mysql_error());

return $result;
}
//Get a row from the database query
function db_fetch_array($db_query) {
return mysql_fetch_array($db_query, MYSQL_ASSOC);
}
//The the number of rows returned from the query.
function db_num_rows($db_query) {
return mysql_num_rows($db_query);
}
//Get the last auto_increment ID.
function db_insert_id() {
return mysql_insert_id();
}
//Add HTML character incoding to strings
function db_output($string) {
return htmlspecialchars($string);
}
//Add slashes to incoming data
function db_input($string, $link = 'db_link') {
global $link;

if (function_exists('mysql_real_escape_string')) {
return mysql_real_escape_string($string, $link);
} elseif (function_exists('mysql_escape_string')) {
return mysql_escape_string($string);
}

return addslashes($string);
}


?>

Mam problem z połączeniem sie z bażą mysql, korzystam z Pear (DB.php). Co zmienić zeby natąpiło połączenie z moją bazą w pliku searchSuggest.php. W tym pliku podaję ścieżkę do plików konfiguracyjnyh i dostęp do bazy
(podaję w require('include/connect.php') ale wyskakuje mi błąd ze brak wymaganej biblioteki Pear DB
Oto moje pliki
1 connect.php
CODE

<?php
//buforowanie danych
ob_start();
//aktywacja sesji
session_start();
//--włączenie modułów--
require_once 'config.inc.php';
require_once 'obsluga_bledow.php';
require_once 'setup_smarty.php';
//Nawiązanie połączenie z bazą danych
require_once 'database.php';
$gDbManager = new DbManager(MYSQL_CONNECTION_STRING);
?>


2 database.php:
CODE

?php
//Dołączenie biblioteki PEAR_DB
require_once 'DB.php';

//klasa dostępu do bazy danych
class DbManager
{
public $db;

//zdefiniowanie konstruktora
function __construct($connectionString)
{
$this->db = DB::connect($connectionString,
USE_PERSISTENT_CONNECTIONS);
if (DB::isError($this->db))
trigger_error($this->db->getMessage(), E_USER_ERROR);
$this->db->setFetchMode(DB_FETCHMODE_ASSOC);

}

//koniec połączenia z bazą dnych
public function DbDisconnect()
{
$this->db->disconnect();
}

//--Realizowanie zapytan typu INSERT, DELETE, UPDATE--

//funkcja DBQuery biblioteki PEAR_DB

public function DbQuery($queryString)
{
$wynik = $this->db->query($queryString);
if (DB::isError($wynik))
trigger_error($wynik->getMessage(), E_USER_ERROR);
return $wynik;
}

//funkcja getALL() biblioteki PEAR_DB
public function DbGetAll($queryString)
{
$wynik = $this->db->getAll($queryString);
if (DB::isError($wynik))
trigger_error($wynik->getMessage(). E_USER_ERROR);
return $wynik;
}
//Funkcja getRow() biblioteki PEAR_DB
/*
udostępnianie pojedynczego wiersza danych za pomocą zapytania
SELECT z bazy danych
*/

public function DbGetRow($queryString)
{
$wynik = $this->db->getRow($queryString);
if (DB::isError($wynik))
trigger_error ($wynik->getMessage(), E_USER_ERROR);
return $wynik;
}

//Funkcja DbGetOne biblioteki PEAR_DB
/*
pobieranie pojedynczych wartośći zwracanych przez zapytanie
SELECT z bazy danych
*/

public function DbGetOne($queryString)
{
$wynik = $this->db->getOne($queryString);
if (DB::isError($wynik))
trigger_error($wynik->getMessage(), E_USER_ERROR);
return $wynik;
}

/*Funkcja DbEscapeSimple->wywołanie metody escapeSimple
niestandardowe znaki(cudzysłów lub apostrof) w stringach zastępowane są symbolami
odopowiednimi dla MYSQL
*/
public function DbEscapeSimple($string)
{
if (get_magic_quotes_gpc())
return $string;
else
return $this->db->escapeSimple($string);
}

}
?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.