Datenbank-Suche

matze93

Gesperrt
Hi Leute,
ich Suche eine Suche!
Sie muss nicht besonders sein. Nur einfach aufgebaut (bearbeitbar), aber mit ein paar kniffligen Funktionen.

Und zwar soll sie mir den Inhalt aus der MySQL-Datenbank auslesen können, den ich festlege. Sie sollte so aufgebaut sein:

Vor der Sucheingabe wird eine Box mit Inschrift "Suchwort hier eingeben" und Absende-Button "Suchen" angezeit.
Angezeigt wird nach der Suchabfrage das Resultat, welches nur den Titel der aus der Tabelle "MatzeCMS_sites" die Reihe "title" trägt und die Hits (wie oft kommt das Suchwort in der Tabelle "MatzeCMS_sites" in der Reihe "text" vor) anzeigt. Die Hits sollen sozusagen gespeichert und angezeigt werden. [kein Textinhalt soll aus der Reihe text freigegeben werden, da dieser in HTML gespeichert wurde; aber die Reihe text soll durchsucht werden]
Es soll aber später der Titel verlinkt werden. Dazu wird aus der Seite die ID aus "MatzeCMS_sites" die Reihe "ID" herausgeholt und in einen Link verpackt.
z.B. sites.php?id=10
Dieser Link soll sich im neuem Fenster (target_blank) öffnen.
Am besten wäre dann noch eine Blätterfunktion, sodass nur 25 Ergebnisse pro Seite angezeigt wird.

Kennt jemand eine Suche, die man so ungefähr bearbeiten kann oder kennt jemand ein Tutorial oder hat jemand Lust so etwas zu programmieren?
Ich kenn mich zwar recht gut aus, aber genau so wie ich es wollte ging nicht. Ich kam immer die "text" komplett ausgelesen mit Inhalt (den ich gar nicht wollte) und der Link hat nicht gespasst. Außerdem waren Fehler drin.
Mein Code:
search.php
PHP:
<font face="tahoma" size="4"> 
<font face="Verdana, Arial, Helvetica, sans-serif"><h3>Suche</h3></font>
</font> 
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post"> 
  <br>
  <font face="Verdana, Arial, Helvetica, sans-serif"> Suchbegriff eingeben
  <input type="text" name="words" value="<?php echo($words); ?>"> 
  <br> 
  <br> 
  <br>
  <input type="hidden" name="good" value="yes"> 
  <input type="submit" value="Suchen"> 
  </font> 
</form> 
<p><font face="Verdana, Arial, Helvetica, sans-serif"><br> 
  <br> 
  <? 
