Как отправить данные в базу mysql через html-форму с помощью php?
3
Подскажите пожалуйста как отправить данные в базу mysql через html-форму с помощью PHP в домашнее задание 56 php/mysql
<?php $mysqli = new mysqli('localhost','root','','kinomonster'); if (mysqli_connect_errno()) {
printf("Соединение не установлено",mysqli_connect_error());
exit();
}$mysqli->set_charset('utf8');$query = $mysqli->query('SELECT * FROM music');while ( $row = mysqli_fetch_assoc($query)) {
echo $row['name'].$row['author']."<br>";}$name = $_POST['name'];
$author = $_POST['author'];$result = mysqli_query("INSERT INTO music (name, author) VALUES ('$name', '$author')");
//Если запрос пройдет успешно то в переменную result вернется true
if($result == 'true')
{echo "Ваши данные успешно добавлены";}
else {echo "Ваши данные не добавлены";}$mysqli->close();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body> <form action="" method="post">
<input type="text" name="name" placeholder="название песни">
<input type="text" name="author" placeholder="исполнитель">
<input type="submit" value="Отправить">
</form>
</body>
</html>
Выдает ошибки:
Notice: Undefined index: name in C:\xampp\htdocs\kinomonster\player.php on line 26Notice: Undefined index: author in C:\xampp\htdocs\kinomonster\player.php on line 27Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\xampp\htdocs\kinomonster\player.php on line 29 Ваши данные не добавлены.
что я делаю не так?
3 ответов
5
Такой код должен получится примерно
<?php
/**
* Код PHP выносим вверх. Подключение к базе данных выносим в отдельный файл db.php
* и вставляем файл функцией include
*/
include('db.php');
/* Заводим переменные name и author и присваиваем им пустые значения, на тот случай, если захотим их где-то вывести в html коде. */
$name = "";
$author = "";
/* Проверяем, существуют ли переменные $_POST и если существуют, тогда обрабатываем данные POST от
* пользователя и переопределяем переменные $name и $author, присвоив им отфильтрованные значения от пользователя
*/
if(isset($_POST['name']) && isset($_POST['author'])) {
$nameFilter = htmlspecialchars($_POST ['name'], ENT_QUOTES, 'UTF-8');
$authorFilter = htmlspecialchars($_POST ['author'], ENT_QUOTES, 'UTF-8');
$name = $nameFilter;
$author = $authorFilter;
/**
* Вставку в базу данных тоже делаем в этом блоке if.
*/
$query = "INSERT INTO music VALUES(null, '$name', '$author')";
$mysqli->query($query);
}
?>
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!--Main Style-->
<link href="css/style.css" rel="stylesheet">
<title>Админка</title>
</head>
<body>
<div class="col-lg-6 col-lg-push-3 field">
<!-- Форму выносим выше, так как она не нужна в таблице -->
<form action="player.php" method="post" clas="form-group">
<legend>Исполнители / Песни</legend>
<input type="text" name="name" placeholder="<?php echo $name;?>">
<input type="text" name="author" placeholder="<?php echo $author;?>">
<button type="submit" class="btn">Отправить</button>
</form>
<table class="table table-striped ">
<?php $querry = $mysqli->query('SELECT * FROM music'); ?>
<!--
* Чтобы избежать ошибок, когда у нас пустая база данных, нужно поставить дополнительные проверки
* if($querry) - т.е. если запрос выполнился и пришел результат, тогда делаем while.
-->
<?php if($querry): ?>
<?php while ($row = mysqli_fetch_assoc($querry)): ?>
<tr>
<td><?php echo $row['name']; ?></td>
<td><?php echo $row['author']; ?></td>
</tr>
<?php endwhile; ?>
<?php endif; ?>
</table>
</div>
<?php
$mysqli->close();
?>
</body>
</html>
3
Здесь уже обсуждали: https://fructcode.com/ru/qa/pochemu-pri-kajdom-obnovlenii-tablisi/
2
спасибо, получилось, только при каждом обновлении страницы добавляется в таблицу последнее значение.Почему так происходит?