ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
689
689
EMPFEHLEN
-
Hallo! Ich habe eine ziemlich große Datenbank erstellt und habe dafür ein Ajax LiveSearch-Funktion geschrieben. Die Suche funktioniert super, jetzt möchte ich aber die Suche einwenig erweitern:
1) Volltextsuche: mit allen angegebenen Worten
2) Teilsuche: mit einem der Wörter, der in der Tabelle vorkommen kann.
3) Durch Checkboxen möchte ich den 2 erweiterten Suchfeldern(Volltextsuche, Teilsuche) mitteilen in welche Tabelle(Kostenstelle, Auftrag, etc...) gesucht wird.
Ich habe dafür bereits ziemlich viel Zeit investiert, habe aber bis jetzt nur Pech...
Ich würde mich sehr freuen, wenn jemand mir dabei helfen könnte! SOS******
Hier ist der gesamte Code(Formular, JavaScript, PHP):
HTML-Code:<html> <head> <title>Ajax Suche</title> </head> <body> <script type="text/javascript" src="suche.js"></script> <script language="javascript"> Suche <input type="text" onkeyup="searchFor(this.value);"/> <input type="checkbox" id="checkbox1" name="checkbox1"> <label for="erweitert">Erweiterte Suche</label> <ul> <label for="Suchein"><b>Suche in:</b></label> <hr> <p align=left>Volltextsuche <input type="text" onkeyup="searchFor(this.value);"/> <p align=left>Teilsuche <input type="text" onkeyup="searchFor(this.value);"/> </ul> <ul> <label for="Kostenstelle">Kostenstelle</label> <input type="checkbox" id="checkbox" name="checkbox" > </ul> <ul> <label for="Auftrag">Auftrag</label> <input type="checkbox" id="checkbox" name="checkbox" > </ul> <ul> <label for="Hierarchien">Hierarchien</label> <input type="checkbox" id="checkbox" name="checkbox" > </ul> <ul> <label for="Kostenart">Kostenart</label> <input type="checkbox" id="checkbox" name="checkbox" > </ul> <ul> <label for="Organisation">Organisation</label> <input type="checkbox" id="checkbox" name="checkbox" > </ul> <ul> <label for="Profitcenter">Profitcenter</label> <input type="checkbox" id="checkbox" name="checkbox" > </ul> <ul> <label for="Leitfaden">Leitfaden</label> <input type="checkbox" id="checkbox" name="checkbox" > </ul> <ul> <label for="SAP-GB">SAP-GB</label> <input type="checkbox" id="checkbox" name="checkbox" > </ul> <div id="ergebnis"></div> </body> </html>
PHP-Code:function searchFor(suchbegriff){
var xmlHttp = null;
// Mozilla, Opera, Safari sowie Internet Explorer 7
if (typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
if (!xmlHttp) {
// Internet Explorer 6 und älter
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xmlHttp = null;
}
}
}
// Wenn das Objekt erfolgreich erzeugt wurde
if (xmlHttp) {
var url = "suche.php";
var params = "suchbegriff="+suchbegriff;
xmlHttp.open("POST", url, true);
//Headerinformationen für den POST Request
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
// Zurückgeliefertes Ergebnis wird in den DIV "ergebnis" geschrieben
document.getElementById("ergebnis").innerHTML = xmlHttp.responseText;
}
};
xmlHttp.send(params);
}
}
PHP-Code:<?php
//-- pre-condition ---------------------------------------------------------------------------------
error_reporting(E_ALL);
mysql_connect('localhost', 'root', '');
mysql_select_db('elko');
//-- example input ---------------------------------------------------------------------------------
$sSearch = $_POST["suchbegriff"];
//--------------------------------------------------------------------------------------------------
function mysqlSearch($sSearch)
{
// replace multiple whitespaces with a simple blank
$aSearch = explode(' ', preg_replace('#\s+#', ' ', $sSearch));
// count search words once
$iSearch = count($aSearch);
if ($iSearch == 0) {
return array();
}
// remove addslashes (automatically executed by php) and use mysql_real_escape_string instead. it's more secure against sql injection
if (get_magic_quotes_gpc()) {
$aSearch = array_map('stripslashes', $aSearch);
}
$aSearch = array_map('mysql_real_escape_string', $aSearch);
// get all tables in selected database
$sSQL1 = 'SHOW TABLES';
$rRes1 = mysql_query($sSQL1);
// save hits
$aHits = array();
while ($aTable = mysql_fetch_array($rRes1)) {
$sTable = $aTable[0];
// get all columns from each table
$sSQL2 = "SHOW COLUMNS FROM `$sTable`";
$rRes2 = mysql_query($sSQL2);
// combine search words with columns
$aPermutation = array();
while ($aColumn = mysql_fetch_assoc($rRes2)) {
$sColumn = $aColumn['Field'];
for ($i = 0; $i < $iSearch; $i++) {
$sSearchword = $aSearch[$i];
$aPermutation[] = "`$sColumn` LIKE '%$sSearchword%'";
}
}
// combine as OR-condition
$sSQL4 = "SELECT * FROM `$sTable` WHERE " . implode(' OR ', $aPermutation);
$rRes4 = mysql_query($sSQL4);
// collect result
while ($aHit = mysql_fetch_assoc($rRes4)) {
$aHits[$sTable][] = $aHit;
}
}
return $aHits;
}
//-- example output --------------------------------------------------------------------------------
echo print_r(mysqlSearch($sSearch), true);
//--------------------------------------------------------------------------------------------------
?>
Vielen Dank im Vorab!!
-
Scheiterst du im SQL oder im PHP?
Wenns SQL ist, dann zeig doch mal ein fertiges SELECT
Und was heisst gescheitert? Fehlermeldungen?---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Vielen Dank für die Antwort!
Die Volltextsuche habe ich mir ungefähr so vorgestellt:
"SELECT * FROM `$sTable` WHERE " . implode(' AND ', $aPermutation);
Teilsuche:
SELECT * FROM '$sTable' WHERE " .implode ('LIKE', $aPermutation);
Das gibt leider nichts aus, auch keine Fehlermeldungen(
-
Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
[PHP] [MySQL] Debug Queries
Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
Ähnliche Themen
-
Erweiterte Suche
Von thehasso im Forum PHPAntworten: 4Letzter Beitrag: 24.03.09, 19:13 -
erweiterte Datenbank Suche (MySQL)
Von sugar im Forum Relationale DatenbanksystemeAntworten: 10Letzter Beitrag: 02.12.04, 13:21 -
Suche erweiterte PHP-Tutorials
Von fiacyberz im Forum PHPAntworten: 1Letzter Beitrag: 26.10.04, 13:29 -
Erweiterte Suche, lokal & lan, mit welchen PS möglich?
Von stonedjehova im Forum Coders TalkAntworten: 13Letzter Beitrag: 28.04.04, 09:05 -
Mysql-while-schleife und erweiterte info
Von Subwoover im Forum PHPAntworten: 6Letzter Beitrag: 18.02.02, 20:19





Zitieren

Login





