Problem mit automatischem Austausch in Text

Culifax

Grünschnabel
Ich habe folgendes Problem.

Ich habe zwei Tabellen. In der einen befindet sich der Text und in der anderen verschiedene Personen. Nun möchte ich das bei der Ausgabe verglichen wird ob in dem Text eine Person vorkommt die sich auch in der Tabelle mit den Personen befindet. Wenn dem so ist soll der Name im Text durch einen Link ausgetauscht werden.

Nun habe ich folgendes Problem. Soweit klappt das auch, nur wird leider nur die erste gefundene Person in der Tabelle[Person] im Text ausgetauscht auch wenn im Text selber mehrere Personen sind, die eigentlich auch in der Tabelle [Person] ist.

Hier der Quellcode:

PHP:
<?php

$dbcnx = mysql_connect("$host", "$user", "$passwort");
mysql_select_db("$datenbank");

$result = @mysql_query("SELECT * FROM hefte  WHERE (link='$link')");

$result2 = @mysql_query("SELECT * FROM lexikon");

if (!$result) {
echo("Fehler beim Abruf der Daten aus der Datenbank!");
exit();
}
while ($row = mysql_fetch_array($result) AND $row2 = mysql_fetch_array($result2)) {

$vari = "$row[inhalt]";
$array_1 = array("$row2[name]");
$array_2 = array("<a href='$row2[link].html'>$row2[name]</a>");


for($x=0;$x<200;$x++){

  $vari = str_replace($array_1[$x],$array_2[$x],$vari);
}

echo str_replace(" "," ",$vari); 

}
?>

Wie bekomme ich es hin, das alle Namen im Text ausgetauscht werden, und nicht nur der erste gefundene?
 
hab jetzt erst einmal nur dein script überflogen.

grundsätzlich solltest du um fehler zu finden diese auch ausgeben lassen:

dazu vor mysql_query das @ entfernen

und error_reporting(E_ALL); setzen

Das esrt einmal als kleiner Tip von mir. Meistens kann man dadurch schon Fehler finden.

Weitere Fehler:

PHP:
$result = @mysql_query("SELECT * FROM hefte  WHERE (link='$link')");

Eine Klammer am Ende zuviel
 
Zuletzt bearbeitet:
Das nächste:

PHP:
$vari = "$row[inhalt]";

Schreibe besser:

PHP:
$vari = $row['inhalt'];

Danach verstehe ich Deinen restlichen Code nicht mehr. Woher kommt überhaupt $link in der ersten mysql_query ?

Was wird denn dort übergeben?
 
Äh, wo ist den da eine Klammer zuviel?

PHP:
$result = @mysql_query("SELECT * FROM hefte  WHERE (link='$link')");

ein Klammer stammt von

PHP:
$result = @mysql_query("SELECT * FROM hefte");

und die andere von

PHP:
WHERE (link='$link')
 
Danach verstehe ich Deinen restlichen Code nicht mehr. Woher kommt überhaupt $link in der ersten mysql_query ?

Der wird per url übergeben, ist aber bei dem Problem eher nebensächtlich.
 
Das da was nicht stimmt zeigen auch schon die Farben

Schreibe besser:
PHP:
$result = mysql_query("SELECT * FROM hefte  WHERE link='$link'");

Aber die Hauptfrage bleibt noch, woher er $link bekommt?
 
Original geschrieben von RaverHH
Aber die Hauptfrage bleibt noch, woher er $link bekommt?

Wie gesagt $link ist völlig nebensächlich. Aber gut. Auf einer Übersichtsseite werden alle Daten aus der Datenbank aufgelistet, wenn man dort auf einen Eintrag klickt kommt man auf die Detail-Seite (die ich oben geposted habe).

$link ist also im grunde wie $id (detail.php?link=1)


Und wenn ich den Tipp mit Schreibe besser:

PHP:
$vari = $row['inhalt'];

Erhalte ich folgende Fehlermeldung:

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\apache\htdocs\mosaik\detail.php on line 28
 
Versuche dieses mal
PHP:
$result = mysql_query("SELECT inhalt FROM hefte  WHERE link='$link'"); 
$result2 = mysql_query("SELECT name,link FROM lexikon"); 

if (!$result) { 
echo("Fehler beim Abruf der Daten aus der Datenbank!"); 
exit(); 
} 
while ($row = mysql_fetch_array($result)){
 $vari = $row['inhalt'];
 $i=0;
      while($row2 = mysql_fetch_array($result2)) { 

          $array_1[$i] = $row2['name']; 
          $array_2[$i] = '<a href="'.$row2['link'].'.html">'.$row2['name'].'</a>'; 
           $i++;
       }
for($x=0;$x<count($array_1);$x++){ 

  $vari = str_replace($array_1[$x],$array_2[$x],$vari); 
} 
echo $vari; 
}
 
Weist Du jetzt auch, wo Dei Problem lag?

Es war Deine while Schleife.

PHP:
while ($row = mysql_fetch_array($result) AND $row2 = mysql_fetch_array($result2))

Damit liest Du den ersten Text (inhalt) ein, um Ihn zu verarbeiten, aber auch nur den erste Namen der zweiten Abfrage, anstatt alle Namen, so wie Du es wolltest.
 
Zurück