PHP Mysql论坛用户创建脚本不起作用

时间:2015-06-17 22:21:53

标签: php mysql

我的代码不起作用,也没有给我任何错误,因此代码是正确的,但仍然无法正常工作。 该代码旨在查找输入的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&uuml;llen. <a href=\"signup.php\">Zur&uuml;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&szlig;en zu k&ouml;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";?>

1 个答案:

答案 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 statementsPDO 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(...)