Datenbank Suche mit mehreren Variablen

BjoernSchmitt

Grünschnabel
Hallo,
ich bin neu hier und hoffe alles richtig zu formulieren und darzustellen. Ich benötige keine blöden Antworten ich benötige Hilfe!! Ich habe eine PHP Sucheabfrage für meine MYSQL Datenbank, allerdings arbeitet die nur mit einer Variablen. Ich benötige nun aber eine Abfrage aller Spalten meiner Datenbank wenn ein User mehrere Worte eintippt. Ich habe von dem Begriff explode gehört und gelesen, der meine Sucheingabe in einzelne arrays packt und zerschneidet... wie aber verändere ich meinen schon existierenden Code, damit dies funktioniert?

Mein Code:
PHP:
<?php

  $var = @$_GET['q'] ;
  $s = mysql_escape_string($_GET['s']);
  $trimmed = mysql_escape_string(trim($var)); 

$limit=12; 

mysql_connect("..."); 

mysql_select_db("..."); 

$query = "select * from bilder where vorschau like \"%$trimmed%\"  or name like \"%$trimmed%\" or type1 like \"%$trimmed%\" or type2 like \"%$trimmed%\" or code like \"%$trimmed%\"
 or ort like \"%$trimmed%\"  or datum like \"%$trimmed%\" or type3 like \"%$trimmed%\" or night like \"%$trimmed%\" or rotation like \"%$trimmed%\" ORDER BY id desc"; 

 $numresults=mysql_query($query);
 $numrows=mysql_num_rows($numresults);

if ($numrows == 0)
  {
  echo "<h4>Results</h4>";
  echo "<p>Sorry, your search: &quot;" . $trimmed . "&quot; returned zero results</p>";
  }

  if (empty($s)) {
  $s=0;
  }

  $query .= " LIMIT $s, $limit";
  $result = mysql_query($query);// or die("Couldn't execute query");
  echo mysql_error();
echo "<p>Search results for: &quot;" . $var . "&quot;</p>";

$count = 0;
 
while ($row = mysql_fetch_array($result)) {

            $title     = $row["dateiname"];
            $img       = $row["vorschau"];
            $description = "Photo-ID: ". $row["id"] . "<br><br>
" . $row["name"] . "<br>
" . $row["type2"] . "<br>
" . $row["reg"] . "<br><br>
" . $row["datum"] . "<br><br>
" . $row["ort"] . "<br><br>

Views: "  .  $row["views"] . "<br>
<br>
" . htmlspecialchars($row["beschreibung"]) . "<br>"
;

            $id        = $row["id"];
			
			echo "<table width=\"570px\" cellspacing=\"0\" cellpadding=\"1\" style=\"margin-bottom: 10px; border: 1px solid #000000;\">";
			echo "<tr style=\"border-bottom: 1px solid #000000;\">";
			echo "<td height=\"20\" bgcolor=\"#78561d\" class=\"Stil4\" width=\"170px\" style=\"border-bottom: 1px solid #000000;\">
			      <div align=\"center\"><span class=\"Stil2\">Photo ID: ". $row["id"] ." </span></div></td>";
            echo "<td colspan=\"2\" bgcolor=\"#78561d\" class=\"Stil4\" style=\"border-bottom: 1px solid #000000;\">&nbsp;</td>";
			echo "</tr><tr>";
			
			echo "<td rowspan=\"2\" class=\"Stil4\" width=\"200px\" bgcolor=\"#666666\" style=\"border-right: 1px solid #000000;\"><br><div align=\"center\">
			      <a href=\"getpic.php?id=". $row["id"] ."\"rel=\"lightbox[gallery]\" title=\"$description\">
				  <img src=\"foto/$img\" style=\"border-color:#111111; border-width:2px; border-style:solid; padding:4px\" alt=\"\"></a></div><br></td>";
			echo "<td height=\"50%\" width=\"200px\"valign=\"top\" class=\"Stil4\" bgcolor=\"#666666\" style=\"padding-left: 10px;\">
			      Aircraft:<br><img src=\"gfx/line.gif\"alt=\"\"><img src=\"gfx/line.gif\" alt=\"\"><br><span class=\"Stil2\">
				  " . $row["name"] . "<br>
				  " . $row["type2"] . "</span></td>";
			echo "<td height=\"50%\" width=\"170px\"valign=\"top\" class=\"Stil4\" bgcolor=\"#666666\">
			      Location: <br><img src=\"gfx/line.gif\" alt=\"\"><img src=\"gfx/line.gif\" alt=\"\"><br><span class=\"Stil2\">
				  " . $row["ort"] . "</span></td>";
			echo "</tr><tr>";
			echo "<td height=\"50%\" width=\"200px\" valign=\"top\" class=\"Stil4\" bgcolor=\"#666666\" style=\"padding-left: 10px;\">
			      Registration/Date:<br><img src=\"gfx/line.gif\" alt=\"\"><img src=\"gfx/line.gif\" alt=\"\"><br><span class=\"Stil2\">
				  " . $row["reg"] . "<br>" . $row["datum"] . "</span></td>";
			echo "<td height=\"50%\" width=\"200px\" valign=\"top\" class=\"Stil4\" bgcolor=\"#666666\">
			      Views:<br><img src=\"gfx/line.gif\" alt=\"\"><img src=\"gfx/line.gif\" alt=\"\"><br><span class=\"Stil2\">
				  " . $row["views"] . "</span>
			  	 <form method=\"post\" action=\"https://www.paypal.com/cgi-bin/webscr\" target=\"paypal\" target=\"blank\">
					<div align=\"right\"><input type=\"hidden\" name=\"cmd\" value=\"_cart\">
					<input type=\"hidden\" name=\"add\" value=\"1\"> 
					<input type=\"hidden\" name=\"business\" value=\"bjoernschmitt@arcor.de\">
					<input type=\"hidden\" name=\"item_name\" value=\"8x12Inch Print (Matt or Gloss) - 20x30cm Abzug (Matt oder Glaenzend)\">
					<input type=\"hidden\" name=\"item_number\" value=\"Photo ID: ". $row["id"] ." - " . $row["name"] . " - " . $row["type2"] . " - " . $row["reg"] . "\">
					<input type=\"hidden\" name=\"amount\" value=\"5\">
					<input type=\"hidden\" name=\"currency_code\" value=\"EUR\">
					<input type=\"hidden\" name=\"return\" value=\"http://www.world-of-aviation.de\">
					<input type=\"hidden\" name=\"undefined_quantity\" value=\"1\">
					<input type=\"image\"  onmouseover=\"this.src='gfx/buynow2.gif'\" onmouseout=\"this.src='gfx/buynow.gif'\"
					src=\"gfx/buynow.gif\" border=\"0\" name=\"submit\" alt=\"Add to Cart\"></td>
					</div></form></td>";	  
            echo "</tr><tr>";			
			echo "<td valign=\"top\" colspan=\"3\" class=\"Stil4\" bgcolor=\"#666666\" style=\"border-top: 1px solid #000000;\">
			      Remarks:<span class=\"Stil2\">
				  ". $row["beschreibung"] ."</span><br></td>";
				  
            echo "</tr>";
			
			echo "</table>";          
}

