mehrere MySQL queries in einer foreach Schleife - Problem !

userjules

Mitglied
Hallo zusammen,

ich möchte in einer Suche alle Einträge in verschiedenen Tabellen finden, die dem jeweiligen Wert eines Arrayeintrags entsprechen. Hintergrund: Anhand einer Blacklist sollen Begriffe in Beiträgen gefunden und der Beitrag gelöscht werden.

Irgendetwas scheint aber nicht richtig zu sein. Abhängig von der Reihenfolge der Arrayeinträge fällt das Suchergebnis unterschiedlich aus. Das sollte aber nicht so sein !

Vielleicht erkennt hier jemand den Fehler !? Ich tüftel schon seit Stunden daran herum.

Die Begriffe stammen aus einer Textarea. Pro Zeile steht darin ein Begriff. Das Array entsteht wie folgt:

PHP:
$words = explode("\n", $content);
// $content entspricht dem Inhalt der Textarea

Es entsthet also pro Zeile ein Arrayeintrag. Der Rest des Codes ...

PHP:
$i = '0';

foreach ($words as $word) {
	
  echo "<br /><span class='green'>Searching for $words[$i] ...<br /><br /></span>";
	
  // KOMMENTARE FINDEN	
  $sql1="SELECT comment_id, text FROM comment_text WHERE text LIKE '%" . mysql_real_escape_string($word) . "%'";
  //-run  the query against the mysql query function
  $result1=mysql_query($sql1);
  $i2 = '0';
  //-create  while loop and loop through result set
  while($row1=mysql_fetch_array($result1)){
	  echo "<span class='red'>".substr($row1['text'], 0, 30)."</span><br />comment query run...<br />";
	  $i2++;
  }
  echo "<br />$i2 Results for comment text query<br /><br />";
  
  // EVENTS FINDEN
  $sql2="SELECT event_id, description FROM event_text WHERE description LIKE '%" . mysql_real_escape_string($word) . "%'";
  //-run  the query against the mysql query function
  $result2=mysql_query($sql2);
  $i2 = '0';
  //-create  while loop and loop through result set
  while($row2=mysql_fetch_array($result2)){
	  echo "<span class='red'>".substr($row2['description'], 0, 30)."</span><br />event query run...<br />";
	  $i2++;
  }
  echo "<br />$i2 Results for event text query<br /><br />";
  
  // EVENT TITEL FINDEN
  $sql3="SELECT event_id, title FROM event WHERE title LIKE '%" . mysql_real_escape_string($word) . "%'";
  //-run  the query against the mysql query function
  $result3=mysql_query($sql3);
  $i2 = '0';
  //-create  while loop and loop through result set
  while($row3=mysql_fetch_array($result3)){
	  echo "<span class='red'>".substr($row3['title'], 0, 30)."</span><br />event title query run...<br />";
	  $i2++;
  }
  echo "<br />$i2 Results for event title query<br /><br />";
  
  $i++;

}

Danke euch im Voraus !
 
Zuletzt bearbeitet:
Hi,

versuch mal dein $i's nicht als Strings zu definieren, sonderns als richtige Zahlen: $i = 0;.
Ich denke das könnte schon helfen.

Aus deinem Code kann ich nur erkennen, dass du dir nur die Anzahl der passenden Einträge holst und zur Kontrolle den jeweiligen Text. Das könntest du auch mit einem mysql_num_rows($sql) machen.

Grüße aGeNET
 
Hallo,

erstmal danke für deine Antwort ! Ich bin deinem Vorschlag nachgekommen und hab mal bei allen $i='0' die Anführungszeichen weggelassen. Leider hat das auch keine Verbesserung gebracht. Ich vermute meinen Fehler früher.
Meine blacklist.txt wird eingelesen und mit ...
PHP:
$words = explode("\n", $content);
... in das $words-Array zerlegt. Wenn ich die Reihenfolge der Begriffe in der Liste ändere, ändert sich das Suchergebnis. Naheliegend ist doch, das mit meinem explode() etwas nicht stimmt - oder nicht ?

Die blacklist.txt enthält wie bereits erwähnt, einen Begriff pro Zeile. Zum Beispiel:

Code:
porn
sex
other SPAM

Noch ne Idee ? Danke !
 
Ich bin mir nicht ganz sicher, aber die Zeilenumbrüche bei Textareas bestehen glaube ich aus "\r\n"s.
Code:
$words = preg_split("/(\\r\\n)/", $content);
sollte helfen und besser funktionieren.

Grüße
 
Zurück