最近,我使用php和mysql-database构建了一个登录系统。我手动输入了所有用户,因此下一步要做的是建立寄存器功能。但是由于某种原因,数据无法进入我的数据库。
这是我的注册页面:
<div class="login">
<div class="background">
<img src="../pic/skyscrapers.jpg"></img>
<div class="logbox">
<form class="form-register" action="../func/func_register3.php" method="POST">
<h1>Registrierung</h1>
<div class="user">
Choose your username:<br>
<label for="frm_user">username</label>
<input type="text" name="frm_user" id="frm_user" placeholder="Benutzername" required autofocus>
<br>
<br>
Choose your password:<br>
<label for="frm_pass">Password</label>
<input type="password" name="frm_pass" id="frm_pass" placeholder="Password" required>
<br>
<br>
Repeat your password:<br>
<label for="frm_pass_rep">Repetition</label>
<input type="password" name="frm_pass_rep" placeholder="Password"><br>
<br>
<br>
</div>
<button name="btn_register" id="btn_register" type="submit">register</button>
</form>
</div>
</div>
</div>
这是带有register-logic的php文件:
<?php
if (isset($_POST['btn_register'])) {
include("../inc/db_connect.php");
//Form fields -> php-variables
$frm_user = $_POST['frm_user'];
$frm_pass = $_POST['frm_pass'];
$frm_pass_rep = $_POST['frm_pass_rep'];
$stmt = $dbh->prepare("INSERT INTO tbl_users (username, password) VALUES (:frm_user, :frm_pass)");
$stmt->bindParam(':frm_user', $frm_user);
$stmt->bindParam(':frm_pass', $frm_pass);
if ($stmt->execute() == true):
echo "All good!";
else:
{
echo "The statement has not been executed!";
echo "<br>";
echo print_r($stmt->errorInfo, true);
echo "<br>";
echo $stmt->errorCode();
}
endif;
}
输出为“语句尚未执行!23000”,这是正确的,没有数据传递到数据库...我已经尝试使用其他类型的浏览器和其他数据库。登录可以正常工作,并且两个文件(一个带有login-logik的文件和一个带有register-logik的文件)都使用同一文件连接到数据库。对于解决此问题的各种想法,我将深表感谢。
答案 0 :(得分:-1)
我想您的id列是自动递增的。您应该将其从查询中删除:
$stmt = $dbh->prepare("INSERT INTO tbl_users (username, password) VALUES (:frm_user, :frm_pass)");
,或者如果不是自动递增,或者您想给它一个值,则应该为其插入一个值:
$stmt = $dbh->prepare("INSERT INTO tbl_users (id, username, password) VALUES (:id,:frm_user, :frm_pass)");