Как сделать домашнее задание с player.php в курсе php/mysql?

12

Не могу никак решить задачу.

 "Сделайте так, чтобы можно было добавлять данные в mysql таблицу music через html форму."

помогите пожалуйста

mysql
php

11 ответов

2

А что конкретно у вас не получается? Там есть урок про получения данных из html формы и есть урок вставки и вывода данных из базы.

Я сначала научился получать данные из хтмл формы и выводить их в браузер, потом вставку делать и вывод из базы, правда долго со вставкой в базу разбирался. 

2

1) Если убрать функционал вставки в базу данный и вывести данные из html формы - данные выводятся?

2) Если в функцию вставки в базу данных написать числовые и строчные значения, данные вставляются? Например: 

$query = "INSERT INTO music VALUES(null, 'Creep', 'Radiohead')";

Если вставляются - значит, неправильно из формы данные получаете, если с данными из формы корректные - значит с sql запросом что-то не так или со структурой базы данных.

11

Как-то так:

Файл 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 */;
0

 Вопрос который я так и не смог решить. После того как мы внесли изменения в бузу данных, поля 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>
0
<?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>
0

Где именно исползовать дамп базы данных?
Весь код, кроме дампа не работает. Возможно из-за этого дампа.
А возможно, что он вообще не работает!
Жду ответа!
Заранее благодарен!

0

Всем привет!
У меня проблема с локальным хостингом, поэтому использую пустую ссылку, но надеюсь, что данный код вам поможет разобраться в данной проблеме!

<?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>
0

Тимур, поставь XAMPP с версией PHP 7.1. У меня такой XAMPP, код полностью этот работает. Если у тебя уже стоит php версии 7.1 и не работает, возможно дамп базы как-то не так накатил.

Тимур, какую у тебя ошибку показывает этот код когда его запускаешь? Что именно не работает?

3

при вводе в html форме не добавляются данные которые там вводишь 

2

МОЖЕШЬ ПОЖАЛУЙСТА СКИНУТЬ ОБРАЗЕЦ

2

БОЛЬШОЕ СПАСИБО

Sign up or Log in to write an answer