Как отправить данные в базу 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 Ваши данные не добавлены.

что я делаю не так?

php
mysql
insert

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>
2

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

Sign up or Log in to write an answer