Занесение данных из формы в базу данных?
Пытаюсь сделать подобие формы регистрации но появляется ошибка Ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' passwd, Вася)' at line 1
форма
<form method="post" action="cradmin.php"> <label for="id">id</label> <input type="text" id="id" name="id" required> <label for="username">Username</label> <input type="text" id="username" name="username" required> <label for="password">Password</label> <input type="password" id="password" name="password" required> <label for="name">name</label> <input type="text" id="name" name="name" required> <button type="submit">Register</button> </form> |
<form method="post" action="cradmin.php"> <label for="id">id</label> <input type="text" id="id" name="id" required> <label for="username">Username</label> <input type="text" id="username" name="username" required> <label for="password">Password</label> <input type="password" id="password" name="password" required> <label for="name">name</label> <input type="text" id="name" name="name" required> <button type="submit">Register</button> </form>
php обработчик
<?php $conn = new mysqli("зачем", "вам", "это", "знать?"); if($conn->connect_error){ die("Ошибка: " . $conn->connect_error); } $name = $_POST["name"]; $login = $_POST["login"]; $pass = $_POST["password"]; $id = $_POST["id"]; $sql = "INSERT INTO admins (id, login, pass, name) VALUES ($id, $login, $pass, $name)"; if($conn->query($sql)){ echo "Данные успешно добавлены"; } else{ echo "Ошибка: " . $conn->error; } $conn->close(); ?> |
<?php $conn = new mysqli("зачем", "вам", "это", "знать?"); if($conn->connect_error){ die("Ошибка: " . $conn->connect_error); } $name = $_POST["name"]; $login = $_POST["login"]; $pass = $_POST["password"]; $id = $_POST["id"]; $sql = "INSERT INTO admins (id, login, pass, name) VALUES ($id, $login, $pass, $name)"; if($conn->query($sql)){ echo "Данные успешно добавлены"; } else{ echo "Ошибка: " . $conn->error; } $conn->close(); ?>
ну и запрос
INSERT INTO admins (id, login, pass, name) VALUES ($id, $login, $pass, $name) |
INSERT INTO admins (id, login, pass, name) VALUES ($id, $login, $pass, $name)
Дополнительно:
Надо выкинуть на помойку учебник, из которого взят этот код, пройти по ссылке, и написать нормальный на основе информации оттуда
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); $conn = new mysqli("зачем", "вам", "это", "знать?"); $name = $_POST["name"]; $login = $_POST["login"]; $pass = $_POST["password"]; $sql = "INSERT INTO admins (login, pass, name) VALUES (?,?,?)"; $stmt = $conn->prepare($sql); $stmt->bind_param("sss", $login, $pass, $name); $stmt->execute(); $id = $conn->insert_id; header("Location: profile.php?id=$id"); |
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); $conn = new mysqli("зачем", "вам", "это", "знать?"); $name = $_POST["name"]; $login = $_POST["login"]; $pass = $_POST["password"]; $sql = "INSERT INTO admins (login, pass, name) VALUES (?,?,?)"; $stmt = $conn->prepare($sql); $stmt->bind_param("sss", $login, $pass, $name); $stmt->execute(); $id = $conn->insert_id; header("Location: profile.php?id=$id");
Пара замечаний
- отдельная таблица админов обычно не делается, достаточно общей таблицы пользователей
- id вставлять не надо, его должна генерировать БД
- после успешной обработки прямого POST запроса обязательно должен быть редирект. Обычно это либо созданная учетка, или страница входа или список пользователей или что-то ещё
- при обработке прямого запроса никаких echo в коде быть не должно
-
id вставлять не надо, его должна генерировать БД
В текущем контексте, может и так. Но вообще от ситуации зависит.
Иногда автоинкремент может и усложнить жизнь. - Роман Чубич, все верно, одно из самых важных умений в интернете - это высказать свое авторитетное мнение.
- у меня админ панель там user`ов как токовых пока нет
- $stmt->bind_param("ssss", $login, $pass, $name);
а что за "ssss" - Спасибо большое ваш ответ очень помог
- По ссылке написано. Это тип передаваемых переменных. Я кстати забыл удалить одну s - их должно быть ровно столько, сколько переменных
- Ипатьев, может быть. Всегда полагал, что ценность мнения определят корреляции с объективной реальностью, а не авторитетность.
- Роман Чубич, вот как раз с корреляцией-то и проблемы. Вы пишете комментарий про какую-то свою воображаемую реальность. Не имеющую отношения ни к конкретному заданному вопросу, ни даже к общепринятым подходам. Да, из каждого правила бывают исключения. Вообще из любого. Это не значит, что правила не нужно озвучивать или что для каждого надо добавлять миллилон оговорок. Тем более настолько неуместных.
В итоге получается, что единственная цель вашего комментария - это показать окружающим, что вы краем уха однажды слышали про такой исключительный случай. Причем с 90% вероятностью это "осложнение жизни" было вызвано не объективными причинами, а банальной кривизной рук.
- и echo я использую для того чтобы админ знал результат ведь это админ панель и не у всех админов есть доступ к бд в принципе
- stasbombit, да при при чем здесь доступ к БД вообще
Смотрите
При обработке прямого POST запроса всегда должен быть редирект
это означает, что в коде не должно быть никакого вывода
это правила, неукоснительные для соблюденияЕсли вам кого-то нужно о чем-то проинформировать, значит это надо сделать другим способом.
Причем в данном случае никакого специального информирования не нужно. Принцип канарейки.
Если при добавлении записи была ошибка, то пользователь увидит сообщение об ошибке.
Если же ошибки не было, то это означает, что запись была добавлена успешно. Всё просто.Если пользователь туповат, его можно перенаправить на только что созданную запись. Я думаю, тут любой сообразит, что если он видит добавленную запись, то она была добавлена успешно.
Ну и для совсем тупых используются так называемые flash messages, которые явно сообщают о добавлении, но ПОСЛЕ редиректа.
Либо вы можете добавлять аяксом, там код добавления может вывести результат своей работы.Но мне кажется, для вашего текущего уровня это будет лишнее.
Опуская замечания о sql-инъекциях, строковые значения должны быть в кавычках
$sql = "INSERT INTO admins (id, login, pass, name) VALUES ($id, '$login', '$pass', '$name')"; |
$sql = "INSERT INTO admins (id, login, pass, name) VALUES ($id, '$login', '$pass', '$name')";
А вообще, сначала прочитайте это https://habr.com/ru/articles/662523/
- Вот зачем писать заведомо неправильный код? а на правильный только ставить ссылку?
Это квинтессенция бессмысленности.
Если вам лень писать нормальный код - ну дайте ссылку в комментах. Но говнокод-то зачем плодить?Неужели трудно понять, что никаких "строковых значений" в этом коде нет? А есть переменные РНР. Которые передаются в запрос совершенно орпеделенным способом.
- Ипатьев, да, надо было вот так написать
неправильно
INSERT INTO admins (id, login, pass, name) VALUES (1, my_login, my_pass, Вася)
INSERT INTO admins (id, login, pass, name) VALUES (1, my_login, my_pass, Вася)
правильно
INSERT INTO `admins` (`id`, `login`, `pass`, `name`) VALUES (1, 'my_login', 'my_pass', 'Вася')
INSERT INTO `admins` (`id`, `login`, `pass`, `name`) VALUES (1, 'my_login', 'my_pass', 'Вася')
Все время забываю, что нужно досконально разжевывать, чтобы поняли мою мысль...
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для занесения данных из формы в базу данных вам понадобится использовать язык программирования (например, PHP) для обработки данных и SQL для работы с базой данных.
Прежде всего, вам необходимо создать HTML форму, в которой пользователь будет вводить данные. Например:
```html
```
Здесь мы создали форму с двумя полями: для имени пользователя и email. При отправке формы данные будут отправлены на файл process_form.php для обработки.
Теперь создадим файл process_form.php, где будем обрабатывать данные и заносить их в базу данных:
```php
connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Получение данных из формы
$username = $_POST['username'];
$email = $_POST['email'];
// Запрос на добавление данных в базу данных
$sql = "INSERT INTO users (username, email) VALUES ('$username', '$email')";
if ($conn->query($sql) === TRUE) {
echo "Данные успешно добавлены в базу данных";
} else {
echo "Ошибка: " . $sql . "
" . $conn->error;
}
$conn->close();
?>
```
В этом файле мы подключаемся к базе данных, получаем данные из формы, формируем SQL запрос на добавление данных в базу и выполняем этот запрос. Если запрос успешно выполнен, выводим сообщение об успешном добавлении данных, иначе выводим сообщение об ошибке.
Не забудьте создать таблицу в вашей базе данных с соответствующими полями (username, email) перед тем как начать заносить данные.
Таким образом, вы сможете успешно заносить данные из формы в базу данных, используя PHP и SQL.