$count++;


$currPage = (($s/$limit) + 1);

  if ($s>=1) { 
  $prevs=($s-$limit);
  print "&nbsp;<a href=\"$PHP_SELF?s=$prevs&q=$var\"><img src=\"gfx/previous.gif\" border=\"0\" alt=\"previous photos\"></a>&nbsp&nbsp;";
  }

  $pages=intval($numrows/$limit);


  if ($numrows%$limit) {
  $pages++;
  }

  if (!((($s+$limit)/$limit)==$pages) && $pages!=1) {

  $news=$s+$limit;

  echo "&nbsp;<a href=\"$PHP_SELF?s=$news&q=$var\"><img src=\"gfx/next.gif\" border=\"0\" alt=\"next photos\"></a>";
  }

$a = $s + ($limit) ;
  if ($a > $numrows) { $a = $numrows ; }
  $b = $s + 1 ;
  echo "<p>Showing results $b to $a of $numrows</p>";
  
?>

Ich weiß der Code ist lang, und der "untere" Teil ist nur das Layout, wie meine Bilder angezeigt werden...

Ich hoffe ihr könnt mir helfen.
Danke!!
 
Zuletzt bearbeitet:
Hört sich doch schon nach dem richtigen Weg an wenn du vorhast was ich denke.
Du bekommst über ein Fomular also zum Beispiel:
PHP:
$_POST["feld"] = "wort1 wort2 wort3";
Diese kannst selbstverständlich mit explode auseinander nehmen anhand des Leerzeichens:
PHP:
$arr = explode(" ", $_POST["feld"]);

Und dann trickreich wieder zusammenfügen:
PHP:
$sql = implode("%' or `feld` like '%", $arr);

Womit $sql so aussieht:
wort1%' or `feld` like '%wort2%' or `feld` like '%wort3

Da fehlt noch was vorne und hinten, das noch schnell ergänzt:
PHP:
$sql = "SELECT * FROM `tabelle` WHERE `feld` LIKE '%" . $sql . "%'

Und somit hättest du alle Wörter in der Abfrage (so dürfte $sql nun aussehen):
SELECT * FROM `tabelle` WHERE `feld` LIKE '%wort1%' or `feld` like '%wort2%' or `feld` like '%wort3%'

Das ist ein Vorschlag von mir.
Dazu muss ich sagen, dass ich mit solchen Abfragen noch nie gearbeitet habe, also warte noch auf weitere Antworten ;)
 
Danke schonmal.
Also hier nochmal meine Frage.
Meine Tabelle hat mehrere Spalten (wie ja im Code abgefragt wird).
Wenn ein User nun Lufthansa oder A320 eingibt bekommt er alle Fotos mit dem jeweiligen Suchwort. Wenn er allerdings Lufthansa A320 eintippt ergibt meine Suche keine Resultate, da ich ja nur ein Feld pro Eingabe abfrage. Deshalb möchte ich die Suche unterteilen. Das nach Lufthansa und A320 gesucht wird und jeder Datensatz angeziegt wird, der diese Worte einthält.
 
Wenn explizit beide vorkommen sollen (und) dann brauchst oben nur aus den "or" ein "and" oder "&&" zu machen.
 
Nein das funktioniert nicht.
Muss ich denn nicht die Suchworte mit explode zerlegen. Dann die Variablen in den Tabellenspalten suchen lassen und am Ende wieder zusammen fügen und anzeigen lassen?
 

Neue Beiträge

Zurück