Beiträge anzeigen

Hallo,
ich möchte gerne Beiträge zu einem Tehma aus einer Datenbank anzeigen lassen, das funktioniert auch ganz gut, mit den Einträgen, die ich manuell in die Datenbank eintrug, nicht aber mit denen, die man mithilfe der Website eingetragen hat(Sprich Beitrag schreiben), obwohl der Beitrag ordnungsgemäß eingetragen wurde.Selbst testen?hier Benutzername: Test Passwort: Test

Zeige_Thema.php:


<html>
<head>
<title>
Schulforum
</title>
</head>
<body>
<?php
$i = 0;
$thema =$_GET['thema'];
$user =$_GET['user'];
$beitrag;
$autor;
$datum;
mysql_connect("***********", "***********", "*********");
mysql_select_db("***********");
$auslese = mysql_query("SELECT * FROM Forum_Beitraege WHERE Thema = '".$thema."'");
if($auslese != null){
while($row = mysql_fetch_object($auslese)){
$beitrag[$i] = $row ->Beitrag;
$autor[$i]   = $row ->Autor;
$datum[$i]   = $row->Datum;
$i++;
}

}
else{ echo(mysql_error()."<br>Nix geladen");}
echo("<table BORDER WDTH = 100%>");
for($f=0; $f <= count($beitrag) -1;  $f++){
echo("<tr><td>".$autor[$f]."<br><br>".$datum[$f]."</td><td>".$beitrag[$f]."</td></tr>");
}
echo("</table>
<br><br>");
if($user != null){
$idn = (String) count($beitrag) +1;
echo("<a href =\"Beitrag_Schreiben.php?name=".$user."&thema=".$thema."&id=".$idn."\">Antworten</a>");
}
?>
</body>
</html>

Beitrag_Schreiben.php:


<html>
<head>
<title>
Schulforum
</title>
</head>
<body>
<?php
$name = $_GET['name'];
$thema = $_GET['thema'];
$id = $_GET['id'];
    
    echo("<form method=\"post\"action=\"Forum_4.php\">
    <textarea name=\"Beitrag\" cols=\"50\" rows=\"20\"></textarea>
    <input type =\"hidden\" name=\"Name\" value = \" ".$name."\">
    <input type =\"hidden\" name=\"Thema\" value = \" ".$thema." \">
    <input type =\"hidden\" name=\"ID\" value = \" ".$id."\">
    <input type=\"submit\" name=\"Antworten\" value=\"Antworten\">
    </form>");
    

?>
</body>
</html>

Forum_4.php:


<html>
<head>
<title>
Schulforum
</title>
</head>
<body>
<?php
mysql_connect("***********", "***********", "*********");
mysql_select_db("***********");
$datum = date("d.m.Y");
$beitrag = $_POST['Beitrag'];
$name = $_POST['Name'];
$thema = $_POST['Thema'];
$id = $_POST['ID'];
 print_r($_POST);
 echo($beitrag);
if($beitrag != null){
    mysql_query("INSERT INTO Forum_Beitraege (Thema, Autor, Datum, Beitrag, ID) VALUES ('".$thema."', '".$name."', '".$datum."', '".$beitrag."', '".$id."')");
    echo("Beitrag gepostet.<br><a href=\"Zeige_Thema.php?thema=".$thema."&user=".$name."\">Zurück zum Thema</a>");
}else{echo("Fehler");}
?>
</body>
</html>

Hast du mal in die DB geschaut was eingetragen wurde? Mindestens ein Feld sollte ja dann nicht richtig gefüllt worden sein - oder enthält falsche Informationen.

Ja, da war ein Leerzeichen dahinter, dort wo thema steht, hab weggemacht, hat funktioniert, aber woran liegt das Leerzeichen?

und schon haben wir den Übeltäter:

<input type =\"hidden\" name=\"Thema\" value = \" ".$thema." \">

sollte soetwas ergeben:

<input type ="hidden" name="Thema" value=" WERT_VON_THEMA" />

Daher kommt dein Leerzeichen. Solch eine Geschichte könntest du notfalls noch mithilfe von trim(string) abfangen. (Doku: Php:trim - Manual)

Funktioniert jetzt, danke für die schnelle Hilfe.Manchmal denk ich mir echt, ich bin sooo blind…

Keine Ursache und nimms gleich als Erfahrung mit: Bevor du mit Werten arbeitest, prüfe diese vorher mindestens grob. Ach ja: und Werte schreibt man übrigens besser mit PreparedStatements in die Datenbank und nicht über selbst gebaute inserts. Dein Code ist anfällig für SQL-Injection.

Anmerkung: ich habe das Thema dann mal für dich als “gelöst” markiert