Dennel: Datenbank durchsuchen "Suchscript"

Hallo ,
ich habe mir ein kleines Suchscript nach einem Tutorial gebastelt. Es funktioniert auch alles soweit. Das HTML interface übergibt die Variable $suche an das PHP Script nachdem gesucht werden soll. Anschl. werden alle Spalten ausgegeben worin das Suchwort vor kommt.

Und genau da liegt mein Problem - es sollen eben nich alle spalten ausgegeben werden sondern nur die tabellen "artikel" & "beschreibung" ... leider reichen dafür meine PHP kenntnisse noch nicht aus da ich es erst gerade erlerne und nach 2 Tage langen rumtesten macht sich frust und unmut bei mir breit :( Wäre wirklich nett von euch wenn ihr mir nen paar tips geben könntet wo ich genau ansetzen muss.

Hier mein Script :

<?php
$table = "artikel";
function seek_table ($table, $suche) {
   $q = mysql_query ('show fields from '.$table)
         or print ">>> MySQL-Error: ".mysql_errno()." -> ".mysql_error()."<br>\n";
   $fields = array();
   while ($x = mysql_fetch_array($q)) {
      $fields[] = $x['Field'];
   }
   mysql_free_result ($q);
   $result = array();
   for ($i=0; $i<count($fields); $i++) {
      if ('id'!=($col=$fields[$i])) {

$query ="select * from artikel where artikel like '%$suche%' or stichworte like '%$suche%'";

$q = mysql_query($query)
               or print ">>> MySQL-Error: ".mysql_errno()." -> ".mysql_error()."<br>\n";
         if ($q) {
            while ($x = mysql_fetch_array($q)) {
               $result[$x['id']] = $x;
            }
            mysql_free_result ($q);
         }
      }
   }
   ksort ($result);
   return ($result);
}
if ($suche) {
   $ergebnis = seek_table($table, $suche);

if ($anz=count($ergebnis)) {

echo "<p>Ihre Suche nach dem Stichwort "$suche" ergab $anz Treffer:<p><hr><p>";

foreach($ergebnis as $zeile) {
         while (list($k, $v) = each($zeile)) { // $k = Schlüsselbegriff, $v = Inhalt
            $i++;
            if ($i%2 == 0 && $k != "id") {
               if ($k == "name") {
               $v = "<b>$v</b>";
               }
               if ($v != "") {
               print "$v<br><p>\n";
            }
            }
         }
      }
   } else {
echo "<td height="5" valign="top" style="padding: 6;">";
   }
}
?>

  1. hi,

    Und genau da liegt mein Problem - es sollen eben nich alle spalten ausgegeben werden sondern nur die tabellen "artikel" & "beschreibung" ... leider reichen dafür meine PHP kenntnisse noch nicht aus

    dann solltest du gleich nur die diese beiden benötigten spalten von aus der tabelle selektieren, anstatt SELECT * zu machen (was du ja soieso nicht solltest, siehe http://dclp-faq.de/q/q-sql-select.html).

    $query ="select * from artikel where artikel like '%$suche%' or stichworte like '%$suche%'";

    $query ="select artikel, stichworte from artikel where artikel like '%$suche%' or stichworte like '%$suche%'";

    btw: als tabellen- und als spaltennamen artikel zu verwenden, halte ich für ungünstig - führt leicht zu verwirrung.

    gruss,
    wahsaga

    1. Danke @ wahsaga

      ist schon echt lustig ... da sitz ich da und fummel an dem Script 2 Tage rum ohne erfolg :( - und dann ist es doch letztendlich nur eine dumme codezeile argh :D Naja ich werds noch lernen.

      Ok nun ist es ja soweit i.o. nur gibt er mir auch gleich die Stichworte mit aus, was er eigentlich nicht soll da sie ja eben nur stichworte sind die, die suche erleichtern sollen. Dort stehen z.b. Artikelnummern u. andere Schreibweisen des Produkts.

      Die Ausgabe wird doch von diesem Codeabschnitt bewirkt oder sehe ich das falsch ?! Es muss doch da ne möglichkeit geben das er die tabelle "Stichworte" zwar durchsucht aber eben nicht mit ausgibt ?!

      $q = mysql_query($query)
                     or print ">>> MySQL-Error: ".mysql_errno()." -> ".mysql_error()."<br>\n";
               if ($q) {
                  while ($x = mysql_fetch_array($q)) {
                     $result[$x['id']] = $x;
                  }
                  mysql_free_result ($q);

      wäre cool wenn ihr mir nen tipp geben könntet wie ich sowas noch gebacken bekomme :)

      1. ach quatsch ... das wird die Zeile sein wo das Ergebniss ausgegeben wird, vermute ich mal

        foreach($ergebnis as $zeile) {
                 while (list($k, $v) = each($zeile)) { // $k = Schlüsselbegriff, $v = Inhalt
                    $i++;
                    if ($i%2 == 0 && $k != "id") {
                       if ($k == "name") {
                       $v = "<b>$v</b>";
                       }
                       if ($v != "") {
                       print "$v<br><p>\n";