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):
Vielen Dank im Vorab!!
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:
<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:
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:
<?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!!