Php/ mysql. как выполнить домашнее задание player.php?

3

Создал файл player.php, создал таблицу данных в phpmyadmin. Написал код по выведению данных на странице в браузере. Ничего не показывает... Но когда этот код подставляю в index.php, то всё работает. 

<?php

$mysqli = new mysqli('localhost', 'root', '', 'kinomonster');
	if (mysqli_connect_errno()) {
		prinf("Соединение не установлено", mysql_connect_error());
		exit();
	}
	$mysqli->set_charset('utf8');
	$query = $mysqli->query('SELECT * FROM music');
	while ($row = mysqli_fetch_assoc($query)) {
		echo $row['author'].$row['name']."<br>";
	}
	$mysqli->query($query);
?>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	
</body>
</html>
php
mysql

28 ответов

6

Вот так должно быть:

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

Там в примере файл player.php и html-форме action player.php, иначе либо в action переименовать нужно страницу обработки формы, либо оставить все как есть.

5

Здравствуйте, Валерий

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

Если у вас 1000 страниц и на всех 1000 страницах вы прописали подключение к базе данных и однажды перенесли ваш проект на другой сервер, а там доступы к базе другие и в этом случае вам придется изменить реквизиты подключения на 1000 страницах, что не очень удобно.  

Обычно подключение к базам данных реализуется в виде паттерна Singleton, который позволяет иметь всего одно единое подключение. В уроках по PHP-фреймворку станет более понятно какой должна быть архитектура веб-сайта. 

1

Здесь задается в каком файле должен быть обработчик формы:

<form action="player.php" method="post" clas="form-group">

0

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

1

Дамп базы данных из ответа развернул или свою базу данных оставил? Нужно из ответа дамп развернуть, в общем весь код возьми, как я выше писал, вместе с дампом и будет работать.

1

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

if($_POST['name'] != '' && $_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);
}
0

если сам не решил и попросил подсказки значит ли что успеха не видать в дальнейшем?)

0

Это просто кошмар, последний код успешно забивает в базу данных. А как все таки вывести в этом же?

0

Спасибо, но таблица не активируется, только в плаёсхолдер мои записи попадают

0

Тоже ооочень долго думала. Читала документацию. В итоге тоже пришла ко мнению, что нужен разбор урока. Код написала следующий: 

<?php
	$mysqli = new mysqli('localhost', 'root', '', 'kinomonster');
	if(mysqli_connect_errno()) {
		prinf("Соединение не установлено", mysqli_connect_error());
		exit();
	}
	$mysqli->set_charset('utf8');

	if (isset($_POST['name']) && isset($_POST['autor'])) {
		$name = mysqli_escape_string($mysqli, $_POST['name']);
		$autor = mysqli_escape_string($mysqli, $_POST['autor']);
		$mysqli->query("INSERT INTO music (name, autor) VALUES ('{$name}', '{$autor}')");
	}

	$query = $mysqli->query('SELECT * FROM music');
	while ( $row = mysqli_fetch_assoc($query) ) {
		echo $row['name'].$row['autor']."<br>";
	}

	$mysqli->close();
?>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>

<body>

	<form action="/player.php" method="post">
		<input type="text" name="name" placeholder="название песни">
		<input type="text" name="autor" placeholder="исполнитель">
		<input type="submit" value="добавить">
		
	</form>


	
</body>
</html>








По поводу form action="/player.php" method="post" дейтвительно / нужно указывать страницу на которой должен работать запрос, иначе только на index и работает.

В целом задание конечно дает раскачаться мозгам =)

p.s. да у меня не authot -> autor (ну так получилось)

0

Подскажите, как реализовать редактирование выведенных данных из базы данных непосредственно из html формы кнопкой?

0

Антон, подскажи как решил эту задачу? У меня тоже результат отображается только в index.php, как настроить чтоб работало через player.php ?

0

))) это все нам щас чуть позже объяснят

0

Добрый день. 

Подскажите, пожалуйста, почему при добавлении что через форму, что непосредственно в майадмине, появляется 2 одинаковых строки?

UPD - походу глюк был, вчера задваивалось, а сегодня уже нет.

7

Да, косяк с этим домашним заданием. Много вопросов возникло.

Не помню, чтобы рассказывали, как прикрутить форму к БД. В массивы мы отправляли данные, но с БД форму не дружили.

Дальше возникла проблема с action, потому что в уроке мы ставили там слеш и слышали "Это мы разберем потом", а когда до этого доходит, то как бы уже должны сами понять.  Почитав в интернете, узнал, что за место слеша идет ссылка на обработчик, в моем случае на save.php. В вариантах выше php код для отправки данных в базу стоит в файле player.php.

С выводом данных из БД проблем не возникло, кусок кода уже был в уроках.

Выпустите разбор домашних заданий с рассказом, как надо, как правильно. Чтобы можно было сесть и сравнить, что мы написали и как Вы это предлагаете делать. Подходы у всех разные и чем больше мы знаем вариантов решения тех или иных задач, тем легче нам будет в будущем. 

1

Согласен с Николаем Дмитриевым, может надо сделать доп видео к этому ДЗ, у меня тоже возникли вышеназванные трудности. Тем более что в видео-уроках не говорилось подключение к базе данных создать в виде отдельного файла db.php

