2016-12-14 202 views
0

我有一个数据库,其中有一个表Users和6列 (userID (primary), prenume, nume, nicknamee, parola, tara) 我想开发一个用户注册系统。目前,我只希望用户输入用户名/昵称和密码。问题是,当我按提交时,证书不会被插入到数据库中。有人可以帮我吗?PHP注册表格没有插入凭据到数据库中

这里是我的代码:

<html> 
<?php 
$servername = hhhhh; 
$username = hiuhiuhiuh; 
$password = theseAreSecret; 
$dbname = shhhh; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
echo "Connected successfully\n"; 




?> 

<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <title>Campfire</title> 
    <link rel="stylesheet" href=""> 
</head> 
<body> 
    <form method="post"> 
     Username: 
     <input type="text" name="nicknamee" value="Username"><br> 
     Password: 
     <input type="password" name="password" value="Password"><br> 
     <input type="submit" name="Submit1" value="submit"> 
     <?php 
    if (isset($_POST['Submit1'])) { 
     $sql = "INSERT INTO Users (userID, prenume, nume, nicknamee, parola, tara) 
     VALUES (5, 'John', 'Snow', '$_POST[nicknamee]', '$_POST[password]', 'Romania')";} 
     ?> 
    </form> 

</body> 

<?php 

// Print everything out 
$result = $conn->query("SHOW TABLES"); 
    while ($row = $result->fetch_row()){ 
    $table = $row[0]; 
echo '<h3>',$table,'</h3>'; 
$result1 = $conn->query("SELECT * FROM $table"); 
if($result1) { 
    echo '<table cellpadding="0" cellspacing="0" class="db-table">'; 
    $column = $conn->query("SHOW COLUMNS FROM $table"); 
echo '<tr>'; 
    while($row3 = $column->fetch_row()) { 
    echo '<th>'.$row3[0].'</th>'; 
} 
echo '</tr>'; 
    while($row2 = $result1->fetch_row()) { 
     echo '<tr>'; 
     foreach($row2 as $key=>$value) { 
     echo '<td>',$value,'</td>'; 
     } 
     echo '</tr>'; 
    } 
    echo '</table><br />'; 
    } 
    } 
echo '<br>';echo '<br>';echo '<br>';echo '<br>'; 

$conn->close(); 

?> 
</html> 
+0

顺便说一下,这个注册表格很容易被sql注入。你可以在这里阅读更多关于它的信息:https://www.owasp.org/index.php/SQL_Injection – Arin

+2

你的PHP代码的第一行,并且已经有一个语法错误。正如阿林所说,犯了错误,它会帮助你很多。 ;) – Twinfriends

回答

0

行未被添加到数据库的原因是因为查询未执行。它只是将$sql设置为您的查询。现在,您只需使用$conn->query($sql)执行查询即可。

顺便说一句,该变量的值$servername$username$password$dbname应在双引号(“)或单引号(')。

和其他一些问题...

  • 当回声 “连接成功的\ n”,它回声一个\n。HTML使用<br>虽然。
  • 有一个在<head><link rel="stylesheet" href="">
  • 这有一些安全问题。有关更多信息,请参阅此答案的底部。

下面是更正后的代码:

<html> 
<?php 
$servername = 'hhhhh'; 
$username = 'hiuhiuhiuh'; 
$password = 'theseAreSecret'; 
$dbname  = 'shhhh'; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
echo "Connected successfully<br>";  
?> 

<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <title>Campfire</title> 
</head> 
<body> 
    <form method="post"> 
     Username: 
     <input type="text" name="nicknamee" value="Username"><br> 
     Password: 
     <input type="password" name="password" value="Password"><br> 
     <input type="submit" name="Submit1" value="submit"> 
     <?php 
if (isset($_POST['Submit1'])) { 
    $sql = "INSERT INTO Users (userID, prenume, nume, nicknamee, parola, tara) 
     VALUES (5, 'John', 'Snow', '$_POST[nicknamee]', '$_POST[password]', 'Romania')"; 
    $conn->query($sql); // this line was missing 
} 
?> 
    </form> 

</body> 

<?php 

// Print everything out 
$result = $conn->query("SHOW TABLES"); 
while ($row = $result->fetch_row()) { 
    $table = $row[0]; 
    echo '<h3>', $table, '</h3>'; 
    $result1 = $conn->query("SELECT * FROM $table"); 
    if ($result1) { 
     echo '<table cellpadding="0" cellspacing="0" class="db-table">'; 
     $column = $conn->query("SHOW COLUMNS FROM $table"); 
     echo '<tr>'; 
     while ($row3 = $column->fetch_row()) { 
      echo '<th>' . $row3[0] . '</th>'; 
     } 
     echo '</tr>'; 
     while ($row2 = $result1->fetch_row()) { 
      echo '<tr>'; 
      foreach ($row2 as $key => $value) { 
       echo '<td>', $value, '</td>'; 
      } 
      echo '</tr>'; 
     } 
     echo '</table><br />'; 
    } 
} 
echo '<br><br><br><br>'; 

$conn->close(); 

?> 
</html> 

有此设置一些安全问题,但。

  • 您可能想散列密码以获得更好的安全性。你可以阅读更多关于here
  • 它很容易SQL Injection
  • 你可能不想回显包含你的密码的表。
  • 该表单没有提交的CSRF token。这不是一个大问题,但有人可以用它来垃圾你的网站。例如,他们会在其网站上创建几个 s,以提交发送垃圾邮件用户的请求。
  • 由于它打印行,因此易受XSS影响。有人可以在数据库中插入类似<script>alert(1)</script>的东西,并将其打印到页面并触发警报。我建议用htmlspecialchars($html)编码响应。
0

,如果没有连接问题,您应该执行查询插入数据到数据库中。

你只需要查询字符串$sql但从不执行。

此行后; $sql = "INSERT INTO Users (userID, prenume, nume, nicknamee, parola, tara) VALUES (5, 'John', 'Snow', '$_POST[nicknamee]', '$_POST[password]', 'Romania')";

尝试;

if ($conn->query($sql) === TRUE) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 
+0

通常打印SQL错误不是一个好主意。在开发过程中没问题,但请记住,如果您打算公开网站,则应删除错误打印。 – Arin