簡體   English   中英

我的 PHP 文件不會將 HTML 數據插入到 MySql 數據庫表中

[英]My PHP file wont insert HTML data into a MySql database table

在 Visual Studio Code 中,我正在創建一個網站。 我的 HTML 頁面有一個獲取用戶數據的表單:

<form action="Data.php" style="position: fixed; top: 60px; left: 5px;" method="POST">
  <fieldset>
    <legend>Create Account</legend>
    Username: <br>
    <input type="text" name="username">
    <br>
    Email:<br>
    <input type="text" name="email">
    <br>
    Password:<br>
    <input type="text" name="password">
    <br><br>
    <input type="submit" name ="Submit" value="Create">
    </fieldset>
</form> 

然后將其發送到名為 Data.php 的 php 文件:

<?php
if(isset($_POST['Submit'])){
    $host = "localhost:3306";
    $username = "Arthos";
    $password = "Pancake101!";
    $database = "userinfo";

    $user = $_POST['username'];
    $email = $_POST['email'];
    $pass = $_POST['password'];

    $connect = mysqli_connect($host, $username, $password, $database);
    $query = "INSERT INTO 'users'('username', 'email', 'password') VALUES ("'.$user.'", "'.$email.'", "'.$pass.'")";

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

    mysqli_close($connect);
}
?>

我不知道如何在 vs 代碼中查看 php 回顯或 mysql 錯誤。 我正在使用一個基本的 html 項目,它們沒有出現在調試控制台中。 如果需要,我可以發送數據庫的外觀。

編輯:帶有 PDO 的新 php 代碼,仍然無法正常工作:

<?php
echo "Made it!";
$dsn = "mysql:host=localhost;dbname=userinfo;charset=utf8mb4";
  $options = [
    PDO::ATTR_EMULATE_PREPARES   => false, // turn off emulation mode for "real" prepared statements
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION, //turn on errors in the form of exceptions
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, //make the default fetch be an associative array
  ];
  try {
      $pdo = new PDO($dsn, "username", "password", $options);
      $stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
      $stmt->execute([$_POST['username'], $_POST['email'], $_POST['password']]);
      $stmt = null;
  } catch (Exception $e) {
      error_log($e->getMessage());
      exit('Something weird happened'); //something a user can understand
  }
    ?>

編輯 2:我運行了 php 文件。 我不得不弄亂一些奇怪的 Visual Studio 代碼,它顯然找不到我的php.exe文件,所以現在可以工作了。
但現在我收到錯誤:

我的 php 文件“找不到驅動程序”,所以我現在必須調查一下。
我沒有對上面Data.php副本中可以看到的代碼進行任何更改。

對於最后一個問題,我需要取消注釋php.ini的一行。 如果你有這個問題進入你的php.ini文件,編輯它,去掉之前的分號:
; extension=pdo_mysql
它真的應該是: extension=pdo_mysql

好 ..

  1. 表名和列名不屬於單引號,因為 mysql 使用它來標記字符串數據和類似的(如日期時間)。 您應該使用backticks將表名和列名括起來。

表`tableName`....

  1. 請閱讀 sql-injection - 您手動構建查詢字符串的方法會邀請 sql-injection(在您的情況下,沒有什么可以阻止惡意用戶在密碼字段中輸入 SQL 命令......他只需鍵入“' ); 刪除表用戶; -- " (沒有雙引號) 和你的數據庫中斷.. 作為一個例子) https://www.w3schools.com/sql/sql_injection.asp
  2. 明文密碼...請使用完善的散列方法,如 sha-256

您可能想使用 mysqli 提供的准備好的 (sql-) 語句.. 但我建議您花時間學習 PDO

除了您的調試問題 - Visual Studio 不僅提供調試 .. 還提供輸出視圖...您應該能夠看到您的 echo / var_dump ... 您還應該在 PHP incase 中使用 try-catch 異常處理您的數據庫操作失敗 - 從創建數據庫連接(如果 db-server 關閉時可能會失敗)開始到由於語法錯誤導致查詢失敗,就像在您的情況下一樣......如果那真的是您使用的代碼,它會中斷,因為提到的提示 1) - 如果要指示表名和列名.. 使用 `(反引號)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM