2016-12-14 199 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