Мой PHP файл не вставит данные HTML в таблицу базы данных MySql - PullRequest
0 голосов
/ 28 января 2020

В 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> 

, а затем отправляет ее в файл php с именем Data. 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);
}
?>

Я не знаю, как просмотреть php echos или mysql ошибки в коде. Я использую базовый проект html, и они не отображаются в консоли отладки. Я могу отправить, как выглядит база данных, если это необходимо.

РЕДАКТИРОВАТЬ: Новый php код с PDO, все еще не работает:

<?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. Если у вас есть эта проблема go в вашем файле php.ini, отредактируйте ее, чтобы избавиться от точки с запятой до:
; extension=pdo_mysql
Это действительно должно быть: extension=pdo_mysql

1 Ответ

0 голосов
/ 28 января 2020

Ну ..

  1. имена таблиц и столбцов не заключаются в одинарные кавычки, так как они используются mysql для пометки строковых данных и аналогичных им (например, datetime). Вы должны использовать backticks для включения имен таблиц и столбцов.

table `tableName` ....

пожалуйста, ознакомьтесь с sql -инъекцией - ваш метод построения строки запроса вручную предлагает для sql -инъекции (в вашем случае ничто не удерживает злоумышленника от ввода SQL -команд в пароле- поле ... он просто набирает "'); удаляет таблицу пользователей; -" (без двойных кавычек) и ваша база данных разрывается .. как пример) https://www.w3schools.com/sql/sql_injection.asp пароли в виде открытого текста ... пожалуйста, используйте хорошо зарекомендовавший себя метод хеширования, такой как sha-256

, вы можете использовать подготовленные (sql -) операторы, которые предлагает mysqli ... но я предлагаю вам воспользоваться время для изучения PDO

Кроме того, для вашего вопроса отладки - Visual Studio предлагает не только отладку ..., но и представление вывода ..., где вы должны видеть ваш echo / var_dump ... Вы должны также используйте обработку исключений try-catch в PHP, если ваша база данных завершается неудачно - начиная с создания соединения с базой данных (которое может завершиться ошибкой, если db-сервер не работает) с ошибкой запроса из-за синтаксической ошибки li ke в вашем случае ... если это действительно ваш используемый код, он ломается из-за упомянутой подсказки 1) - если вы хотите указать имена таблиц и столбцов .. используйте `(back-ticks)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...