0

<?php 

    $mysqli = new mysqli ('localhost','root','', 'kinomonster');

    if (mysqli_connect_errno()) {
        printf("Соединение не установлено", mysqli_connect_errno());
        exit();
    }

    $mysqli->set_charset('utf8');
if (isset($_POST['name']) && isset($_POST['authour'])) {      
    $mysqli = new mysqli('localhost','root','', 'kinomonster');
    if($mysqli->connect_error){
        die("Ошибка: " . $mysqli->connect_error);
    }

    $name = $mysqli->real_escape_string($_POST['name']);
    $authour = $mysqli->real_escape_string($_POST['authour']);
    $query = "INSERT INTO music VALUES (null,'$name', '$authour')";
    if($mysqli->query($query)){
        echo "Данные успешно добавлены";
    } else{
        echo "Ошибка: " . $mysqli->error;
    }

    $mysqli->close();
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Player</title>
</head>
<body>
    <form action="player.php" method="post">
    <p>Имя:
    <input type="text" name='name' /></p>
    <p>Автор:
    <input type="text" name='authour' /></p>
    <input type="submit" value="Добавить">
</form>    
</body>
</html>

1

<?php
if (isset($_POST['name'])) {
$nameFilter = htmlspecialchars($_POST["name"], ENT_QUOTES, "UTF-8");
$name=$nameFilter;
}
if (isset($_POST['author'])) {
$nameFilt = htmlspecialchars($_POST["author"], ENT_QUOTES, "UTF-8");
$author=$nameFilt;

$mysqli = new mysqli('127.0.0.1', 'root', '', 'kinomonster');
if (mysqli_connect_errno()) {
printf("соединение не установлено, msqli_connect_error");
exit();
}
$mysqli->set_charset('utf8');
$query = "INSERT INTO Mus VALUES('1', '$name', '$author')";

$mysqli->query($query);
$mysqli->close();
}
?>

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="player.php" method="post">
<input type="text" name="name" value="">
<input type="text" name="author" value="">
<input type="submit" name="" value="Отправить">
</form>
</body>
</html>

2

Все работает только в файле index.php, а в файле music.php компьютер как будто ничего не видит... Не знаю, почему.

3

Спасибо, у меня всё получилось!

1

И ещё вопрос, почему нужно выносить подключение к базе данных в отдельный файл?

2

Спасибо !

0

Все работает только в файле index.php, а в файле music.php компьютер как будто ничего не видит... Не знаю, почему. 

Так и не понял ответа на данный вопрос.

1

Ну так я так и сделал.

<form action="player.php" method="post">

Но результат отображается только в index.php

Для чего тогда было создавать "player.php"?

Ну или следовало объяснить как настроить отображение на player.php , смотрю я тут не один втыкаю по данному заданию.

Уже понял, но тяжко мне это далось)

0

Создал таблицу "music", следом создал поля: id, name, author. Ввел через phpMyAdmin первого исполнителя с названием трека. Далее создал файл: db.php c подключением к базе данных. В отдельном файле player.php записал вроде бы правильный код, но В БАЗУ НИЧЕГО НЕ ДОБАВЛЯЕТСЯ, а на страницу выводится только созданный изначально исполнитель-название. Подскажите пожалуйста что может быть не так?

<?php 

include('db.php');

 $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">
 	<title>Document</title>
 </head>
 <body>

 	<div>
 		<form action="player.php" method="POST">
 			<input type="text" name="name" placeholder="<?php echo $name;?>">
 			<input type="text" name="author placeholder="<?php echo $author?>">
 			<input type="submit" volue="отправить">
 		</form>
	 	<table>
			<?php $querry = $mysqli->query('SELECT * FROM music'); ?>
			<?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

Ещё к решению student_Cx8W3815 можно добавить проверку на пустые значения в форме:

    if(isset($_POST['name']) && isset($_POST['author'])) {

        $nameFilter = htmlspecialchars($_POST ['name'], ENT_QUOTES, 'UTF-8');
        $authorFilter = htmlspecialchars($_POST ['author'], ENT_QUOTES, 'UTF-8');

        if (empty($nameFilter) && empty($authorFilter)) {
          echo 'Все поля должны быть заполнены!';
        } else {
            $name = $nameFilter;
            $author = $authorFilter;

            /**
            * Вставку в базу данных
            */

            $query = "INSERT INTO music VALUES(null, '$name', '$author')";
            $mysqli->query($query);
          }
    }
0

Создал файл player.php -> написал код -> обновляю страницу в браузере -> выводятся данные с файла index.php  и тут я завис.... т.к в уроке то не было пояснений как быть в таком случае... Но нашёл выход раз гора не идёт к Магомеду то Магомед пойдёт к горе)) и тут мне нужен совет, корректно ли так делать:

я просто в файл index.php добавил запись

<?php
include('player.php');
?>

И так по аналогии если будут создаваться другие файлы то в index.php будут соответствующие подключения:

<?php
include('player.php');
include('xmltest.php');
?>

Будут ли в дальнейшем проблемы, с такой организацией, если да то какие?

Sign up or Log in to write an answer