Как сделать домашнее задание с player.php в курсе php/mysql?
Не могу никак решить задачу.
"Сделайте так, чтобы можно было добавлять данные в mysql таблицу music через html форму."
помогите пожалуйста
11 ответов
А что конкретно у вас не получается? Там есть урок про получения данных из html формы и есть урок вставки и вывода данных из базы.
Я сначала научился получать данные из хтмл формы и выводить их в браузер, потом вставку делать и вывод из базы, правда долго со вставкой в базу разбирался.
1) Если убрать функционал вставки в базу данный и вывести данные из html формы - данные выводятся?
2) Если в функцию вставки в базу данных написать числовые и строчные значения, данные вставляются? Например:
$query = "INSERT INTO music VALUES(null, 'Creep', 'Radiohead')";
Если вставляются - значит, неправильно из формы данные получаете, если с данными из формы корректные - значит с sql запросом что-то не так или со структурой базы данных.
Как-то так:
Файл db.php
<?php
$mysqli = new mysqli('127.0.0.1', 'root', '', 'kinomonster');
if (mysqli_connect_errno()) {
print_f("Соединение не установлено", mysql_connect_error());
exit();
}
$mysqli->set_charset('utf8');
?>
Файл player.php
<?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;
/**
* Вставку в базу данных
*/
$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>
SQL-дамп базы (kinomonster.sql)
-- phpMyAdmin SQL Dump
-- version 4.5.1
-- http://www.phpmyadmin.net
--
-- Хост: 127.0.0.1
-- Время создания: Декабрь 28 2017 г., 16:32
-- Версия сервера: 10.1.9-MariaDB
-- Версия PHP: 5.6.15
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- База данных: `kinomonster`
--
-- --------------------------------------------------------
--
-- Структура таблицы `music`
--
CREATE TABLE `music` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`author` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Индексы сохранённых таблиц
--
--
-- Индексы таблицы `music`
--
ALTER TABLE `music`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT для сохранённых таблиц
--
--
-- AUTO_INCREMENT для таблицы `music`
--
ALTER TABLE `music`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Вопрос который я так и не смог решить. После того как мы внесли изменения в бузу данных, поля Name и Author , как бы очищаются, и если еще раз нажать добавить в БД внесутся пробелы, или если обновить страницу также в БД внесутся пробелы ( тут можно запретить пользователям обновлять страницу или нажимать кнопку "Назад" и повторно отправлять форму) - решение было найдено. Но вот решение с повторной отправкой и внесением в БД пробелов я не нашел.
<?php
$query = $mysqli->query('SELECT * FROM player');
while ( $row =mysqli_fetch_assoc($query)) {
echo $row['name'].$row['author']."<br>";
}
$name = NULL;
$author = NULL;
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;
$query = "INSERT INTO player VALUES(null, '$name', '$author')";
$mysqli->query($query);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<title>Document</title>
</head>
<body>
<div class="col-lg-6 col=lg-push-3 field">
<form action="http://kinomonster.com/player.php" method="POST" clas="form-group">
<legend>Исполнитель / Песни</legend>
<input type="text" name="name" placeholder="name">
<input type="text" name="author" placeholder="author">
<button type="submit" class="btn">Добавить</button>
</form>
<table class="table table-striped ">
<?php $querry = $mysqli->query('SELECT * FROM player'); ?>
<?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>
<?php
if (isset ($_POST['name']) && isset($_POST['author'])){
// Переменные с формы
$name = $_POST['name'];
$author = $_POST['author'];
// Параметры для подключения
$db_host = "localhost";
$db_user = "user"; // Логин БД
$db_password = "123"; // Пароль БД
$db_base = 'kinomonster'; // Имя БД
$db_table = "music"; // Имя Таблицы БД
//Подключение к базе данных
$mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);
// Если есть ошибка соединения, выводим её и убиваем подключение
if ($mysqli->connect_error) {
die('Ошибка : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
//Запрос для записи в базу данных
$result = $mysqli->query("INSERT INTO ".$db_table." (name,author) VALUES ('$name','$author')");
//Проверка выполнения запроса
if ($result == true) {
echo "Информация занесена в базу данных";
}else{
echo "Информация не занесена в базу данных";
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form method="POST" action="">
<input type="text" name="name" placeholder="название композиции">
<input type="text" name="author" placeholder="название исполнителя">
<input type="submit" value="отправить">
</form>
</body>
</html>
Где именно исползовать дамп базы данных?
Весь код, кроме дампа не работает. Возможно из-за этого дампа.
А возможно, что он вообще не работает!
Жду ответа!
Заранее благодарен!
Всем привет!
У меня проблема с локальным хостингом, поэтому использую пустую ссылку, но надеюсь, что данный код вам поможет разобраться в данной проблеме!
<?php
//Открываем таблицу в MYSQL
$mysqli = new mysqli('localhost', 'root', '', 'music');
if (mysqli_connect_error()) {
printf("Соединение не установлено", mysqli_connect_error());
exit();
}
//Кодировка
$mysqli->set_charset('utf8');
//Извлекаем все элементы таблицы
$query = $mysqli->query('SELECT * FROM songs');
while ($row = mysqli_fetch_assoc($query)) {
echo "Композиция".$row['name']." "."Автор".$row['author']."<br>";
}
//Объявляем переменные
$name = NULL;
$author = NULL;
//Извлекем из HTML-формы
/*if (isset($_POST['name'])) {
$nameFilter = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
//echo $nameFilter;
$name = $nameFilter;
}
//$name = $_POST['name'];
if (isset($_POST['author'])) {
$authorFilter = htmlspecialchars($_POST['author'], ENT_QUOTES, 'UTF-8');
//echo $authorFilter;
$author = $authorFilter;
}*/
//$author = $_POST['author'];
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="#" method="post">
<input type="text" name="name" placeholder="Название композиции"><?php
//Извлекем из HTML-формы
if (isset($_POST['name'])) {
$nameFilter = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
//echo $nameFilter;
$name = $nameFilter;
}
?>
<input type="text" name="author" placeholder="Имя автора(группы)"><?php
if (isset($_POST['author'])) {
$authorFilter = htmlspecialchars($_POST['author'], ENT_QUOTES, 'UTF-8');
//echo $authorFilter;
$author = $authorFilter;
}
?>
<input type="submit" value="Добавить">
</form>
<?php
//Добавляю проверку, удаляю пустые значения и, в случае успешности проверки, вставляю данные!
if ($name == NULL) {
$query = "DELETE FROM songs WHERE name = NULL";
//$query = "DELETE FROM songs WHERE author = NULL";
} else {
$query = "INSERT INTO songs VALUES(NULL, '$name', '$author')";
$mysqli->query($query);
}
?>
</body>
</html>
Тимур, поставь XAMPP с версией PHP 7.1. У меня такой XAMPP, код полностью этот работает. Если у тебя уже стоит php версии 7.1 и не работает, возможно дамп базы как-то не так накатил.
Тимур, какую у тебя ошибку показывает этот код когда его запускаешь? Что именно не работает?
при вводе в html форме не добавляются данные которые там вводишь
МОЖЕШЬ ПОЖАЛУЙСТА СКИНУТЬ ОБРАЗЕЦ
БОЛЬШОЕ СПАСИБО