Geri: Eintrag in die Datenbank

Hallo Leute,

leider werden die ausgefüllten Daten nicht in die Datenbank geschrieben - nur die ID und der ZEITSTEMPEL werden in die Datenbank eingefügt.
Weiß leider nicht wo, das Problem liegt.

Danke jetzt schon mal an die Helfer

Tschau Geri

Quelltext
<?php

ini_set('error_reporting', E_ALL);
include_once "tabelle.inc.php";

include "global.inc.php";
$dblink = mysql_connect($datahost,$datauser,$datapass);
mysql_select_db($database, $dblink);

$GBname       = "";
$GBemail       = "";
$GBwebadresse      = "";
$GBtext      = "";

$anlegen = 'INSERT INTO gastbuch
        (
        name,
        email,
        www,
        text
        )
      VALUES (
        "'.$GBname.'",
        "'.$GBemail.'",
        "'.$GBwebadresse.'",
        "'.$GBtext.'" )';
mysql_query($anlegen, $dblink);

?>

<body>
<form action="137.php" method="post">

<input type="text" name="GBname" value="<?php echo $GBname; ?>" .....

<input type="submit" value="Senden!"> <input type="reset" value="Zur&uuml;cksetzen">......

  1. Hallo Leute,

    leider werden die ausgefüllten Daten nicht in die Datenbank geschrieben - nur die ID und der ZEITSTEMPEL werden in die Datenbank eingefügt.
    Weiß leider nicht wo, das Problem liegt.
    Quelltext
    <?php

    .........

    $GBname       = "";
    $GBemail       = "";
    $GBwebadresse      = "";
    $GBtext      = "";

    Hier setzt du die Variablen auf einen Leerstring und verwendest sie dann im Insert. Klar, dass dann nichts in die Datenbank geschrieben wird.

    mfg
     Horst

    1. Hallo Leute,

      leider werden die ausgefüllten Daten nicht in die Datenbank geschrieben - nur die ID und der ZEITSTEMPEL werden in die Datenbank eingefügt.
      Weiß leider nicht wo, das Problem liegt.
      Quelltext
      <?php
      .........

      $GBname       = "";
      $GBemail       = "";
      $GBwebadresse      = "";
      $GBtext      = "";

      Hier setzt du die Variablen auf einen Leerstring und verwendest sie dann im Insert. Klar, dass dann nichts in die Datenbank geschrieben wird.

      mfg
      Horst

      Hallo,

      ja da ist was drann -
      Habe es nun geändert auf:
      ############################################################
      $GBname     = trim( $_POST["GBname"] );
      $GBemail     = trim( $_POST["GBemail"] );
      $GBwebadresse    = trim( $_POST["GBwebadresse"] );
      $GBtext    = trim( $_POST["GBtext"] );
      ###########################################################

      Jetzt schreib er mir die Daten rein, aber er löscht die Daten nur im "GBtext" (Formular) und bei den anderen lasst er es steh´n??

      Danke für die Hilfe

      Tschau Geri

      1. Hallo Geri,

        Jetzt schreib er mir die Daten rein, aber er löscht die Daten nur im "GBtext" (Formular) und bei den anderen lasst er es steh´n??

        Wie meinst du das, 'er löscht die Daten nur im "GBtext"'?
        Wie sieht denn dein Eintrag in der Datenbank nun genau aus?

        Grüße

        Marc Reichelt || http://www.marcreichelt.de/

        --
        Linux is like a wigwam - no windows, no gates and an Apache inside!
        Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
        http://emmanuel.dammerer.at/selfcode.html
        1. Hallo Geri,

          Jetzt schreib er mir die Daten rein, aber er löscht die Daten nur im "GBtext" (Formular) und bei den anderen lasst er es steh´n??

          Wie meinst du das, 'er löscht die Daten nur im "GBtext"'?
          Wie sieht denn dein Eintrag in der Datenbank nun genau aus?

          Grüße

          Marc Reichelt || http://www.marcreichelt.de/

          Hallo,
          ich werde mich dann mit der Sicherheit beschäftigen wenn, es mal einwandfrei funkt - danke mal an alle.
          *************

          Die Änderung habe ich zuerst reingepostet - mit "Löschen" meine ich im Formularfeld - also der User tippt seine Sachen rein - drückt auf "OK" >>wird in die Datenbank geschrieben<< und nur beim Formular - Feld "GBtext" wird der Text gelöscht bei den anderen bleibt er stehen!

          Hoffe ich habe mich verständlich ausgedrückt

          Dake
          Tschau Geri

          1. Die Änderung habe ich zuerst reingepostet - mit "Löschen" meine ich im Formularfeld - also der User tippt seine Sachen rein - drückt auf "OK" >>wird in die Datenbank geschrieben<< und nur beim Formular - Feld "GBtext" wird der Text gelöscht bei den anderen bleibt er stehen!

            Ich glaube was du suchst ist ein sog. "Affenformular"
            versuch mal:

            <textarea ...><?=$_POST['GBtext']?></textarea>

            mfg
             Horst

            1. Die Änderung habe ich zuerst reingepostet - mit "Löschen" meine ich im Formularfeld - also der User tippt seine Sachen rein - drückt auf "OK" >>wird in die Datenbank geschrieben<< und nur beim Formular - Feld "GBtext" wird der Text gelöscht bei den anderen bleibt er stehen!

              Ich glaube was du suchst ist ein sog. "Affenformular"
              versuch mal:

              <textarea ...><?=$_POST['GBtext']?></textarea>

              mfg
              Horst

              Hallo,
              also das mit dem "Affenformular" versteh ich jetzt nicht ganz(wie so einiges).?? Was sollte ich dann bei den anderen sachen ändern?

              Also mein derzeitiger Quellcode :
              ############################################
              <?php

              ini_set('error_reporting', E_ALL);
              include_once "tabelle.inc.php";

              /* $table = new tabelle(); */
              include "global.inc.php";
              $dblink = mysql_connect($datahost,$datauser,$datapass);
              mysql_select_db($database, $dblink);

              $GBname       = trim( $_POST["GBname"] );
              $GBemail       = trim( $_POST["GBemail"] );
              $GBwebadresse      = trim( $_POST["GBwebadresse"] );
              $GBtext      = trim( $_POST["GBtext"] );

              $anlegen = 'INSERT INTO gastbuch
                      (
                      name,
                      email,
                      www,
                      text
                      )
                    VALUES (
                      "'.$GBname.'",
                      "'.$GBemail.'",
                      "'.$GBwebadresse.'",
                      "'.$GBtext.'" )';
              mysql_query($anlegen, $dblink);

              ?>
              <body>

              <form action="137.php" method="post">
              .....
              <td>Name:</td>
              <td><input type="text" name="GBname" value="<?php echo mysql_real_escape_string($GBname); ?>" size="40"></td>
              .....
              <input type="submit" value="Senden!"> <input type="reset" value="Zur&uuml;cksetzen">
              ...
              </form>
              #############################################
              Also wie gesagt , er schreibt mir in die Datenbank - soweit so gut - Aber beim OFRMULAR selbst löscht er mir nicht den eintrag vom USER.

              Also danke schon mal für die AufklärungTschau Geri

              1. Hallo Geri,

                Ich habe deinen Quellcode mal ein wenig überarbeitet und kommentiert, damit wir dein Problem eventuell etwas schneller sehen:

                <?php  
                  
                // alle Fehler und Warnungen ausgeben  
                ini_set('error_reporting', E_ALL);  
                  
                // was die naechsten beiden Zeilen machen wissen wir nicht, da wir den Dateinhalt nicht kennen  
                include_once("tabelle.inc.php");  
                include("global.inc.php");  
                  
                // zur Datenbank verbinden und Datenbank $database auswaehlen  
                $dblink = mysql_connect($datahost,$datauser,$datapass);  
                mysql_select_db($database, $dblink);  
                  
                // Daten, die vom Formular uebergeben werden, in Variablen abspeichern  
                $GBname       = trim( $_POST["GBname"] );  
                $GBemail      = trim( $_POST["GBemail"] );  
                $GBwebadresse = trim( $_POST["GBwebadresse"] );  
                $GBtext       = trim( $_POST["GBtext"] );  
                  
                // Query erstellen und ausfuehren, man beachte die Benutzung der Funktion mysql_real_escape_string(), die alle besonderen Zeichen maskiert => gegen sql-injenctions  
                $query = 'INSERT INTO gastbuch (name, email, www, text) VALUES ("'.mysql_real_escape_string($GBname).'", "'.mysql_real_escape_string($GBemail).'", "'.mysql_real_escape_string($GBwebadresse).'", "'.mysql_real_escape_string($GBtext).'" )';  
                mysql_query($query, $dblink);  
                  
                // zum Testen geben wir jetzt mal eventuell auftretende Fehler aus, spaeter diese Zeile entfernen  
                echo mysql_error();  
                  
                ?>
                

                So, und dann sehen wir weiter.

                Grüße

                Marc Reichelt || http://www.marcreichelt.de/

                --
                Linux is like a wigwam - no windows, no gates and an Apache inside!
                Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
                http://emmanuel.dammerer.at/selfcode.html
                1. Hallo Geri,

                  Hallo Marc,, zuerst einmal ein großes Dankeschön für dein Mühe.

                  // was die naechsten beiden Zeilen machen wissen wir nicht, da wir den Dateinhalt nicht kennen

                  tabelle.inc.php ist dann für mich wichtig wenn ich die Daten auslese(table).
                  in global.inc.php liegen die zugangsdaten

                  include_once("tabelle.inc.php");
                  include("global.inc.php");

                  // Daten, die vom Formular uebergeben werden, in Variablen abspeichern

                  Hier kommt jetzt eine fehlermeldung:
                  Notice: Undefined index: GBname in /137.php on line 15
                  Notice: Undefined index: GBname in /137.php on line 16
                  Notice: Undefined index: GBname in /137.php on line 17
                  Notice: Undefined index: GBname in /137.php on line 18

                  $GBname       = trim( $_POST["GBname"] );
                  $GBemail      = trim( $_POST["GBemail"] );
                  $GBwebadresse = trim( $_POST["GBwebadresse"] );
                  $GBtext       = trim( $_POST["GBtext"] );

                  So, und dann sehen wir weiter.

                  Grüße

                  Marc Reichelt || http://www.marcreichelt.de/

                  Danke Tschau Geri

                  1. Hello,

                    Hier kommt jetzt eine fehlermeldung:
                    Notice: Undefined index: GBname in /137.php on line 15
                    Notice: Undefined index: GBname in /137.php on line 16
                    Notice: Undefined index: GBname in /137.php on line 17
                    Notice: Undefined index: GBname in /137.php on line 18

                    $GBname       = trim( $_POST["GBname"] );
                    $GBemail      = trim( $_POST["GBemail"] );
                    $GBwebadresse = trim( $_POST["GBwebadresse"] );
                    $GBtext       = trim( $_POST["GBtext"] );

                    Ja. Beim Erstaufruf des Scriptes sind die Parameter noch gar nicht übertragen worden vom Script.
                    Einen Lösungsweg habe ich Dir weiter oben gepostet.

                    Beim Erstaufruf brauchst Du dann aber leine Fehlerbehandlung durchzuführen. Da kann ja noch kein Fehler vorliegen.

                    Harzliche Grüße vom Berg
                    esst mehr http://www.harte-harzer.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
      2. Hello,

        Habe es nun geändert auf:
        ############################################################
        $GBname     = trim( $_POST["GBname"] );
        $GBemail     = trim( $_POST["GBemail"] );
        $GBwebadresse    = trim( $_POST["GBwebadresse"] );
        $GBtext    = trim( $_POST["GBtext"] );
        ###########################################################

        Das ist auch nicht ganz richtig (hier vielelicht gerade noch so).
        Das Formular könnte aber auch Werte enthalten, die nicht mit übertragen werden, weil sie nicht ausgewählt wurden. (Radio, Checkbox, Select,...).

        Und außerdem könnte das Formular gefälscht worden sein, dann könnte auch ein Wert fehlen oder zuviel sein.

        Man sollte daher ein Array mit allen erwarteten Werten vorhalten, und dieses mit foreach() abfahren

        $_fehler = array();

        foreach($_required as $key => $val)
          {
            if(isset($_POST[$key])
            {
              $_required[$key] = $_POST[$key];
            }
            else
            {
              $_fehler[] = "Feld $key fehlt";
            }
          }

        So ist sichergestellt, dass Du merkst, wenn ein Feld fehlt.
        Das kann man beliebig komplexer machen.

        Harzliche Grüße vom Berg
        esst mehr http://www.harte-harzer.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
  2. Hallo Geri,

    $anlegen = 'INSERT INTO gastbuch

    Müsste es nicht irgendwie "gaestebuch" heißen? Der Name kommt mir doch ein wenig ungewöhnlich vor.

    (
            name,
            email,
            www,
            text
            )
          VALUES (
            "'.$GBname.'",
            "'.$GBemail.'",
            "'.$GBwebadresse.'",
            "'.$GBtext.'" )';
    mysql_query($anlegen, $dblink);

    Lass dir mal nach dem Query eventuelle Fehler ausgeben, Stichwort mysql_error().
    Und noch ein Tipp: Trage _niemals_ ungeschützt Daten in eine MySQL-Tabelle ein - das kann schlimme Folgen haben (Angriffsmöglichkeiten!).
    verwende statt $GBname einfach mysql_real_escape_string($GBname), also natürlich nur da wo du die Daten in die Tabelle einträgst.
    Derzeit legst du die Variablen ja noch im Skript selbst fest (leere Strings), aber sobald die Variablen von einem Formular kommen wird's brenzlig.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html
  3. $anlegen = 'INSERT INTO gastbuch
            (
            name,
            email,
            www,
            text
            )
          VALUES (
            "'.$GBname.'",
            "'.$GBemail.'",
            "'.$GBwebadresse.'",
            "'.$GBtext.'" )';
    mysql_query($anlegen, $dblink);

    Hast du mal 'ne URL?

    Deine Datenbank ist ein offenes Scheunentor, such mal nach sql-injection.

    Struppi.

  4. Hello,

    <?php

    ini_set('error_reporting', E_ALL);
    include_once "tabelle.inc.php";

    hier alle erwarteten Variablen anzeigen lassen.

    Und wo

    include "global.inc.php";
    $dblink = mysql_connect($datahost,$datauser,$datapass);
    mysql_select_db($database, $dblink);

    und wenn Du hier die Variablen wieder löschst, die Du vorbereitet hast, steht natürlich

    nichts drin. Hast Du denn beim Übertragen von $_POST['GBnme'] nach $GBname auch an die

    Entfernung eventuell vorhandener Maslierungen (sripslashes()) gedacht und die Werte

    auch mit mysql_escape_string() behandelt?

    $GBname       = "";
    $GBemail       = "";
    $GBwebadresse      = "";
    $GBtext      = "";

    $anlegen = 'INSERT INTO gastbuch
            (
            name,
            email,
            www,
            text
            )
          VALUES (
            "'.$GBname.'",
            "'.$GBemail.'",
            "'.$GBwebadresse.'",
            "'.$GBtext.'" )';
    mysql_query($anlegen, $dblink);

    ?>

    <body>
    <form action="137.php" method="post">

    Für die DB escaped Values eignen sich nicht zum direkten wieder ausgeben.

    Außerdem solltest Du die auszugebenen Werte noch durch htmlentities() schicken.

    <input type="text" name="GBname" value="<?php echo $GBname; ?>" .....

    <input type="submit" value="Senden!"> <input type="reset" value="Zur&uuml;cksetzen">......

    Harzliche Grüße vom Berg
    esst mehr http://www.harte-harzer.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau