Sven Rautenberg: Zeilenumbruch in Textarea

Beitrag lesen

Moin!

Hab ein kleines Problem.

Du hast mehrere kleine Probleme, die ich dir in deinem Quelltext gerne anmerke:

SCHREIBEN IN DIE DB:
<?
mysql_connect("localhost","XXXX","XXXX");
$aktiv="1";
$datum=date("d.m.Y");
$result=mysql_db_query("usr_n4b19_1", "INSERT INTO gaestebuch VALUES(NULL,'$datum','$aktiv','$name','$email','$http','$kommentar')");

Stolperfalle Nummer 1: Wenn sich die Reihenfolge der Spalten in der DB mal ändert (und dazu gibts mehr als genug Gründe), dann wirft dein SQL-Statement die Daten allesamt in die falschen Spalten. Deshalb: Bei Inserts IMMER die zu befüllenden Spalten angeben. Dann kannst du dir nämlich auch das Befüllen mit NULL sparen.

Und als zweite Anmerkung: mysql_db_query() sollte nicht mehr verwendet, sondern durch mysql_query() und vorheriges mysql_db_select() ersetzt werden.

if (mysql_errno() == 0)
{
    print "Ihr Eintrag wurde übernommen.";
}
else
{
    print "Ein Fehler ist aufgetreten!<br>Sorry!";
}
?>

AUSWERTUNG/DARSTELLUNG:
<?
mysql_connect("localhost","XXXX","XXXX");
$result=mysql_db_query("usr_n4b19_1", "SELECT * FROM gaestebuch ORDER BY id DESC");

Zu mysql_db_query() siehe oben...

Außerdem: Man sollte NIEMALS mit SELECT * arbeiten. Gib die von dir benötigten Spaltennamen direkt an. Wenn sich die Datenbankstruktur mal ändert und du z.B. ein meistens unwichtiges BLOB-Feld hinzufügst, werden sinnlose Datenmengen aus der DB abgefragt, die den Vorgang nur unnötig verlangsamen.

Außerdem kannst du mit SELECT * nicht die Reihenfolge der DB-Spalten im Ergebnis beeinflussen. Und das ist natürlich wiederum schlecht, denn wenn sich (siehe INSERT-Kommentar) die Reihenfolge mal ändert, bist du am Arsch.

Und warum kann sich die Reihenfolge mal ändern? Z.B. durch eingespielte DB-Backups, oder bei sonstigen Änderungen (neue Spalten, neue DB-Software mit anderen Optimierungen etc.)

$anzahl=mysql_num_rows($result);
if ($anzahl == 0)
{
  echo "Es liegen bisher keine Einträge vor";
}
else
{
  for ($i=0;$i<$anzahl;$i++)
  {
   $id=mysql_result($result, $i, "id");
   $datum=mysql_result($result, $i, "datum");
   $aktiv=mysql_result($result, $i, "aktiv");
   $name=mysql_result($result, $i, "name");
   $email=mysql_result($result, $i, "email");
   $http=mysql_result($result, $i, "http");
   $kommentar=mysql_result($result, $i, "kommentar");

Das ist vermutlich die allerumständlichste Methode, an die Ergebnisse der DB heranzukommen.

Was hälst du von diesem hier:

while ($abfrage = mysql_fetch_array($result))
{
  print "{$abfrage['name']}...{$abfrage['email']}...."; // und so weiter
}

Ganz ohne Feststellung, wieviele Elemente gefunden wurden.

str_replace("\n","<br>",$kommentar);
   //nl2br($kommentar);

Dass nl2br() und str_replace() Funktionen sind, deren Ergebnis das gewünschte Ergebnis enthalten, welches du aber hingebungsvoll wegwirfst, wurde schon geklärt.

if ($aktiv==1)

MOOOOOMENT! Du willst du nicht wirklich _alle_ Datensätze der Datenbank abfragen und dann hinterher nur die aktiven Datensätze ausgeben, oder etwa doch?

Ist ja GRAUSAM! Pack diese Abfrage doch bitte ins SQL rein:

SELECT spalte1, spalte2 FROM tabelle WHERE aktiv=1 ORDER BY blah

Und schon kriegst du nur noch Datensätze, die aktiv sind.

Denn was wäre, wenn du nur inaktive Datensätze kriegen würdest? Richtig, du würdest NICHT die Fehlermeldung "Es liegen bisher keine Einträge vor" kriegen, weil ja Datensätze gefunden wurden (die inaktiv sind).

[....]
?>

- Sven Rautenberg

--
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|