#php #mysql
#php #mysql
Вопрос:
Я много лет работал с HTML, JS и CSS, и теперь мне нужно продолжить работу с MySQL (для чего я использую localhost phpMyAdmin) и PHP. Я пытаюсь отправить данные в свою базу данных. Но я не получаю ошибок и не знаю, что не так.
Вот мой register.php:
<?php
include('classes/db.php');
if (isset($_POST['createaccount'])) {
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
db::query('INSERT INTO users VALUES ('', :username, :email, :password)', array(':username'=>$username, ':email'=>$email, ':password'=>$password));
echo "Success!";
}
?>
<h1>REGISTER</h1>
<form action="register.php" method="post">
<input type="text" name"username" vlaue="" placeholder="Username">
<input type="email" name"email" vlaue="" placeholder="E-Mail">
<input type="password" name"password" vlaue="" placeholder="Password">
<input type="submit" name"createaccount" vlaue="Register">
</form>
И вот мой db.php , svaed под classes/db.php:
<?php
class db {
private static function connect() {
//db inf, username, pwd
$pdo = new PDO('mysql:host=127.0.0.1;dbname=emergencybase;charset=utf8', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
}
public static function query($query, $params = array()) {
$statement = self::connect()->prepare($query);
$statement->execute($params);
//$data = $statement->fetchAll();
//return $data;
}
}
Я не получаю ошибок, и в моей базе данных абсолютно ничего не отображается:
Пользователи базы данных:
Надеюсь, кто-нибудь сможет мне в этом помочь.
~ Мариус 🙂
Комментарии:
1. Вы уверены, что не получаете ошибок при выполнении вашего запроса. Ваш запрос кажется неполным (отсутствуют закрывающая скобка и ограничитель).
2. @HellBringer419 да. Не в консоли в инструментах разработки и даже не где-либо на экране. Или есть дополнительная консоль для ошибок PHP?
3. Нет.. Я так не думаю. Я имею в виду, что есть еще один, но вы должны были получить предупреждение. Так что, вероятно, нет
4. Как упоминалось в ответе,
name
атрибуты отсутствуют=
, плюс атрибутvlaue
должен бытьvalue
.
Ответ №1:
- Неправильный синтаксис для
name
атрибутов. Это должно бытьname="email"
неname"email"
, то же самое касается всех. Вы не получаете никакой ошибки, потому что код даже не выполняется,$_POST['createaccount']
не устанавливается. - В вашем
INSERT INTO
запросе вы также должны указать имена столбцов, чтобы запрос сталINSERT INTO users (username, email, password) VALUES (:username, :email, :password)
, предполагая, что у вас есть первичный ключ автоинкрементаid
в вашей таблице.
Комментарии:
1. Эй, спасибо за ваш ответ. Теперь это работает. Спасибо. Но у меня осталась одна проблема. В настоящее время мой запрос выглядит следующим образом:
db::query('INSERT INTO users (id, username, email, password) VALUES ('', :username, :email, :password)', array(':username'=>$username, ':email'=>$email, ':password'=>$password));
Но когда я заглядываю в свою базу данных, поле id каждый раз равно 0. Это проблема, потому что каждому пользователю нужен уникальный идентификатор.2. я предполагаю, что ваш идентификатор является целочисленным первичным ключом с автоматическим УВЕЛИЧЕНИЕМ. это означает, что вам не нужно включать его в свои запросы на вставку (что вы сейчас и делаете). Попробуйте это с точным запросом, который я предоставил, он должен работать и иметь увеличивающийся идентификатор, который уникален для каждого пользователя. Если вы используете другой тип идентификатора (скажем, UUID), вам придется сгенерировать его самостоятельно и включить в запрос.
3. Чем идентификатор всегда равен 0, как и раньше.
4.
CREATE TABLE users (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, email VARCHAR(50) NOT NULL UNIQUE );
попробуйте создать свою таблицу подобным образом и использовать мой запрос.5. Спасибо, теперь это работает. Это была неправильная настройка таблицы. Последний вопрос: Знаете ли вы хорошую статью о создании UUID. Потому что логически я должен сначала получить все существующие идентификаторы, а затем создать UUID, чтобы убедиться, что дубликатов нет. И я думаю, что это займет много времени.