Hilfe PHP/HTML

Uzi

Mitglied
Moin leute, ich wollte ne Simple Registry erstellen aber irgendwie speichert es die Daten nicht ab in eine Seperate Tabelle. Ich komm nicht drauf wo der Fehler ist. Vielleicht kann ja einer helfen

der Code Registry:

der Code Datenbankverbindung:

Danke schonmal für die Hilfe
 
Besser du kopierst den Code hier hinein. Ich kann die jetzt nicht helfen, da die Firmenfirewall deine Bilder sperrt.
 
Registry:
  1. <?php
  2. require_once 'datenbankverbindung.php';
  3. ?>
  4. <html>
  5. <body>

  6. <form action="reg.php">

  7. <!-- Form bestimmt den Link wohin es gesendet werden. "event sozusagen" -->
  8. <form action="registry.php" method = "post">

  9. <table style="width:10%">

  10. <tr>
  11. <td><label for="anrede">Anrede: </td>
  12. <td><br> <input type="radio" name="gender" value="male" checked> Herr
  13. <input type="radio" name="gender" value="female"> Frau <br><br>
  14. </td>
  15. </tr>

  16. <tr>
  17. <td></td>
  18. <!-- required sorgt dafür dass das Feld nicht leer sein darf" -->
  19. <td>
  20. <input type="text" required maxlength = "50" name = "vName" placeholder="Vorname"></label>
  21. </td>
  22. </tr>

  23. <tr>
  24. <td></td>
  25. <td>
  26. <input type="text" required maxlength = "50" name = "nName" placeholder="Nachname"><br></label>
  27. </td>

  28. </tr>

  29. <tr>
  30. <td></td>
  31. <td>
  32. <input type="date" required maxlength = "50" name = "geburtstag" placeholder="Geburtsdatum"><br></label>
  33. </td>

  34. </tr>

  35. <tr>
  36. <td></td>
  37. <td>
  38. <input type="text" required maxlength = "50" name "strasse" placeholder="Strasse und Nr"></label>
  39. </td>


  40. <tr>
  41. <td></td>
  42. <td>
  43. <input type="number" required maxlength = "5" name "plz" placeholder="PLZ"></label>
  44. </td>
  45. </tr>

  46. <tr>
  47. <td></td>
  48. <td>
  49. <input type="text" required maxlength = "50" name "stadt" placeholder="Ort"></label>
  50. </td>

  51. <tr>
  52. <td></td>
  53. <td>
  54. <input type="email" required maxlength = "50" name "email" placeholder="Email"></label>
  55. </td>
  56. </tr>

  57. <tr>
  58. <td></td>
  59. <td>
  60. <input type="tel" required maxlength = "11" name = "telefon" placeholder="Handynummer"></label>
  61. </td>
  62. </tr>


  63. <tr>
  64. <td><label for="daten">Benutzerdaten<Br><td/>
  65. <tr/>

  66. <tr>
  67. <td></td>
  68. <td>
  69. <input type="text" required maxlength = "50" name = "login" placeholder="Login"></label>
  70. </td>

  71. <tr>
  72. <td></td>
  73. <td>
  74. <input type="password" required name = "password" placeholder="Password"></label>
  75. </td>
  76. </tr>

  77. <tr>
  78. <td></td>
  79. <td>
  80. <input type="password" required name = "wPAssword" placeholder="Password wiederholen"></label>
  81. </td>
  82. </tr>


  83. <tr>
  84. <td></td>
  85. <td></td>
  86. <td><button type="submit" name="reg" value="reg">Registrieren</button> </td>
  87. </tr>

  88. </table>
  89. <form/>

  90. </body>
  91. </html>

  92. <?php


  93. if(isset($_POST['reg'])){

  94. $vname = $_POST['vName'];
  95. $nname = $_POST['nName'];
  96. $geburt = $_POST['geburtstag'];
  97. $strasse = $_POST['strasse'];
  98. $plz = $_POST['plz'];
  99. $stadt = $_POST['stadt'];
  100. $email = $_POST['email'];
  101. $tel = $_POST['telefon'];
  102. $login = $_POST['login'];
  103. $pw = $_POST['password'];
  104. $wpw = $_POST['wPAssword'];



  105. $stmt = $dbh->prepare("INSERT INTO kunde (username, vorname, nachname, geburtstag, postleitzahl, ort, strasse, telefonnummer) VALUES ('$login','$vname', '$nname','$geburt' ,
  106. '$plz','$stadt','$strasse', '$tel' );");



  107. if($stmt->execute()) {
  108. echo 'Du wurdest erfolgreich registriert';

  109. } else {
  110. echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';}
  111. }




  112. ?>

Datenbankverbindung:

  1. <?php

  2. try {
  3. $dsn = "mysql:host=localhost;dbname=test";
  4. $user = "root";
  5. $password = "";
  6. $dbh = new PDO($dsn, $user, $password);
  7. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  8. } catch (Exception $e) {
  9. echo $e->getMessage();
  10. }

  11. ?>
 
Ich habe dein Code mal formatiert und bin dabei auf viele Fehler gestossen.
HTML:
<?php
    require_once 'datenbankverbindung.php';
?>
<html>
    <body>
<!-- 1) wozu 2 Formulare? -->
        <form action="reg.php">
            <!-- Form bestimmt den Link wohin es gesendet werden. "event sozusagen" -->
            <form action="registry.php" method = "post">
                <table style="width:10%">
                    <tr>
                        <td><label for="anrede">Anrede: </td>
                        <td><br>
                            <input type="radio" name="gender" value="male" checked> Herr
                            <input type="radio" name="gender" value="female"> Frau <br><br>
                        </td>  
                    </tr>
                    <tr>
                        <td></td>
                        <!-- required sorgt dafür dass das Feld nicht leer sein darf" -->
                        <td><input type="text" required maxlength = "50" name = "vName" placeholder="Vorname"></label></td>  
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="text" required maxlength = "50" name = "nName" placeholder="Nachname"><br></label></td>  
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="date" required maxlength = "50" name = "geburtstag" placeholder="Geburtsdatum"><br></label></td>
                    </tr>
                    <tr>          
                        <td></td>
                        <td><input type="text" required maxlength = "50" name "strasse" placeholder="Strasse und Nr"></label></td>  
