Problem mit Zeilenumbruch in der MySQL
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
ausgabe
code
date
datum
eintrag
eintragen
email
ergebnis
grundlage
http
kategorie
meinung
ordern
satz
senden
tag
text
uhr
url
-
Habe mir eben mal was programmiert wo man seine tag/meinung">Meinung abgeben kann aber wenn man dann einen Zeilenumbruch reinmacht wird der dann nicht ausgegeben. Der Satz wo einen Zeilenumbruch hat wird trotzdem in einer Zeile ausgegeben und nicht in 2 wie es sich eig. gehört.
<?php include ("config.php"); $kategorie = "boehseonkelz"; echo "<table align=\"center\">"; $abfrage = "SELECT * FROM meinungen WHERE kategorie = '$kategorie' ORDER BY datum"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $name = $row->name; $email = $row->email; $tag = $row->datum; $datum = date("d.m.Y ", $tag); $uhr = date("H:i", $tag); $meinung = $row->meinung; echo " <tr>"; echo " <td>$name</td>"; echo " <td>schriebt am $datum um $uhr:</td>"; echo " <td valign=\"top\">$meinung</td>"; echo " </tr>"; } echo "</table>"; echo "<br />"; echo "<br />"; echo "<br />"; if($_POST) { $name = $_POST['name']; $email = $_POST['email']; $meinung = $_POST['meinung']; $ip = $_SERVER['REMOTE_ADDR']; $datum = time(); if($name==""OR$email==""OR$meinung=="") { ?> Du musst alle Felder ausfüllen. <a href="<? $_SERVER['PHP_SELF']?>">Zurück</a> <? } else { $eintrag = "INSERT INTO meinungen (name, email, meinung, kategorie, ip, datum) VALUES ('$name', '$email', '$meinung', '$kategorie', '$ip', '$datum')"; $eintragen = mysql_query($eintrag); if($eintragen==true) { ?> Deine Meinung wurde erfolgreich eingetragen. <a href=" <? $_SERVER['PHP_SELF'] ?>">Zurück</a> <? # email senden } else { ?> Es gab irgendwo einen Fehler. Versuche es bitte noch einmal. <a href=" <? $_SERVER['PHP_SELF'] ?>">Zurück</a> <? } } } else { ?> <table align="center"> <tr> <td> <form action="<? $_SERVER['PHP_SELF']?>" Method="post" name="Beitrag"> <table align="center"> <tr> <td><span style="font-family:Arial; color:#00CD00;"><b>Name:</b></span></td> <td><input name="name" size="40"></td> </tr> <tr> <td><span style="font-family:Arial; color:#00CD00;"><b>E-Mail:</b></span></td> <td><input name="email" size="40"></td> </tr> <tr> <td></td> <td></td> </tr> <tr> <td><span style="font-family:Arial; color:#00CD00;"><b>Deine Meinung:</b></span></td> <td><textarea name="meinung" cols="35" rows="10" wrap="physical"></textarea><br></td> <td></td> </tr> <tr> <td w> <input type="submit" value="Eintragen"> </td> </tr> </table> </form> <? } ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also Dein Script macht kein Sinn... ich zeig Dir mal ebend was der PHP-Parser von Deinem Script sieht:
include ("config.php"); $kategorie = "boehseonkelz"; echo "<table align=\"center\">"; $abfrage = "SELECT * FROM meinungen WHERE kategorie = '$kategorie' ORDER BY datum"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $name = $row->name; $email = $row->email; $tag = $row->datum; $datum = date("d.m.Y ", $tag); $uhr = date("H:i", $tag); $meinung = $row->meinung; echo " <tr>"; echo " <td>$name</td>"; echo " <td>schriebt am $datum um $uhr:</td>"; echo " <td valign=\"top\">$meinung</td>"; echo " </tr>"; } echo "</table>"; echo "<br />"; echo "<br />"; echo "<br />"; if($_POST) { $name = $_POST['name']; $email = $_POST['email']; $meinung = $_POST['meinung']; $ip = $_SERVER['REMOTE_ADDR']; $datum = time(); if($name==""OR$email==""OR$meinung=="") { } else { $eintrag = "INSERT INTO meinungen (name, email, meinung, kategorie, ip, datum) VALUES ('$name', '$email', '$meinung', '$kategorie', '$ip', '$datum')"; $eintragen = mysql_query($eintrag); if($eintragen==true) { # email senden } else { } } } else { } ?>
Fällt dir da was auf? Wenn nicht, hier der Teil, den der Browser bei jedem aufrufen zu sehen bekommt... unabhängig davon was der Script erzeugt:
Du musst alle Felder ausfüllen. <a href="">Zurück</a> Deine Meinung wurde erfolgreich eingetragen. <a href=" ">Zurück</a> Es gab irgendwo einen Fehler. Versuche es bitte noch einmal. <a href=" ">Zurück</a> <table align="center"> <tr> <td> <form action="<? $_SERVER['PHP_SELF']?>" Method="post" name="Beitrag"> <table align="center"> <tr> <td><span style="font-family:Arial; color:#00CD00;"><b>Name:</b></span></td> <td><input name="name" size="40"></td> </tr> <tr> <td><span style="font-family:Arial; color:#00CD00;"><b>E-Mail:</b></span></td> <td><input name="email" size="40"></td> </tr> <tr> <td></td> <td></td> </tr> <tr> <td><span style="font-family:Arial; color:#00CD00;"><b>Deine Meinung:</b></span></td> <td><textarea name="meinung" cols="35" rows="10" wrap="physical"></textarea><br></td> <td></td> </tr> <tr> <td w> <input type="submit" value="Eintragen"> </td> </tr> </table> </form>
Fällt Dir jetzt was auf? Immer noch nicht? Dann folge diesem Link, befolge die Anweisungen und versuch es nochmal ;)
PS: Ich weiß, das ist gemein, aber so bin ich nun mal :P
Beitrag zuletzt geändert: 30.7.2009 0:29:40 von strange -
Deine Antwort hat mich echt kein stück weiter gebracht ey
-
Schau Dir einfach diesen Part des Codes noch einmal richtig an:
include ("config.php"); $kategorie = "boehseonkelz"; echo "<table align=\"center\">"; $abfrage = "SELECT * FROM meinungen WHERE kategorie = '$kategorie' ORDER BY datum"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $name = $row->name; $email = $row->email; $tag = $row->datum; $datum = date("d.m.Y ", $tag); $uhr = date("H:i", $tag); $meinung = $row->meinung; echo " <tr>"; echo " <td>$name</td>"; echo " <td>schriebt am $datum um $uhr:</td>"; echo " <td valign=\"top\">$meinung</td>"; echo " </tr>"; } echo "</table>"; echo "<br />"; echo "<br />"; echo "<br />"; if($_POST) { $name = $_POST['name']; $email = $_POST['email']; $meinung = $_POST['meinung']; $ip = $_SERVER['REMOTE_ADDR']; $datum = time(); if($name==""OR$email==""OR$meinung=="") { } else { $eintrag = "INSERT INTO meinungen (name, email, meinung, kategorie, ip, datum) VALUES ('$name', '$email', '$meinung', '$kategorie', '$ip', '$datum')"; $eintragen = mysql_query($eintrag); if($eintragen==true) { # email senden } else { } } } else { } ?>
Dir wird auffallen das im Prinzip immer wieder das selbe passieren wird... nähmlich das alles was außerhalb von <?php und ?> ist, immer angezeigt wird, egal was im PHP Part passiert. Sprich viele deiner if/else Abfragen sind einfach nutzlos, da sie eh nichts an der Ausgabe ändern.
Deswegen habe ich Dir auch einen Link gegeben, damit Du dir PHP-Grundlagen einmal richtig lernst. Dann brauchst Du auch nicht solche komischen Sachen mehr fragen, ey! -
danach hab ich auch gar net gefragt. Hab danach gefragt warum die MySQL ausgabe nicht richtig ausgegeben wird.
Also nach einmal: Wenn jemand einen Satz schreibt und irgendwann in dem Satz auf die Enter Tastedrückt das er in der nächsten Zeile ist und warum das dann in der ausgabe alles in der gleichen Zeile ausgegeben wird. -
Wenn Du die Grundlagen kennen würdest, dann wäre das kein Problem... aber ich kaue Dir das mal gerne vor, da Du offensichtlich nicht dazu bereit bist selbst zu denken:
while($row = mysql_fetch_object($ergebnis)) { echo "<tr>\n<td>".$row->name."</td>\n<td>schriebt am ".date("d.m.Y ", $row->datum)." um ".date("H:i", $row->datum).":</td>\n<td valign=\"top\">".$row->meinung."</td>\n</tr>\n"; }
\n == Zeilenumbruch im Quellcode -
Erm strange,
du erzählst hier gerade kompletten Boolshit, vonwegen dessen, was der Parser angeblich sieht und was nicht. . . Bevor man anderen vorhält, sie würden die Basics nicht kennen, sollte man erst vor der eigenen Haustür kehren.
Das was der Junge macht funktioniert schon. Folgendes läuft ohne Probleme
<? if ($meaningoflive == 42) { ?> Hier ist HTML-Text. <? } else { ?> Hier ist anderer HTML-Text. <? } ?>
Ist zwar nicht schön, aber selten und läuft.
EDIT: BACK TO TOPIC:
website, ersetze dein \n durch <br> und du hast den Zeilenumbruch.
Beitrag zuletzt geändert: 30.7.2009 2:49:04 von census -
@census: Das ist aber unlogisch, da der PHP-Parser nur die Elemente inerhalb von <?php und ?> sehen kann... somit wird alles was außerhalb von den PHP Tags geschrieben wird vom Parser ignoriert und einfach ausgegeben, egal was beim Script passiert.
-
Dann schau dir mal http://census.lima-city.de/mol.php an. Da kommt nur eine Ausgabe und nicht zwei.
Das ist folgender Sourcecode:
<? $meaningoflive=42; if ($meaningoflive == 42) { ?> Hier ist HTML-Text. <? } else { ?> Hier ist anderer HTML-Text. <? } ?>
EDIT: Wenn du zugibst, dass das funktioniert, kann ich dir auch gerne sagen warum.
Beitrag zuletzt geändert: 30.7.2009 2:52:08 von census -
Ist zwar völlig unlogisch, aber egal.
-
Das ist nicht unlogisch. Wenn man weiß, wie php die Scripte abarbeitet ist das logisch. Aber erstmal sinnlos auf website-as-of rumknüppeln.
-
@ census sry aber irgendwie check ich das nicht.
@ strange: Habe ma deinen Code ausprobiert aber komischerweise wird das immer noch so angezeigt wie ich das nicht haben will:
http://website-of-as.lima-city.de/Unbenannt2.jpg So sollte es nicht aussehen.
Und in der Mysql wird das alles schön untereinander so wie ich das eig. haben will.
Ich will das so haben das das so angezeigt wird un net wie auf dem ersten bild:
http://website-of-as.lima-city.de/Unbenannt3.jpg -
HTML interpretiert alle "weißen" Zeichen (also u.a. space, \t, \r, \n) als einfache Leerzeichen.
Um einen Zeichenumbruch in HTML zu erzielen, musst du <br> nutzen.
Nimm das, was aus der DB rauskommt, ersetze alle "\n" (oder "\r\n", falls Windowswelt) durch "<br>" und du solltest wunderschöne Zeilenumbrüche haben. -
Das weiß ich ja mit dem <br> Aber ich möchte das so haben das des gleich richtig ausgegeben wird ohne das man des da noch einfügen muss weil sonst is des voll doof ey. Ich möchte das des so das des ausgetragen wird wie es eingetragen worden ist ohne extra da noch was umzuändern
-
Dann willst Du also die Ausgabe in verschiedenen Reihen haben, dann müsst natürlich auch die richtigen Tags setzen:
while($row = mysql_fetch_object($ergebnis)) { echo "<tr>\n<td>".$row->name."</td>\n</tr>\n<tr>\n<td>schriebt am ".date("d.m.Y ", $row->datum)." um ".date("H:i", $row->datum).":</td>\n</tr>\n<tr>\n<td valign=\"top\">".$row->meinung."</td>\n</tr>\n"; }
-
Dann musst du mit dem W3C-Konsortium reden und darum bitten, den HTML-Standard zu ändern.
Oder du machst einfach folgendes:
$meinung = ??? // Das ist der String der aus Mysql kommt
echo "Das ist deine Meinung: " . str_replace ("\n", "<br>", $meinung);
Aber wenn du eh alles "so wie es reingeht" auch ausgeben willst, bist du das perfekte Opfer für HTML- oder SQL-Injections. . . -
@census: Schon mal was von nl2br($string) gehört? str_replace() ist da nicht wirklich das richtige, wenn man \n zu <br /> ändern will.
-
Aha, und warum ist str_replace nicht das richtige, wenn es auch alle \n durch <br> ersetzt? . . . *kopfschüttel*
EDIT: @website: Grüße nach Jossgrund, ich bin selber Franke.
Beitrag zuletzt geändert: 30.7.2009 3:19:37 von census -
Vergleiche einfach mal nl2br($str) und str_replace('\n', '<br />', $str)... was fällt Dir auf?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage