Gästebuch [PHP, MySQL]

Nochmal ich! Und zwar: Ich möchte den Inhalt eines Formulars an eine MySQL-Tabelle schicken und später wieder auslesen.

Der PHP-Code:

<?php
  $eintrag = "INSERT INTO allgemein
  (Name, Betreff, Eintrag)
  
  VALUES
  ('$Name', '$Betreff', '$Eintrag')";

  $eintragen = mysql_query($eintrag);
?>

Die Tabelle heißt “allgemein” und besteht aus den Feldern “Name”, “Datum”, “Betreff” und “Eintrag”. Ich bekomme, bei ausgefüllter Tabelle, die Fehlermeldung:

Was check ich denn jetzt schon wieder nicht? Bzw. was mach ich flasch?

Wenn das mit dem schreiben in die Tabelle jetzt irgendwann klappt, wie kann ich dann die geshcriebenen Teile wieder auslesen?

Hi,

wo ist denn der Verbindungsaufbau zur Datenbank?

Ich dachte mit “INSERT INTO allgemein” würden Daten in die Tabelle “allgemein” geschrieben werden und mit “$eintragen = mysql_query($eintrag);” die Verbindung aufgebaut werden?

PHP’s Glaskugel ist leider in Reparatur darum musst du ihm die nächsten Tage die Zugangsdaten zur Datenbank stecken.

Wie das geht liest du hier nach: http://schattenbaum.net/php/verbindung.php

*edit: Ich hab gerade einen Anruf bekommen. Die aus der Reparatur haben gesagt, dass sie die Glaskugel nicht wieder reparieren können, also musst du in Zukunft wohl immer zuerst die Verbindung aufbauen :ps:

Aha, ok! :smiley: :slight_smile: Viele dank an euch!!

Moment :smiley:, jetzt hab ich doch noch mal eine Frage:

Wenn ich jetzt einen Eintrag schreibe und absende wird im phpMyAdmin auch einer angezeigt, jedoch ohne Inhalt. Woran kann das liegen?

PHP:

<?php
  
  $eintrag = "INSERT INTO allgemein
  (Name, Betreff, Eintrag)
  VALUES
  ('$name', '$betreff', '$eintrag')";

  $eintragen = mysql_query($eintrag);
  
  if($eintragen == true)
    {
    echo "Vielen dank, dein Eintrag wurde gespeichert!";
    }
  else
    {
    echo "Dein Eintrag konnte nicht gespeichert werden.";
    }

  ?>

Formular:

<form action="form.php" method="post">
    <table border="0" cellpadding="5" cellspacing="0" bgcolor="#E0E0E0">
      <tr>
        <td align="right">Name:</td>
        <td><input name="name" type="text" size="66" maxlength="30"></td>
      </tr>
      <tr>
        <td align="right">Betreff:</td>
        <td><input name="betreff" type="text" size="66" maxlength="40"></td>
      </tr>
      <tr>
        <td align="right" valign="top">Eintrag:</td>
        <td><textarea name="eintrag" rows="10" cols="50"></textarea></td>
      </tr>
      <tr>
        <td align="right">Aktion:</td>
        <td>
          <input type="submit" value="Absenden">
          <input type="reset" value="Löschen">
        </td>
      </tr>
    </table>
    </form>

Danke, danke, danke nochmal und schonmal! :slight_smile: :wink:

Da hier register_globals standardmässig ausgeschaltet ist, kanns du nicht mit $formularfeldname auf die geposteten Daten zugreiffen.
Dazu verwendest du das $_POST Array.
Einfach anstelle von $feldname nimmst du $_POST[‘feldname’]

Und dann empfehle ich dir noch die hier: php.net/mysql_real_escape_string gegen MySQL-Injektions

Auf bplaced ist register_globals auf off, d.h. du musst das $_POST-Array verwenden.
//edit
bcg war schneller

:smiley: :smiley: Danke an euch beide!! :wink: :smiley: :slight_smile: :slight_smile: Also so:

<?php
  
  $eintrag = "INSERT INTO allgemein
  (Name, Betreff, Eintrag)
  VALUES
  ($_POST['name'], $_POST['betreff'], $_POST['eintrag'])";

  $eintragen = mysql_query($eintrag);
  
  if($eintragen == true)
    {
    echo "Vielen dank, dein Eintrag wurde gespeichert!";
    }
  else
    {
    echo "Dein Eintrag konnte nicht gespeichert werden.";
    }

  ?>

Das meint ihr oder??

PS: @bcg: Danke schonmal für den Link! Was bringt mir das genau?? :S :smiley: :wink:

Sieht gut aus. Zu 2): Du verhinderst, dass dein Gästebuch gehackt werden kann :slight_smile: Daher solltest du diese Funktion auf alle Formularfelder anwenden.

Aah!! :slight_smile: Ok, das klingt sinnvoll! :smiley: :smiley: :smiley: Vielen dank!!!

“Gehackt” werden kann es immernoch - mysql_real_escape_string unterbindet lediglich die Interpretation von jeglichem Code…

Moment, moment, jetzt krieg ich aber

wenn ich das Formular absende… :smiley: :smiley:

Was steht denn in besagter Zeile? Da scheint mir doch wieder was an der Syntax falsch zu sein :smiley:

In der Zeile steht:

Mhh, wenn ich aus:

Das hier:

mache, dann kommt die besagte Meldung nicht mehr, sondern nur noch die Fehlermeldung, dass das Teil nicht gesendet werden konnte…


Strings musst du in MySQL mittels einfacher (oder auch doppelter) Anführungszeichen begrenzen.

Strings musst du in MySQL mittels einfacher (oder auch doppelter) Anführungszeichen begrenzen.

:slight_smile: Danke, danke, danke! Boah, darauf wär ich ja niemals gekommen. :smiley: Danke! Das mit den mysql_real_escape_string wär noch gekommen, ich wollt erstmal das andere Problem lösen. :smiley: Danke! :slight_smile: Funktioniert perfekt!