【问题标题】:My PHP file wont insert HTML data into a MySql database table我的 PHP 文件不会将 HTML 数据插入到 MySql 数据库表中
【发布时间】:2020-05-14 04:31:25
【问题描述】:

在 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

【问题讨论】:

  • 调试控制台用于调试器输出。你配置过 Xdebug 吗?您是否使用断点和其他东西开始调试会话?如果您只想检查 echo 打印的内容,您只需查看浏览器即可。
  • 关于您的编辑...您是否在询问当查询崩溃时如何在 Visual Studio Code 中查看 Something weird happened?还是这个问题与编辑无关?
  • 两者兼而有之,我在编辑器中没有看到任何关于 php 的内容,最初的问题是为什么代码没有将数据插入到 mysql 表中

标签: mysql php visual-studio-code


【解决方案1】:

嗯..

  1. 表和列名不属于单引号,因为 mysql 使用单引号来标记字符串数据和类似数据(如日期时间)。您应该使用backticks 来封装表名和列名。

表`tableName`....

  1. 请阅读 sql-injection - 您手动构建查询字符串的方法邀请 sql-injection(在您的情况下,没有什么可以阻止恶意用户在密码字段中键入 SQL 命令......他只是types "'); drop table users; -- "(不带双引号)并且您的数据库中断..作为示例)https://www.w3schools.com/sql/sql_injection.asp
  2. 明文密码...请使用完善的散列方法,如 sha-256

您可能想使用 mysqli 提供的准备好的 (sql-) 语句.. 但我建议您花时间学习 PDO

除了您的调试问题之外-Visual Studio 不仅提供调试..而且还提供输出视图...您应该能够在其中看到您的 echo / var_dump ... 您还应该在 PHP 中使用 try-catch 异常处理,以防您的数据库操作失败 - 从创建数据库连接(如果 db-server 关闭,则可能会失败)到由于语法错误而导致查询失败,例如您的情况.. . 如果那真的是您使用的代码,它会因为提到的提示 1) 而中断 - 如果您想指示表名和列名.. 使用 `(反引号)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2019-01-12
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多