Tanja: Datenbank durchsuchen

Hallo,

ich habe ein kleines Datenbank Suchscript geschrieben.
Die Suchwörter sollen anschließend im Ergebnis rot markiert werden, aber es werden keine roten Wörter angezeigt?

Wo ist hier der Fehler?

// OK, wir haben etwas
    $search = $_POST['searchfor'];

$verbindung = $_POST['howtosearch'];

$words = explode(" ",$search);

$query = "SELECT * FROM " . $tabellen_name . " WHERE ";
    for ($i=0; $i<count($words); $i++)
    {
        $query .= "( " . $feldname . " like '%" . $words[$i] . "%' ) ";
        if($i<count($words)-1)
        {
            $query .= " " .  $verbindung . " ";
        }
    }

$conid = @mysql_connect($host,$db_user,$db_pass);
    $db = mysql_select_db($db_name,$conid);
    $result = mysql_query($query,$conid);

if(mysql_affected_rows() > 0)
    {
          $num_found = mysql_num_rows($result); //Anzahl der Treffer
          echo 'Ihre Suche war erfolgreich. ' . $num_found . ' Ergebnisse:<br><br>';

for($i = 0; $i < $num_found; $i++)
        {
            $textstring = mysql_result($result,$i);
            $textstring = str_replace($words[$i], "<font color="red"><b>".$words[$i]."</b></font>", $textstring);
            echo $textstring . "<hr>";
          }

  1. Halihallo Tanja

    $textstring = mysql_result($result,$i);
    $textstring = str_replace($words[$i], "<font color="red"><b>".$words[$i]."</b></font>", $textstring);
    echo $textstring . "<hr>";
    }

    Was sagt dir http://www.php.net/mysql_result, was
    mysql_result() für Parameter und Ergebnisse liefert? - Nämlich nicht
    das, was du möchtest...

    Du hast zum einen potenziell mehrere Datensätze und zum anderen
    mehrere Attribute (wegen 'SELECT * ...') die die Anfrage zurück gibt.

    Wenn du also alle Datensätze und alle Attribute ausgeben möchtest,
    musst du auch für alle Datensätze und alle Attribute einen
    str_replace() und eine Ausgabe machen.

    Typischerweise nimmt man für mehrere Datensätze und mehrere Attribute
    jedoch nicht mysql_result(), sondern mysql_fetch_row,
    mysql_fetch_object oder mysql_fetch_assoc, um gleich einen ganzen
    Datensatz als Objekt, Array, assoziatives Array vorliegen zu haben
    und nicht jedes Attribut eines jeden Datensätzes separat auslesen zu
    müssen.

    Viele Grüsse

    Philipp

    1. Hallo!

      Halihallo Tanja

      Es heißt Hallo nicht "Halihallo"

      $textstring = mysql_result($result,$i);
      $textstring = str_replace($words[$i], "<font color="red"><b>".$words[$i]."</b></font>", $textstring);
      echo $textstring . "<hr>";
      }

      Was sagt dir http://www.php.net/mysql_result, was
      mysql_result() für Parameter und Ergebnisse liefert? - Nämlich nicht
      das, was du möchtest...

      doch das möchte ich!

      Du hast zum einen potenziell mehrere Datensätze und zum anderen
      mehrere Attribute (wegen 'SELECT * ...') die die Anfrage zurück gibt.

      Es ist nur ein Testscript deswegen *

      Das was du mir nun sagen willst ist nicht der Fehler der liegt woanders... Aber Du musst es ja wissen!

      1. Halihallo Tanja

        Es ist nur ein Testscript deswegen *
        Das was du mir nun sagen willst ist nicht der Fehler der liegt woanders... Aber Du musst es ja wissen!

        mysql_result($ressource,$datensatz_index,$feld);

        Du schreibst bei dir lediglich mysql_result($ressource,$datensatz_index)
        mysql_result arbeitet lauf Doku auf Attributebene, es gibt dir also
        lediglich das Ergebnisses *eines* Attributs (Feldes) zurück. Ich
        nehme weiterhin an, dass beim Unterlassen von $feld das erste
        Attribut zurückgegeben wird. Bei der Selektion innerhalb des SELECT-
        Statements selektierst du nach verschiedenen Feldern wenn sie auf
        einen Begriff deiner Anfrage zutreffen. Aber ausgegeben wird nur das
        erste Attribut (obwohl mit * alle Attribute der Relation ausgegeben
        werden). Da du sagst, dass keine Wörter rot markiert werden folgere
        ich, dass in der ersten Spalte (erstes Attribut) die entsprechenden
        Wörter eben gar nicht vorkommen (sondern in irgendeinem anderen
        Attribut vorhanden sind, welches du gar nicht ausgibst).

        Visualisieren wir mal etwas:

        test1    test2
        a        b
        c        d
        e        f

        Du suchst nach 'b'. Es wird also der erste Datensatz ausgewählt.
        Dieser wird nun über mysql_result(1) geholt, aber was wird geholt?
        Das erste Attribut: 'test1', also 'a'. Da du nach 'b' gesucht hast,
        wird dir natürlich nichts rot gefärbt...

        Viele Grüsse

        Philipp

        PS: Wandle deine Abneigung mir gegenüber in Dankbarkeit um, sonst
            wandelt sich meine Bitte(r)keit in Abneigung :-)

      2. hi,

        Es heißt Hallo nicht "Halihallo"
        [...]
        Das was du mir nun sagen willst ist nicht der Fehler der liegt woanders... Aber Du musst es ja wissen!

        ja, genauso wie du wissen musst, ob du hier hilfe bekommen, oder mit äußerungen wie oben zitierten die potentiellen helfer vergraulen willst.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  2. yo,

    Wo ist hier der Fehler?

    zum einen würde ich mir mal die variable $query ausgeben lassen, nachdem du sie in der schleife gebildet hast. so ist es schwer zu sagen, ob es einen fehler innerhalb der query gibt.

    if(mysql_affected_rows() > 0)

    diese funktion basiert auf DML befehle, sprich updates, inserts und deletes nicht aber auch select abfragen. dafür ist mysql_num_rows zuständig, dass du auch weiter unten benutzt.

    Ilja