[英]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
好 ..
backticks
將表名和列名括起來。表`tableName`....
您可能想使用 mysqli 提供的准備好的 (sql-) 語句.. 但我建議您花時間學習 PDO
除了您的調試問題 - Visual Studio 不僅提供調試 .. 還提供輸出視圖...您應該能夠看到您的 echo / var_dump ... 您還應該在 PHP incase 中使用 try-catch 異常處理您的數據庫操作失敗 - 從創建數據庫連接(如果 db-server 關閉時可能會失敗)開始到由於語法錯誤導致查詢失敗,就像在您的情況下一樣......如果那真的是您使用的代碼,它會中斷,因為提到的提示 1) - 如果要指示表名和列名.. 使用 `(反引號)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.