Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Formularinhalt wird nicht an Datenbank übermittelt

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Formularinhalt wird nicht an Datenbank übermittelt

    Hallo liebes Forum,

    Ich muss über ein Jahr hinweg ein Quiz in PHP programmieren.
    Erstmal jedoch ein Formular, bei dem man Email und Passwort eingeben muss, welche dann in einer Datenbank gespeichert werden.
    Diese Eingabe (also passwort/email) sollen (vorläufig) sofort nach der Eingabe auf der HTML Seite zu sehen sein.
    Doch irgendwie funktioniert das Script nicht so ganz, wie es soll
    Ich bekomme keine Fehlermeldungen o.ä. aber es wird auch nichts in die DB geschrieben...wenn ich etwas in das
    Formular eingebe und "absende" aktualisiert sich die Seite lediglich, es wird aber nichts angezeigt.
    Wenn ich dann in der DB nachsehe gibt es lediglich einen neuen, "leeren" Eintrag.

    PHP-Code:
    <?php
    if(@$_REQUEST['emailadresse']!="")
    {
    mysql_connect("localhost""root""");
    mysql_select_db("test");
    $emailadresse=mysql_real_escape_string($_POST['emailadresse']);
    $passwort=mysql_real_escape_string($_POST['passwort']); 
    mysql_query("INSERT INTO test (Name, Beschreibung) VALUES('$emailadresse','$passwort');");
    }
    ?>
    <html>
      <head>
        <meta content="text/html; charset=windows-1252" http-equiv="content-type">
        <title>Registrieren</title>
      </head>
      <body>
        <form method="post" action="registrierpage.php"
        <div style="text-align: center;"><span style="font-weight: bold;">Um
            einen kostenlosen Account zu erstellen,<br>
            geben Sie bitte</span> <span style="font-weight: bold;">folgende Daten
            ein:<br>
            <br>
            <input maxlength="30" size="30" placeholder="E-Mail-Adresse" form="Anmeldung"
              name="emailadresse" type="email"><br>
            <input maxlength="12" size="30" placeholder="Passwort" form="Anmeldung"
              name="passwort" type="password"><br>
            <br>
            <input name="Button" value="Abschicken" type="submit"><br>
            <input value="Eingaben löschen" type="reset"> </span></div>
    <p>
    <?php
    if(@$_REQUEST['emailadresse']!="")
    {
    $result=mysql_query("SELECT Name, Beschreibung from test;");           
    while(
    $row=mysql_fetch_array($result))
    {
    echo 
    htmlspecialchars($row['Name']);
    echo 
    "...";
    echo 
    htmlspecialchars($row['Beschreibung']);
    echo 
    "<p>";
    }
    }
    ?>
    </body>
    </html>
    Wäre supertoll, wenn mir hier jemand helfen bzw. einen Tipp geben könnte.
    LG

  • #2
    Hallo,

    da wird es einige Fehler geben, nur du kannst diese nicht sehen, weil du diese nicht abfragst bzw. anzeigen lässt, also ich fange mal beim Grundlegenden an:

    - aktiviere Error Reporting von PHP, zu Beginn des Scriptes nach <?php
    PHP-Code:
    error_reporting(-1);
    ini_set('display_errors'1); 
    - Frag auch die Datenbank mysql_ nach Fehlern
    mysql_error(), mysql_errno() etc...
    ABER:

    - die mysql_ Erweiterung ist veraltet, dh es wird bald nicht mehr funktionieren, nutze besser PDO oder mysqli
    http://www.peterkropff.de/site/php/pdo.htm
    http://www.peterkropff.de/site/php/mysqli.htm

    - das @ entferne (das unterdrückt nämlich Fehler!) und frage sauber ab ob die Werte gesetzt sind. ,zB isset() bzw. empty()

    - den Verbinungsaufbau solltest du auslagern und includieren

    - Statt $_REQUEST nutze $_POST oder $_GET

    - Bei htmlsepcialchars() solltest du das Encoding mit angeben, da wurde der default Wert mal seitens PHP geändert, am besten immer alles in UTF-8 machen. zB dazu auch: http://php-de.github.io/jumpto/mysql-and-utf8/

    - Und wenn du das alles erledigt hast, dann betreibe debugging und finde die Stelle wo es hakt
    PHP: http://php-de.github.io/jumpto/leitfaden/
    SQL: http://php-de.github.io/jumpto/sql/

    LG
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Ratsam ist es, der Tabelle eine ID-Spalte als Primärschlüssel zuzuweisen. Spätestens wenn du vorhast, mehr als einen Eintrag zu speichern, kann das hilfreich sein. Außerdem hat MySQL gerne mal Probleme mit reservierten Bezeichnungen, darunter Fallen so weit ich weiß auch Key und Name, deswegen setze ich immer `` in die Queries mit ein, dann kann nichts schief gehen. Für SELECT gilt das natürlich entsprechend.
      PHP-Code:
      mysql_query("INSERT INTO `test` (`Name`, `Beschreibung`) VALUES ('$emailadresse', '$passwort')"
      Statt $_REQUEST nimmst du am besten $_POST, weil die Werte vom Formular auch per POST übergeben werden. Was im Quelltextausschnitt fehlt, ist die Variablen vor dem INSERT zu benennen. So existieren die Variablen für PHP nicht und es legt sie sich selbstständig vor dem INSERT an. Da ihm aber vorher niemand gesagt hat, was darin stehen soll, sind die gespeicherten Einträge folglich leer. Deswegen musst du vorher (vor dem Insert) einfügen:
      PHP-Code:
      $emailadresse $_POST['emailadresse'];
      $passwort $_POST['passwort']; 
      Damit werden den Variablen $emailadresse und $passwort die per POST vom Formular überwiesenen Werte übergeben, die du ja nachher per INSERT in der Datenbank speichern willst.

      Kommentar


      • #4
        Es wird nichts übermittelt, weil das HTML ungültig ist.

        <form method="post" action="registrierpage.php"
        Hier fehlt die schliessende, spitze Klammern.
        Ingesamt fehlt das schliessende </form> Tag.
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Viele Dank euch allen für die Antworten.
          Der Fehler lag in dem fehlenden </form> Tag im HTML Script. Außerdem hat das Attribut id="Anmeldung" gefehlt. Das muss ja noch mit rein in den form-Tag
          LG

          Kommentar

          Lädt...
          X