if($_POST['good']=='yes') 
{ 
   echo("<font face=\"tahoma\" size=\"3\" color=\"green\"><b>Ergebniise für $words</b></font><br><br>"); 
   $location = "localhost"; // database host (localhost) 
   $username = "xxx"; // mysql username 
   $password = "xxx"; //mysql password 
   $database = "xxx"; //mysql database name 
   $db_table = "MatzeCMS_sites"; // mysql table name to search 
   $mysql_row = "text"; // This is the row in your mysql database that you want to search for text in. 
   $start = (isset($start)) ? abs((int)$start) : 0; 
   $limit = 10;                     // Datensätze pro Ausgabeseite 
   // Feststellen der Anzahl der verfügbaren Datensätze. 
   $resultID = @mysql_query("SELECT COUNT(ID) FROM ".$db_table); 
   $total    = @mysql_result($resultID,0); 
   // Ggf. $start korrigieren (falls Parameter in 
   // der URL manipuliert wurde) 
   $start    = ($start >= $total) ? $total - $limit : $start; 
   $query    = "SELECT * FROM ".$db_table." LIMIT ".$start.",".$limit; 
   $resultID = @mysql_query($query); 

   $conn = mysql_connect("$location","$username","$password"); 
   if (!$conn) die ("Could not connect MySQL"); 
   mysql_select_db($database,$conn) or die ("Could not open database"); 

   $query = "ALTER TABLE $db_table ORDER BY id DESC"; 
   $result = mysql_query($query); // bad coding yes ;) 

   $query = "SELECT * FROM $db_table"; 
   $result = mysql_query($query); 
   $numrows = mysql_num_rows($result); 
   while($row = mysql_fetch_array($result)){ 

   if(preg_match("/$words/i", $row[$mysql_row])) 
   { 

      $rawTitle = ($row[Title]); 
     $rawDeepLink1 = ($row[DeepLink1]); //yes strange variable names. It works so it doesnt matter. 
      $rawDescription = ($row[Description]); //T just grab extra data to be added with the search tool 
      $rawDisplayPrice = ($row[DisplayPrice]); 
      $rawProductCategoryName = ($row[ProductCategoryName]); 
      $rawKeywords = ($row[Keywords]); 
      $rawImg120_url = ($row[Img120_url]); 
      $rawImg_url = ($row[Img_url]); 
      $newnews = preg_replace("/$words/i", "<b><font color=\"red\">$words</font></b>", $row[$mysql_row]); 
      $display = '<h2 font face="tahoma" font-size: 13pt><b><a href=' . $rawDeepLink1 . ' TARGET=_blank TITLE="' . $rawDescription_short . '" STYLE="text-decoration: none">Mehr Infos</a> </font></h2>'; 
          echo($display); 
      $foundcount++; 
   } 
   $totalcount++; 
   } 
if(is_null($foundcount)){$foundcount=0;} 
echo("<font face=\"tahoma\" size=\"3\" color=\"green\"><b>$foundcount Treffer für: $words</b></font>"); 
} 

if ($start > 0) 
{ 
  $newStart = ($start - $limit < 0) ? 0 : ($start-$limit); 
  echo "<a href=".$_SERVER['PHP_SELF']."?start=".$newStart 
      .">&lt;&lt; zurück</a>"; 
} 

if ($start + $limit < $total) 
{ 
  $newStart = $start + $limit; 
  echo " <a href=".$_SERVER['PHP_SELF']."?start=".$newStart 
      .">weiter &gt;&gt;</a>"; 
} 

?>
Schon mal Danke im Vorraus. Ach ja, ich bin ehrlich: da sind etliche Fehler drin. Und vieles, was ich anders machen wollte, einfach nur billig ersetzt.

Gruß
Matze
 
Also du willst nach einem eingegebenen Suchwort in der Tabelle (Spalte title) suchen?

mysql_query(SELECT title WHERE title LIKE '%".$suchWort."%'")

Aber Vorsicht vor MySql-Injection!
 
Genau, und dann den Titel verlinken auf die Seite mit sites.php?id=xx!
Und wie mach ich dass dann?
Außerdem soll ja text durchsucht werden, aber nicht angezeigt werden. Und dann noch das mit den Hits Ich komm da nicht weiter.
Außerdem ist in meinem Code noch ein Fehler.
 
würde sagen

$res = mysql_query(SELECT id, title WHERE title LIKE '%".$suchWort."%'")

einen link zur nächsten seite mit:
while($row = mysql_fetch_array($res))
{
neuseite.php?id=$row[id]
}

und die neue Seite dann etwa so:

$id = 0+$_GET['id'];

Also so in etwa hauts dann :)
 
sicher dass du $res und nicht $result meinst?
Außerdem sieht mein Code so aus: (ist wohl falsch, sehe leere Seite)

PHP:
<font face="tahoma" size="4"> 
<font face="Verdana, Arial, Helvetica, sans-serif"><h3>Suche</h3></font>
</font> 
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post"> 
  <br>
  <font face="Verdana, Arial, Helvetica, sans-serif"> Suchbegriff eingeben
  <input type="text" name="words" value="<?php echo($words); ?>"> 
  <br> 
  <br> 
  <br>
  <input type="hidden" name="good" value="yes"> 
  <input type="submit" value="Suchen"> 
  </font> 
</form> 
<p><font face="Verdana, Arial, Helvetica, sans-serif"><br> 
  <br> 
  <? 
if($_POST['good']=='yes') 
{ 
   echo("<font face=\"tahoma\" size=\"3\" color=\"green\"><b>Ergebniise für $words</b></font><br><br>"); 
   $location = "localhost"; // database host (localhost) 
   $username = "web2s6027sql1"; // mysql username 
   $password = "Matthias"; //mysql password 
   $database = "web2s6027sql1"; //mysql database name 
   $db_table = "MatzeCMS_sites"; // mysql table name to search 
   $mysql_row = "text"; // This is the row in your mysql database that you want to search for text in. 
   $start = (isset($start)) ? abs((int)$start) : 0; 
   $limit = 10;                     // Datensätze pro Ausgabeseite 
   // Feststellen der Anzahl der verfügbaren Datensätze. 
   $resultID = @mysql_query("SELECT COUNT(ID) FROM ".$db_table); 
   $total    = @mysql_result($resultID,0); 
   // Ggf. $start korrigieren (falls Parameter in 
   // der URL manipuliert wurde) 
   $start    = ($start >= $total) ? $total - $limit : $start; 
   $query    = "SELECT * FROM ".$db_table." LIMIT ".$start.",".$limit; 
   $resultID = @mysql_query($query); 
   
   $conn = mysql_connect("$location","$username","$password"); 
   if (!$conn) die ("Could not connect MySQL"); 
   mysql_select_db($database,$conn) or die ("Could not open database"); 

   $query = "ALTER TABLE $db_table ORDER BY id DESC"; 
   $result = mysql_query($query); // bad coding yes ;) 

   $query = "SELECT * FROM $db_table";
   
   $id = 0+$_GET['id'];
   
   $result = mysql_query(SELECT id, title WHERE title LIKE '%".$suchWort."%');  
   $result = mysql_query($query); 
   $numrows = mysql_num_rows($result); 
   while($row = mysql_fetch_array($result))
   {
    sites.php?id=$row[id]
   }
   while($row = mysql_fetch_array($result)){ 

   if(preg_match("/$words/i", $row[$mysql_row])) 
   { 

      $rawTitle = ($row[Title]); 
     $rawDeepLink1 = ($row[DeepLink1]); //yes strange variable names. It works so it doesnt matter. 
      $rawDescription = ($row[Description]); //T just grab extra data to be added with the search tool 
      $rawDisplayPrice = ($row[DisplayPrice]); 
      $rawProductCategoryName = ($row[ProductCategoryName]); 
      $rawKeywords = ($row[Keywords]); 
      $rawImg120_url = ($row[Img120_url]); 
      $rawImg_url = ($row[Img_url]); 
      $newnews = preg_replace("/$words/i", "<b><font color=\"red\">$words</font></b>", $row[$mysql_row]); 
      $display = '<h2 font face="tahoma" font-size: 13pt><b><a href=' . $rawDeepLink1 . ' TARGET=_blank TITLE="' . $rawDescription_short . '" STYLE="text-decoration: none">Mehr Infos</a> </font></h2>'; 
          echo($display); 
      $foundcount++; 
   } 
   $totalcount++; 
   } 
if(is_null($foundcount)){$foundcount=0;} 
echo("<font face=\"tahoma\" size=\"3\" color=\"green\"><b>$foundcount Treffer für: $words</b></font>"); 
} 

if ($start > 0) 
{ 
  $newStart = ($start - $limit < 0) ? 0 : ($start-$limit); 
  echo "<a href=".$_SERVER['PHP_SELF']."?start=".$newStart 
      .">&lt;&lt; zurück</a>"; 
} 

if ($start + $limit < $total) 
{ 
  $newStart = $start + $limit; 
  echo " <a href=".$_SERVER['PHP_SELF']."?start=".$newStart 
      .">weiter &gt;&gt;</a>"; 
} 

?>
Wi müsste der Code richtig sein.
 
Zurück