PHP数组([id] => 0)

时间:2016-04-25 21:28:40

标签: php mysql arrays

我正在尝试使用Windows 2012 + MySQL + IIS + PHP为我的测试实验室编写程序,我的程序读取数据库,但是当我尝试将数据写入数据库时​​,它显示“Array([id ] => 0)“,这意味着我的程序没有将数据写入数据库,有什么问题?我是一个初学者写作课程,请帮帮我?我的代码如下:

<?php

session_start();

error_reporting(E_ALL & ~E_NOTICE);

// Connect to Database

$link = mysqli_connect("localhost", "root", "password", "admin");

// Connection Status

if ($link->connect_error) {

    die ("Connection Failed : " . $link->connect_error);
}

if ($_POST['submit']) {

    if (!$_POST['email'])
        $error .= "<br />Bitte trage deine Email Addresse ein !";

    else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
        $error .= "<br />Bitte eine korrekte email Address ein !";

    if (!$_POST['password'])
        $error .= "<br />Bitte trage dein Passwort ein !";

    else {
        if (strlen($_POST['password']) < 8)
            $error .= "<br />Bitte trage ein längeres Password ein !";

        if (!preg_match('`[A-Z]`', $_POST['password']))
            $error .= "<br />Bitte nutze ein Großbuchstaben password ein !";

    }

    if (isset($error))
        echo "Es gab fehler in deinem Login Details : " . $error;

    else {

        $query = "SELECT * FROM `benutzer` WHERE email ='" . mysqli_real_escape_string($link, $_POST['email']) . "'";

        $result = mysqli_query($link, $query);

        $results = mysqli_num_rows($result);

        if ($results) echo "Die eMailaddresse ist bereits vergeben. <br />Möchtest do dich einloggen ?";

            $query = "INSERT INTO benutzer (email, password) VALUES ('" . mysqli_real_escape_string($link, $_POST['email']) . "', '" . md5(md5($_POST['email']) . $_POST['password']) . "')";

            mysqli_query($link, $query);

            echo "<br />Du hast dich erfolgreich registriert ! ";

            $_SESSION['id'] = mysqli_insert_id($link);

            print_r($_SESSION); 


    }

}

?>



<form method="post">

    <input type="email" name="email" id="email" id="email" />
    <input type="password" name="password" />
    <input type="submit" name="submit" value="Einlogen" />

</form>

3 个答案:

答案 0 :(得分:0)

您应该采取大量措施来缓解和保护数据库连接,并且应该开发当前用户名/密码的最佳做法。

  • MySQLi真正的转义字符串 是不够的 来保护您免受SQL注入。

  • MD5是一种不适合密码的散列机制,您应该使用PHP password_hash。使用它。

  • 使用MySQLi_error($link)反馈您的SQL查询有什么问题:

所以:

 mysqli_query($link, $query) or die("line ".__LINE__." :".mysqli_error($link));

您可以做的一个重大改进是使用MySQLi Prepared statements本地实际上比更受欢迎的PDO更安全,因为他们从一开始就使用fully prepared statements

答案 1 :(得分:0)

您可以通过检查mysqli_query是否返回true来检查程序是否成功执行了INSERT qureery。

此外,mysqli_insert_id将在第一次返回0然后开始计数,尽管它可能会在某些数据库中出现问题。 你可以从mysqli_num_rows() - 1

获取id

if($ results)

之后替换此代码
if(mysqli_query($link, $query))
{
    echo "<br />Du hast dich erfolgreich registriert ! ";

    $query = "SELECT * FROM `benutzer`";

    $result = mysqli_query($link, $query);

    $results = mysqli_num_rows($result);

    $_SESSION['id'] = $results-1;

    print_r($_SESSION);
}
else
    echo "Error inserting data!"; 

答案 2 :(得分:0)

例外是你的朋友,并且可以很容易地避免那种令人讨厌并且难以遵循嵌套的情况。应该很容易阅读您的脚本并遵循逻辑流程。

以下是包含感兴趣区域的异常和函数的快速示例。

function dbConnect()
{
   $link = mysqli_connect("localhost", "root", "System@2012", "admin");
   if($link->connect_error)
   {
       throw new Exception($link->connect_error);
   }
}

function checkRequiredValues()
{
     // initialize $error before beginning.
     $error = '';

     // Check email address
     if (empty($_POST['email'])) 
     {
          $error .= "<br />Bitte trage deine Email Addresse ein !";
     }
     else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
     {
          $error .= "<br />Bitte eine korrekte email Address ein !";
     }

     // Check password. 
     if (empty($_POST['password']))
     {
         $error .= "<br />Bitte trage dein Passwort ein !";
     }
     else if (strlen($_POST['password']) < 8)
     {
        $error .= "<br />Bitte trage ein längeres Password ein !";
     }
     else if (!preg_match('`[A-Z]`', $_POST['password']))
     {
        $error .= "<br />Bitte nutze ein Großbuchstaben password ein !";
     }
     if (isset($error))
     {
      throw new Exception("Es gab fehler in deinem Login Details : " . $error);
    }
}




// use !empty here to avoid a warning if post['submit'] is not set
if(!empty($_POST['submit']))
{
    try 
    {
        checkRequiredValues();
        // Do this second.  There is no need to establish a DB 
        // connection if we won't be using it. 
        dbConnect();
        doUpdate();
    }
    catch(\Exception $e)
    {
        $e->getMessage(); 
    }
}

我将把doUpdate函数写给你。请注意,另一张海报所说的关于使用绑定参数的内容是正确的。