tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
689
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    tushkan tushkan ist offline Grünschnabel
    Registriert seit
    Dec 2010
    Beiträge
    2
    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"urltrue);
                    
                    
    //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!!
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  3. #3
    tushkan tushkan ist offline Grünschnabel
    Registriert seit
    Dec 2010
    Beiträge
    2
    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(
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  1. Erweiterte Suche
    Von thehasso im Forum PHP
    Antworten: 4
    Letzter Beitrag: 24.03.09, 19:13
  2. erweiterte Datenbank Suche (MySQL)
    Von sugar im Forum Relationale Datenbanksysteme
    Antworten: 10
    Letzter Beitrag: 02.12.04, 13:21
  3. Suche erweiterte PHP-Tutorials
    Von fiacyberz im Forum PHP
    Antworten: 1
    Letzter Beitrag: 26.10.04, 13:29
  4. Erweiterte Suche, lokal & lan, mit welchen PS möglich?
    Von stonedjehova im Forum Coders Talk
    Antworten: 13
    Letzter Beitrag: 28.04.04, 09:05
  5. Mysql-while-schleife und erweiterte info
    Von Subwoover im Forum PHP
    Antworten: 6
    Letzter Beitrag: 18.02.02, 20:19

Stichworte