Eine Suche

Hallo,

ich arbeite zur Zeit an einer Suche, welche eigentlich auch schon ganz gut funktioniert, jedoch weist sie noch ein paar Kinderkrankheiten auf:

- ich schaffe es noch nicht die Einträge ausgeben zu lassen
- doppelte Einträge würden angezeigt werden


PHP:
if (isset($_GET['q'])) {
		$q = htmlspecialchars($_GET['q']);
		$q = str_replace(array('*', ''), '%', $q);
		$noiseMatch = array('^', '$', '&', '(', ')', '<', '>', '`', '\'', '"', '|', ',', '@', '_', '?', '%', '~', '[', ']', '{', '}', ':', '\\', '/', '=', '#', '\'', ';', '!', '¤');
		$noiseReplace = ' ';
		$q = str_replace($noiseMatch, $noiseReplace, $q);
		$qArray = explode(' ', $q);
		
		for ($x = 0; $x < sizeof($qArray); ++$x) {
			$getTempImages = mysql_query("SELECT * FROM `images` WHERE id like '".current($qArray)."'");
			if (mysql_num_rows($getTempImages) != NULL) {
				$getImages[] = $getTempImages;
			}			
			next($qArray);
		}
		unset($x);
		
		if (sizeof($getImages) == NULL) {
			echo "Keine Treffer";
		}
		else {
			$imageAtRow = 1;
			while ($image = mysql_fetch_array($getImages)) {
				...Ausgabe...
				$imageAtRow++;
			}
		}		
}

Der erste Fehler liegt in der While-Schleife bei der Abfrage - da es sich nicht um ein Array handelt, was aus der Datenbank kommt - jedoch fehlt mir der Lösungsansatz...

Die Überprüfung ob es doppelte Datensätze gibt ist auch noch nicht... hat dafür jemand eventuell einen Lösungsansatz?

Kann mir jemand helfen?
Gibt es Verbesserungsvorschläge?


Danke
 
Zuletzt bearbeitet:
Die mysql_fetch_*()-Funktionen liefern nur Datensätze einer MySQL-Ergebnisressource. Das ist etwas anderes als ein Array, weswegen diese Funktionen auch nicht für Arrays verwendet werden kann.
 
Das weiß ich, hatte es oben ja auch schon geschrieben - weißt du womit es stattdessen funktioniert? In der PHP.net-Manual habe ich leider auch keine Lösung gefunden...
 
Entweder mit foreach oder aber (da keine assoziativen Schlüssel verwendet werden) mit for.
 
Ich würd’ Folgendes machen:
PHP:
if (isset($_GET['q'])) {
	$tokens = tokenizeQuoted($_GET['q']);
	if( count($tokens) ) {
		foreach( $tokens as $key => $token ) {
			$tokens[$key] = mysql_real_escape_string(str_replace(array('*', '_'), array('%', '\_'), $token));
		}
		$query = 'SELECT * FROM `images` WHERE `id` LIKE "'.implode(' OR `id` LIKE "', $tokens).'"';
		$result = mysql_query($query);
		if( !mysql_num_rows($result) ) {
			echo "Keine Treffer";
		} else {
			while( $image = mysql_fetch_array($result) ) {
				echo $image['beschreibung'];
			}
		}
	}
}
Die tokenizeQuoted()-Funktion entspricht dabei der in den Kommentaren der strtok()-Funktionsreferenzseite beschrieben Funktion.
 
Straight! Vielen, vielen Dank. Es funktioniert einwandfrei und den Rest werde ich, denke ich, alleine auf die Reihe kriegen...

Schönen Feiertag dir noch!
 
Zurück