<!-- 2) Hier fehlt ein </tr> -->                      
                    <tr>
                        <td></td>
                        <td><input type="number" required maxlength = "5" name "plz" placeholder="PLZ"></label></td>  
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="text" required maxlength = "50" name "stadt" placeholder="Ort"></label></td>
<!-- 2) Hier fehlt ein </tr> -->                      
                    <tr>
                        <td></td>
                        <td><input type="email" required maxlength = "50" name "email" placeholder="Email"></label></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="tel" required maxlength = "11" name = "telefon" placeholder="Handynummer"></label></td>
                    </tr>
                    <tr>
<!-- 3) Hier fehlt ein <td /> -->              
                        <td><label for="daten">Benutzerdaten<Br><td/>
                    <tr/>
                    <tr>
                        <td></td>
                        <td><input type="text" required maxlength = "50" name = "login" placeholder="Login"></label></td>  
<!-- 2) Hier fehlt ein </tr> -->                      
                    <tr>
                        <td></td>
                        <td><input type="password" required name = "password" placeholder="Password"></label></td>  
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="password" required name = "wPAssword" placeholder="Password wiederholen"></label></td>
                    </tr>
                    <tr>
<!-- 4) Ein <td /> zuviel -->
                        <td></td>
                        <td></td>  
                        <td><button type="submit" name="reg" value="reg">Registrieren</button></td>
                    </tr>
                </table>
            <form/>
<!-- 1) Das erste Formular wird nicht geschlossen -->
    </body>
</html>
PHP:
<?php
    if(isset($_POST['reg'])){
        $vname = $_POST['vName'];
        $nname = $_POST['nName'];
        $geburt = $_POST['geburtstag'];
        $strasse = $_POST['strasse'];
        $plz = $_POST['plz'];
        $stadt = $_POST['stadt'];
        $email = $_POST['email'];
        $tel = $_POST['telefon'];
        $login = $_POST['login'];
        $pw = $_POST['password'];
        $wpw = $_POST['wPAssword'];
        $stmt = $dbh->prepare("INSERT INTO kunde (username, vorname, nachname, geburtstag, postleitzahl, ort, strasse, telefonnummer)
                                VALUES ('$login','$vname', '$nname','$geburt' ,'$plz','$stadt','$strasse', '$tel' );");
        if($stmt->execute()) {
            echo 'Du wurdest erfolgreich registriert';
        } else {
            echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';}
    }
?>
1) Du öffnest 2 Formulare und schliesst nur eines. Beide Formulare haben verschiedene Ziele. Einmal ist es registry.php und das ander mal reg.php. Was ist richtig?

2) Diverse male hast du vergessen die Zeile der Tabelle abzuschliessen. </tr>

