我的代码不起作用,也没有给我任何错误,因此代码是正确的,但仍然无法正常工作。 该代码旨在查找输入的HTML表单数据,如果输入的值未存储在数据库中,则创建它们(新用户)。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
define('SECURE', true);
require_once('_connecting.php');
include "_head.php";
if(isset($_POST["send"]))
{
$username = $_POST["user_name"];
$mail=$_POST["user_email"];
$passwort = $_POST["user_password"];
$passwort2 = $_POST["user_password2"];
if(strlen($passwort)<6||$passwort!=$passwort2)
{
echo "Eingabefehler. Bitte alle Felder korekt ausfüllen. <a href=\"signup.php\">Zurück</a>";
}
else
{
$check = ("SELECT Count(*) FROM user WHERE user_email ='$mail'");
$mysqli->query($check);
if ($check > 1) {
echo "Schon vorhanden";
exit();
} else {
$send="INSERT INTO user (user_name, user_email,user_password) VALUES ('$username','$passwort','$mail')";
$mysqli->query($send);
}
}}
?>
<h1>
Registriere dich jetzt, um alle Funktionen des Forums in vollem Umfang genießen zu können.
</h1>
<h1 id="yellowh1">
Du wirst es nicht bereuen - Es warten viele spannende Dinge auf dich.
</h1>
<form action="signup.php" method="post">
<br><br>
<input type="text" name="user_name" value="" required="required" placeholder="Nutzername" maxlength="255" />
<br>
<br>
<input type="email" name="user_email" value="<?php echo !empty($_POST['user_email']) ? $_POST['user_email'] : ''; ?>" required="required" placeholder="E-Mail-Adresse" maxlength="255" />
<br><br>
<input type="password" name="user_password" required="required" placeholder="Passwort" maxlength="50" />
<input type="password" name="user_password2" required="required" placeholder="Passwort erneut eingeben" maxlength="50" />
<br><br>
<input type="submit" value="Abschicken" name="send">
</form>
<?php include "_footer.php";?>
答案 0 :(得分:4)
这里有一些问题。
$mail=$_POSST["user_email"];
首先,那里有一个拼写错误,您必须删除其中一个S
。这是一个superglobal。
错误报告会发出信号:
注意:未定义的变量:_POSST in ...
正如我在评论中所述,您的查询取决于它。 WHERE user_email ='$mail'
并且您不会在任何地方检查错误。
VALUES ('$username','$passwort','$mail')
中的拼写错误,$_POSST
也会失败。然后你有value="<?php echo $user_email; ?>"
输入name="user_email"
,只要你点击提交按钮,它也会在输入字段中抛出以下通知:
注意:未定义的变量:user_email in ...
因此,您需要使用三元运算符:
value="<?php echo !empty($_POST['user_email']) ? $_POST['user_email'] : ''; ?>"
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告应仅在暂存时完成,而不是生产。
脚注:
您目前的代码向SQL injection开放。使用prepared statements或PDO with prepared statements,它们更安全。
我注意到您可能以纯文本格式存储密码。如果是这种情况,则非常气馁。
我建议您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
功能。对于PHP&lt; 5.5使用password_hash() compatibility pack
。
参考文献:
最后的说明:
由于要连接的MySQL API未知(对我来说),请确保您实际上正在使用mysqli_
进行连接,而不是另一个不同的。不同的MySQL API不会相互混合。
正如“不要恐慌”的评论和赞誉所述:
$ mysqli-&gt; query-&gt;执行似乎有点奇怪。 - 不要恐慌
这种查询$mysqli->query->execute(...)
的方法用于预处理语句。 http://php.net/manual/en/mysqli.prepare.php
那些需要修改为$mysqli->query(...)