Php 使用公式将用户插入数据库无效
我想检查我添加到数据库中的用户是否已经存在,以及是否在公式中键入了内容。当检查结果正确时,我在公式中输入的数据应该被添加到我的数据库中,但事实并非如此。它与while语句有关,因为当我删除这些行时,它可以工作,但每次我刷新页面时,它都会添加一个用户Php 使用公式将用户插入数据库无效,php,database,forms,pdo,Php,Database,Forms,Pdo,我想检查我添加到数据库中的用户是否已经存在,以及是否在公式中键入了内容。当检查结果正确时,我在公式中输入的数据应该被添加到我的数据库中,但事实并非如此。它与while语句有关,因为当我删除这些行时,它可以工作,但每次我刷新页面时,它都会添加一个用户 <?php $host = 'localhost'; $user = 'root'; $password = 'F
<?php
$host = 'localhost';
$user = 'root';
$password = 'FIoLTAZo1pEar83N';
$dbname = 'studenten';
$dsn = 'mysql:host='. $host .';dbname='. $dbname;
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
if(isset($_POST["u_name"]) && (null !== $_POST["u_name"])){
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$user_name = $_POST["u_name"];
$first_name = $_POST["vorname"];
$last_name = $_POST["nachname"];
$user_password = $_POST["passwort"];
}
}
if(isset($_POST["u_name"]) && (null !== $_POST["u_name"])){
$suchen = $_POST['u_name'];
$sql = 'SELECT * FROM studenten WHERE user_name LIKE ?';
$stmt = $pdo->prepare($sql);
$stmt->execute([$suchen]);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
if($row['user_name'] == null){
$sql = 'INSERT INTO studenten(user_name, first_name, last_name, user_password) VALUES(:user_name, :first_name, :last_name, :user_password)';
$stmt = $pdo->prepare($sql);
$stmt->execute(['user_name' => $user_name, 'first_name' => $first_name, 'last_name' => $last_name, 'user_password' => $user_password]);
unset($_POST["u_name"]);
}}}
?>
<form id='formular_eins' method="post" action="admin.php">
<p class="eigenschaften">User Name:</p>
<input type='text' name='u_name' placeholder='User Name' required maxlength="7" minlength="7">
<br><br>
<p class="eigenschaften">Vorname:</p>
<input type='text' name='vorname' placeholder='Vorname' required>
<br><br>
<p class="eigenschaften">Nachname:<p>
<input type='text' name='nachname' placeholder='Nachname' required>
<br><br>
<p class="eigenschaften">Passwort:</p>
<input type='text' name='passwort' placeholder='Passwort' maxlength="15" minlength="6" required>
<br><br><br>
<button type='submit' name="btn" class="btn_speichern" onclick="leeren()">Speichern</button>
</form>
首先你可以用??操作员,这将使您的代码更好:
$host = 'localhost';
$user = 'root';
$password = 'FIoLTAZo1pEar83N';
$dbname = 'studenten';
$dsn = 'mysql:host='. $host .';dbname='. $dbname;
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$user_name = $_POST["u_name"] ?? $_POST["u_name"];
$first_name = $_POST["vorname"] ?? $_POST["vorname"];
$last_name = $_POST["nachname"] ?? $_POST["nachname"];
$user_password = $_POST["passwort"] ?? $_POST["passwort"];
if($user_name){
$suchen = $user_name;
$sql = 'SELECT * FROM studenten WHERE user_name LIKE ?';
$stmt = $pdo->prepare($sql);
$stmt->execute([$suchen]);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
if(!$row){
$sql = 'INSERT INTO studenten(user_name, first_name, last_name, user_password) VALUES(:user_name, :first_name, :last_name, :user_password)';
$stmt = $pdo->prepare($sql);
$stmt->execute(['user_name' => $user_name, 'first_name' => $first_name, 'last_name' => $last_name, 'user_password' => $user_password]);
unset($_POST["u_name"]);
}
}
}
我不认为,你需要使用fetch方法,使用fetchAll
在这之后,使用print_r检查将返回$row=$stmt->fetchAll的内容,并检查将返回$stmt->executestation After INSERT命令的内容。有时使用密码有时使用密码可能这是错误的永远不要以明文或使用MD5/SHA1存储密码!仅存储使用PHP创建的密码哈希,然后可以使用进行验证。看看这篇文章:了解更多关于感谢的信息,这是我的下一步:谢谢,你说的每句话我都试过了,但我想不出问题出在哪里。好的。尝试将显示错误设置为“显示错误”,1;ini设置“显示启动错误”,1;错误报告全部;之后,发送将返回打印的内容,行=$stmt->fetchAll和$stmt->execute。这将有助于了解发生了什么