3) Du hast 2 Spalten. Einmal ahst du aber nur eine Spalte definiert. Ist nicht direkt ein Fehler, aber alles andere als schön

4) In einer Spalte hast du auf einmal 3 Spalten. Möp, gar nicht nett.

Ansonsten sieht es schon gut aus. Ich kann mir vorstellen, dass die 2 Form-Tags zu Problemen führen


Noch ein Tipp. Wennd u schon mit prepare() arbeitest, dann solltest du aus Sicherheitsgründen acuh mit bindParam arbeiteb
PHP:
<?php
    if(isset($_POST['reg'])){
        $stmt = $dbh->prepare("INSERT INTO kunde (username, vorname, nachname, geburtstag, postleitzahl, ort, strasse, telefonnummer)
                                VALUES (:login, :vname, :nname, :geburt ,:plz, :stadt, :strasse, :tel);");
        $stmt->bindParam(':login', $_POST['login'], PDO::PARAM_STR);
        $stmt->bindParam(':vname', $_POST['vName'], PDO::PARAM_STR);
        $stmt->bindParam(':nname', $_POST['nName'], PDO::PARAM_STR);
        $stmt->bindParam(':geburt', $_POST['geburtstag'], PDO::PARAM_STR);
        $stmt->bindParam(':plz', $_POST['plz'], PDO::PARAM_STR);
        $stmt->bindParam(':stadt', $_POST['stadt'], PDO::PARAM_STR);
        $stmt->bindParam(':strasse', $_POST['strasse'], PDO::PARAM_STR);
        $stmt->bindParam(':tel', $_POST['telefon'], PDO::PARAM_STR);
        if($stmt->execute()) {
            echo 'Du wurdest erfolgreich registriert';
        } else {
            echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';}
    }
?>
 
@Yaslaw: danke dir, werde mal die Fehler durch gehen und Korigieren und gleich Meldung geben.

@Bratkartoffel: was ist Error_Reporting? (lese mich komplett selbst ein in PHP/HTML deswegen entschuldige meine unwissenheint)

Tebelle:
CREATE TABLE `kunde` (
`id_kunde` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(45) NOT NULL,
`vorname` varchar(45) NOT NULL,
`nachname` varchar(45) NOT NULL,
`geburtstag` varchar(45) NOT NULL,
`postleitzahl` int(11) NOT NULL,
`ort` varchar(45) NOT NULL,
`straße` varchar(45) NOT NULL,
`telefonnummer` varchar(45) NOT NULL,
PRIMARY KEY (`id_kunde`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;


Es passiert einfach garnichts, kommt auch keine Fehlermeldung. ICh werde aber gleich mal den Code verbessern und die gennanten Fehler beseitigen.
 
ok jetzt kommt der Fehler:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'strasse' in 'field list'' in C:\xampp\htdocs\WIF_Project\Registry.php:110 Stack trace: #0 C:\xampp\htdocs\WIF_Project\Registry.php(110): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\WIF_Project\Registry.php on line 110


HTML:
<?php
require_once 'datenbankverbindung.php';
?>


<html>
<body>
        <!-- Form bestimmt den Link wohin es gesendet werden. "event sozusagen" -->
        <form action="registry.php" method="post">
            <table style="width: 10%">
                <tr>
                    <td><label for="anrede">Anrede: </td>
                    <td><br> <input type="radio" name="gender" value="male" checked>
                        Herr <input type="radio" name="gender" value="female"> Frau <br>
                    <br></td>
                </tr>
                <tr>
                    <td></td>
                    <!-- required sorgt dafür dass das Feld nicht leer sein darf" -->
                    <td><input type="text" required maxlength="50" name="vName"
                        placeholder="Vorname"></label></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="text" required maxlength="50" name="nName"
                        placeholder="Nachname"><br>
                    </label></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="date" required maxlength="50" name="geburtstag"
                        placeholder="Geburtsdatum"><br>
                    </label></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="text" required maxlength="50"
                        name = "strasse" placeholder="Strasse und Nr"></label></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="number" required maxlength="5"
                        name = "plz" placeholder="PLZ"></label></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="text" required maxlength="50"
                        name = "stadt" placeholder="Ort"></label></td>
                 </tr>
               
               
                <tr>
                    <td></td>
                    <td><input type="email" required maxlength="50"
                        name = "email" placeholder="Email"></label></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="tel" required maxlength="11" name="telefon"
                        placeholder="Handynummer"></label></td>
                </tr>
                <tr>
                    <!-- 3) Hier fehlt ein <td /> -->
                    <td><label for="daten">Benutzerdaten<Br>
                        <td />
                            <tr />
                            <tr>
                                <td></td>
                                <td><input type="text" required maxlength="50" name="login"
                                    placeholder="Login"></label></td>
                 </tr>
               
               
                <tr>
                    <td></td>
                    <td><input type="password" required name="password"
                        placeholder="Password"></label></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="password" required name="wPAssword"
                        placeholder="Password wiederholen"></label></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td><button type="submit" name="reg" value="reg">Registrieren</button></td>
                </tr>
            </table>
   
<form />

</body>
       
</html>


<?php
    if(isset($_POST['reg'])){
        $stmt = $dbh->prepare("INSERT INTO kunde (username, vorname, nachname, geburtstag, postleitzahl, ort, strasse, telefonnummer)
                               VALUES (:login, :vname, :nname, :geburt ,:plz, :stadt, :strasse, :tel);");
        $stmt->bindParam(':login', $_POST['login'], PDO::PARAM_STR);
        $stmt->bindParam(':vname', $_POST['vName'], PDO::PARAM_STR);
        $stmt->bindParam(':nname', $_POST['nName'], PDO::PARAM_STR);
        $stmt->bindParam(':geburt', $_POST['geburtstag'], PDO::PARAM_STR);
        $stmt->bindParam(':plz', $_POST['plz'], PDO::PARAM_STR);
        $stmt->bindParam(':stadt', $_POST['stadt'], PDO::PARAM_STR);
        $stmt->bindParam(':strasse', $_POST['strasse'], PDO::PARAM_STR);
        $stmt->bindParam(':tel', $_POST['telefon'], PDO::PARAM_STR);
        if($stmt->execute()) {
            echo 'Du wurdest erfolgreich registriert';
        } else {
            echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';}
    }
?>
 
Zuletzt bearbeitet:
Code:
<?php
    if(isset($_POST['reg'])){
        $stmt = $dbh->prepare("INSERT INTO kunde (username, vorname, nachname, geburtstag, postleitzahl, ort, strasse, telefonnummer)
                               VALUES :)login, :vname, :nname, :geburt ,:plz, :stadt, :strasse, :tel);");
        $stmt->bindParam(':login', $_POST['login'], PDO::pARAM_STR);
        $stmt->bindParam(':vname', $_POST['vName'], PDO::pARAM_STR);
        $stmt->bindParam(':nname', $_POST['nName'], PDO::pARAM_STR);
        $stmt->bindParam(':geburt', $_POST['geburtstag'], PDO::pARAM_STR);
        $stmt->bindParam(':plz', $_POST['plz'], PDO::pARAM_STR);
        $stmt->bindParam(':stadt', $_POST['stadt'], PDO::pARAM_STR);
        $stmt->bindParam(':strasse', $_POST['strasse'], PDO::pARAM_STR);
        $stmt->bindParam(':tel', $_POST['telefon'], PDO::pARAM_STR);
        if($stmt->execute()) {
            echo 'Du wurdest erfolgreich registriert';
        } else {
            echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';}
    }
?>
 
Vorweg

Das wird dir auf dem Server Probleme bereiten. Die Server sind meistens CaseSensitiv. Also GrossKleinschreibung beachten!
C:\xampp\htdocs\WIF_Project\Registry.php
<form action="registry.php" method="post">

Zum Fehler
Ganz einfach. Genau so wie im Fehlertext beschrieben steht
Dein Create-Table Statement:
`straße` varchar(45) NOT NULL,

Und dein INSERT
, strasse,

Ergo, er findet strasse nicht.

Ich rate dir von Sonderzeichen in der Datenbankstruktur ab. Also keine Tabellen-/Feldnamen mit ß oder äöü etc.

Nachtrag:
Ein weiterer Fehler. Dein Insert kennt das Feld 'login'. Dein Tabelle hat das Feld aber nicht. Das wird zu einem weiteren Fehler führen.

2ter Nachtrag
Hier hast du vergessen ein td abzuschliessen
HTML:
<!-- 3) Hier fehlt ein <td /> -->
<td><label for="daten">Benutzerdaten<Br>
  <td />
 
also jetzt kommt dieser Fehler:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\xampp\htdocs\WIF_Project\Registry.php:137 Stack trace: #0 C:\xampp\htdocs\WIF_Project\Registry.php(137): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\WIF_Project\Registry.php on line 137


Wenn ich dann die zeile:

if ($stmt->execute ()) {
echo 'Du wurdest erfolgreich registriert';
} else {
echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';
}

Auskommentiere, dann kommt einfach garkein fehler aber es tut sich auch nichts.

Code sieht wie folgt aus:
HTML:
<?php
require_once 'datenbankverbindung.php';
?>


<html>
<body>

    <form action="Registry.php" method="post">


        <table style="width: 10%">


            <tr>
                <td><label for="anrede"> Anrede: </label></td>

                <td><br> <input type="radio" name="gender" value="male" checked>
                    Herr <input type="radio" name="gender" value="female"> Frau <br> <br>
                </td>

            </tr>


            <tr>
                <td></td>
                <!-- required sorgt dafür dass das Feld nicht leer sein darf" -->
                <td><input type="text" required maxlength="50" name="vName"
                    placeholder="Vorname"></td>
            </tr>


            <tr>
                <td></td>
                <td><input type="text" required maxlength="50" name="nName"
                    placeholder="Nachname"><br></td>
            </tr>


            <tr>
                <td></td>
                <td><input type="date" required maxlength="50" name="geburtstag"
                    placeholder="Geburtsdatum"><br></td>
            </tr>


            <tr>
                <td></td>
                <td><input type="text" required maxlength="50" name="strasse"
                    placeholder="Strasse und Nr"></td>
            </tr>


            <tr>
                <td></td>
                <td><input type="number" required maxlength="5" name="plz"
                    placeholder="PLZ"></td>
            </tr>


            <tr>
                <td></td>
                <td><input type="text" required maxlength="50" name="stadt"
                    placeholder="Ort"></td>
            </tr>


            <tr>
                <td></td>
                <td><input type="email" required maxlength="50" name="email"
                    placeholder="Email"></td>
            </tr>


            <tr>
                <td></td>
                <td><input type="tel" required maxlength="11" name="telefon"
                    placeholder="Handynummer"></td>
            </tr>


            <tr>
                <td>
               
                <td><label for="daten">Benutzerdaten<Br>
                </label></td>

            </tr>

            <tr>
                <td></td>
                <td><input type="text" required maxlength="50" name="username"
                    placeholder="Login"></td>
            </tr>


            <tr>
                <td></td>
                <td><input type="password" required name="password"
                    placeholder="Password"></td>
            </tr>

            <tr>
                <td></td>
                <td><input type="password" required name="wPAssword"
                    placeholder="Password wiederholen"></td>
            </tr>

            <tr>
                <td></td>
                <td></td>
                <td><button type="submit" name="reg" value="reg">Registrieren</button></td>
            </tr>
        </table>

    </form>
</body>

</html>


PHP:
<?php


if (isset ( $_POST ['reg'] )) {
    $stmt = $dbh->prepare ( "INSERT INTO kunde (username, vorname, nachname, geburtstag, postleitzahl, ort, strasse, telefonnummer)
                               VALUES (:login, :vname, :nname, :geburt ,:plz, :stadt, :strasse, :tel);" );
    $stmt->bindParam ( ':username', $_POST ['username'], PDO::PARAM_STR );
    $stmt->bindParam ( ':vname', $_POST ['vName'], PDO::PARAM_STR );
    $stmt->bindParam ( ':nname', $_POST ['nName'], PDO::PARAM_STR );
    $stmt->bindParam ( ':geburt', $_POST ['geburtstag'], PDO::PARAM_STR );
    $stmt->bindParam ( ':plz', $_POST ['plz'], PDO::PARAM_STR );
    $stmt->bindParam ( ':stadt', $_POST ['stadt'], PDO::PARAM_STR );
    $stmt->bindParam ( ':strasse', $_POST ['strasse'], PDO::PARAM_STR );
    $stmt->bindParam ( ':telefon', $_POST ['telefon'], PDO::PARAM_STR );
    if ($stmt->execute ()) {
        echo 'Du wurdest erfolgreich registriert';
    } else {
        echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';
    }
}
?>


SQL:
CREATE TABLE `kunde` (
  `id_kunde` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(45) NOT NULL,
  `vorname` varchar(45) NOT NULL,
  `nachname` varchar(45) NOT NULL,
  `geburtstag` varchar(45) NOT NULL,
  `postleitzahl` int(11) NOT NULL,
  `ort` varchar(45) NOT NULL,
  `strasse` varchar(45) NOT NULL,
  `telefonnummer` varchar(45) NOT NULL,
  PRIMARY KEY (`id_kunde`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
 

Neue Beiträge

Zurück