db_query in einer while schleife

DerBär

Erfahrenes Mitglied
Hallo Leutz.
Hab folgendes Probelm.
Würde gerne meine DB durch suchen was eigendlich kein Prob ist.
Die sache ist die. Es geht um ein Forum
Ich habe 2 tables
Im table "topic" werden die Themen gelistet
Im table "thread" werden die dazugehörigen Beiträge eingetragen.
So weit so gu.
Jetzt würde ich gerne mit einer Suchfunktion den table "thread" durchsuchen und wen es einen Treffer gibt eben die mit der gefunden
topic_id dann einen neuen query machen.
Eigendlich so oder so in der Art wie hier in diesem Forum.
Mein Code sieht so aus
PHP:
$table="thread";
$result=mysql_db_query($db,"select topic_id form $table where titel or thema like '%$suchbegriff%'");
while($top=mysql_fetch_row($result)){
if(!empty($top[0])){
$table="topic";
$erge=mysql_db_query($db,"select * from $table where id ='$top[0]'");
$ausgabe=mysql_fetch_row($erge);
echo$ausgabe[1]." ".$ausgabe[2];
mysql_free_result($erge);
}
else{
$fehler="Leider kein Eintrag zu Deinem Suchbegriff ".$suchbegriff."  gefunden";
echo$fehler;
}
mysql_free_result($result);
}

Nur des durt nett so wie ich das will.Parse error
Geht das überhaupt oder Irgendwo Fehler im Code
 
umhh.. also ich bin mir nicht sicher.. aber ich denke mir die parse-errors kommen daher, weil du die "\" vergessen hast.. zb.

Code:
fehler="Leider kein Eintrag zu Deinem Suchbegriff \".$suchbegriff.\"  gefunden";

aber bin mir nicht sicher. :-)
 
leider nein.
die anführungszeichen sind bewußt nicht escapte.
müßte ja auch mit
PHP:
$fehler="Leider kein Eintrag zu Deinem Suchbegriff $suchbegriff  gefunden";
klappen.
auserdem kommt mein script gar net soweit.
den parse error habe ich in der zeile wo
eigendlich die ausgabe sein sollte.
 
"select * from $table where id ='$top[0]'")

Ich bin zwar gerade erst dabei, PHP und mySQL zu lernen, aber ASP und SQL machen ja irgendwo das gleiche...

Also, ein ID-Feld sollte doch eigentlich int sein, oder? Unter SQL setzt man das deswegen nicht in '', da das ein string wäre. Ist ja bei mySQL auch so, soviel ich weiß...
Sowas kann durchaus zu nem Problem führen...
Und außerdem hast du kein Errorhandling bei ausgabe[]
Es könnte ja sein, dass das Ergebnis der zweiten Abfrage leer ist, und dann wirds schwer, da was auszugeben...

Sind nur Vermutungen, aber vielleicht hilfts...

Versuchs doch mal mit nem schrittweise rantasten...
zB:

$id = $top[0]
$erge=mysql_db_query($db,"select * from topic where id = $id ");
$ausgabe=mysql_fetch_row($erge);
if ($ausgabe != ''){
echo $ausgabe[1]." ".$ausgabe[2];
}
 
Hmmm auch schon mal versucht.
da krieg ich dann lustiger Weise einen mysql error


Errorhandling hab ich nur hab ich das da jetzt net mit reingetippt.

Mein prop ist das er ja net nix ausgibt sondern eben den parse error.
Hast Du vielleicht noch eine Idee
 
So habs hinbekommen.
Für Interresierte hier der Code
PHP:
 <?php
$ausgabe="";
$fehler="Bitte gib Deinen Suchbegriff ein";	
	
	if($suche){
	db_connect();
	
	$table="thread";
	
	if(!$result=mysql_db_query($db,"SELECT nummer FROM $table where text like '%$suchbegriff%' or thema like '%$suchbegriff%' group by nummer")){
	$fehler="Die Verbindung zur Datenbank konnte nicht aufgebaut werden";
	}
		else {
		$ok=mysql_num_rows($result);
		if($ok==0){
		$fehler="Es wurden leider keine Beitr&auml;ge wurden zu Deinem Suchbegriff <i>\"$suchbegriff\"</i> gefunden";
		}
		else{
		while($test=mysql_fetch_row($result))
		{
		
		$tablefor="forum";
		if(!$ergeb=mysql_db_query($db,"SELECT * FROM $tablefor Where id='$test[0]'")){
		$fehler="Die Verbindung zur Datenbank konnte nicht aufgebaut werden";
		}
		else{
		$fehler="Folgende Beitr&auml;ge wurden zu Deinem Suchbegriff <i>\"$suchbegriff\"</i> gefunden";
		$row=mysql_fetch_row($ergeb);
		
		$ausgabe="<tr><td><a href=beitraglesen.php?beitrag=".$row[0].">".$row[3]."</a></td><td><a href=meet_member.php?autor=".$row[1].">".$row[1]."</a></td><td align=\"center\">".$row[7]."</td><td>".$row[2]."<br>".$row[6]." <b><a href=meet_member.php?autor=".$row[5].">".$row[5]."</a></b></td></tr>";
		mysql_free_result($ergeb);
		
  	 			}
  			

			}			 
mysql_free_result($result);
  		}	
	}	

}
?>
 
Zurück