Вывод из БД mysql php

сделал два сайта, на одном сохраняется надпись, на другом выводиться. Объясните что и где написать, чтобы когда выводился текст, выводился последний введённый текст, а не все введённые тексты. Может вы знаете как удалять последний текст при сохранении нового, или другой метод, мне без разницы, главное чтобы не выводилось два текста.
кстати есть сайт, можете сами зайти понять проблему:
http://dnevnik.h1n.ru/

это код вывода сохранённого текста

<?php

$hm2 = $_POST['hm2'];
$hm3 = $_POST['hm3'];
$name = $_POST['name'];


    
  $host = 'localhost';  // Хост, у нас все локально
  $user = '**********';    // Имя созданного вами пользователя
  $pass = '**********'; // Установленный вами пароль пользователю
  $db_name = 'zxc';   // Имя базы данных
  $link = mysqli_connect($host, $user, $pass, $db_name); // Соединяемся с базой

  // Ругаемся, если соединение установить не удалось
  if (!$link) {
    echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error();
    exit;
  }  ?>

<!DOCTYPE html>
<html>
  <head>
    <title>Заголовок документа</title>
  </head>
  <body>
    <a href="http://dnevnik.h1n.ru/test/" class="gradient-button">Добавить д/з</a>
    <style>
        body {
  background: #d6eaf8;
}
.gradient-button {
  text-decoration: none;
  display: inline-block;
  color: white;
  padding: 10px 30px;
  margin: 10px 20px;
  border-radius: 10px;
  font-family: 'Montserrat', sans-serif;
  text-transform: uppercase;
  letter-spacing: 2px;
  background-image: linear-gradient(to right, #9EEFE1 0%, #4830F0 51%, #9EEFE1 100%);
  background-size: 200% auto;
  box-shadow: 0 0 20px rgba(0, 0, 0, .1);
  transition: .5s;
}
.gradient-button:hover {
  background-position: right center;
}
    </style>
    <br>
  </body>
</html>


<table {

    display: block;

    width: 100%;

    overflow-x: scroll;

    overflow-y: hidden;

    -ms-overflow-style: -ms-autohiding-scrollbar;

    -webkit-overflow-scrolling: touch;

}

 border="12" cellspacing="0" cellpadding="15" width="100%" height="13">
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="100%" height="1"><center>Понедельник</center></td>
<table border="1" cellspacing="0" cellpadding="15" width="100%" height="130">
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="1%" height="5">1</td>
<td border="1" cellspacing="0" cellpadding="15" width="15%" height="5">Русский язык</td>
<td> 

<?php
  $sql = mysqli_query($link, 'SELECT `ID`, `name` FROM `homework_table`');
  while ($result = mysqli_fetch_array($sql)) {
    echo " {$result['name']} <br>";
  }
?>

</tr>

<tr>
<td border="1" cellspacing="0" cellpadding="15" width="1%" height="5">3</td>
<td border="1" cellspacing="0" cellpadding="15" width="15%" height="5">История</td>
<td> 

<?php
  
  $sql = mysqli_query($link, 'SELECT `ID`, `hm2` FROM `homework_table`');
  while ($result = mysqli_fetch_array($sql)) {
    echo "{$result['hm2']} <br>";
  }
?>

</tr>
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="1%" height="5">3</td>
<td border="1" cellspacing="0" cellpadding="15" width="15%" height="5">Математика</td>
<td> 

<?php
  
  $sql = mysqli_query($link, 'SELECT `ID`, `hm3` FROM `homework_table`');
  while ($result = mysqli_fetch_array($sql)) {
    echo "{$result['hm3']} <br>";
  }
?>

</tr>

это код сохранения текста

<?php

$hm2 = $_POST['hm2'];
$hm3 = $_POST['hm3'];
$name = $_POST['name'];


$servername = 'localhost';  // Хост, у нас все локально
$username = '********';    // Имя созданного вами пользователя
$password = '*********'; // Установленный вами пароль пользователю
$database = 'zxc';   // Имя базы данных
    

// Устанавливаем соединение
$conn = mysqli_connect($servername, $username, $password, $database);
// Проверяем соединение
if (!$conn) {
      die("Connection failed: " . mysqli_connect_error());
}
 
echo "";
 
$sql = "INSERT INTO homework_table (name, hm2, hm3) VALUES ('$name', '$hm2', '$hm3')";
if (mysqli_query($conn, $sql)) {
      echo "";
} else {
      echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>







<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8">
    <!--[if IE]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0">
    <meta name="robots" content="noyaca"/>
    <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&amp;subset=cyrillic,cyrillic-ext" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css?family=PT+Sans:400,400i,700,700i&amp;subset=cyrillic,cyrillic-ext" rel="stylesheet">

    <link rel="stylesheet" href="//hostiman.ru/static/css/main.css?1523954679" type="text/css">
    <title>Ваш личный дневник</title>
    <link rel="stylesheet" href="style.css"/>
</head>



<body>
    
    <a href="http://dnevnik.h1n.ru" class="gradient-button">Назад</a>
    <style>
        body {
  background: #d6eaf8;
}
.gradient-button {
  text-decoration: none;
  display: inline-block;
  color: white;
  padding: 10px 30px;
  margin: 10px 20px;
  border-radius: 10px;
  font-family: 'Montserrat', sans-serif;
  text-transform: uppercase;
  letter-spacing: 2px;
  background-image: linear-gradient(to right, #9EEFE1 0%, #4830F0 51%, #9EEFE1 100%);
  background-size: 200% auto;
  box-shadow: 0 0 20px rgba(0, 0, 0, .1);
  transition: .5s;
}
.gradient-button:hover {
  background-position: right center;
}
    </style>


<table {

    display: block;

    width: 100%;

    overflow-x: scroll;

    overflow-y: hidden;

    -ms-overflow-style: -ms-autohiding-scrollbar;

    -webkit-overflow-scrolling: touch;

}

 border="12" cellspacing="0" cellpadding="15" width="100%" height="13">
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="100%" height="1"><center>Понедельник</center></td>
<table border="1" cellspacing="0" cellpadding="15" width="100%" height="130">
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="1%" height="5">1</td>
<td border="1" cellspacing="0" cellpadding="15" width="15%" height="5">Русский язык</td>
<td> <form action="" method="POST">
    
    <textarea name="name" cols="30" rows="5" placeholder="Впишите д/з"></textarea>
    <input type="submit" value="Сохранить">
   
    
</form>
</tr>
    
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="1%" height="5">2</td>
<td border="1" cellspacing="0" cellpadding="15" width="15%" height="5">История</td>
<td> <form action="" method="POST">
    
    <textarea name="hm2" cols="30" rows="5" placeholder="Впишите д/з"></textarea>
    <input type="submit" value="Сохранить">
    
</form>
</tr>
    
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="1%" height="5">3</td>
<td border="1" cellspacing="0" cellpadding="15" width="15%" height="5">Математика</td>
<td> <form action="" method="POST">
    
    <textarea name="hm3" cols="30" rows="5" placeholder="Впишите д/з"></textarea>
    <input type="submit" value="Сохранить">
    
</form>
</tr>

</body>
</html>

Так а задача исходная какая, зачем так делать?

Просто удалять все старые записи при вставке новых что ли надо?
TRUNCATE TABLE table_name или DELETE FROM table_name

1 лайк

а куда именно в коде надо это писать?
задача, чтобы выводился только один текст (последний введённый), а не все. любой метод устраивает

Дык просто вставить mysqli_query() с этой командой в нужное место, до вставки новых записей или где там оно нужно.

Ну это если подойдет просто удаление всех старых данных.
Звучит странно, обычно надо хранить и иметь возможность использовать все данные за всё время ) Даже бумажный дневник это умеет, хоть и не очень надежно (сложно бэкапить).

1 лайк

то есть мне надо заменить вот эту строку:

$sql = "INSERT INTO homework_table (name, hm2, hm3) VALUES ('$name', '$hm2', '$hm3')";

на эту?:

mysqli_query(TRUNCATE TABLE table_name)

а как программа поймёт что именно заменить в таблице?

а если так написать, выдаёт ошибку:

mysqli_query(TRUNCATE TABLE homework_table);
$sql = "INSERT INTO homework_table (name, hm2, hm3) VALUES ('$name', '$hm2', '$hm3')";

и так тоже не работает:

$sql = "TRUNCATE TABLE homework_table (name, hm2, hm3) VALUES ('$name', '$hm2', '$hm3')";

так тоже:

mysqli_query("TRUNCATE TABLE homework_table (name, hm2, hm3) VALUES ('$name', '$hm2', '$hm3')");

Я НЕ ПОМАНИЮ, Я ДАУН

Так это отдельный запрос для удаления всех данных.

mysqli_query($conn, 'TRUNCATE TABLE table_name');

mysqli_query($conn, 'INSERT INTO table_name (.........');
1 лайк

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

Ну дык найдите в своем коде где ввод и вставьте до него ))

видимо до

1 лайк

оу всё работает, но есть одна заминка

я написал твой код в начале перед

$sql = "INSERT INTO homework_table (name, hm2, hm3) VALUES ('$name', '$hm2', '$hm3')";

и получилось

mysqli_query($conn, 'TRUNCATE TABLE homework_table');

mysqli_query($conn, 'INSERT INTO homework_table (name, hm2, hm3');
$sql = "INSERT INTO homework_table (name, hm2, hm3) VALUES ('$name', '$hm2', '$hm3')";

но есть проблема, при вводе нового текста очищается полностью вся таблица а не конкретная строчка, куда вводится новый текст.
как исправить? может я не туда написал твой код?
чекни сайт http://dnevnik.h1n.ru/ и попробуй два раза что-то добавить в разные строчки

А, я думал они все сразу вставляются в одну запись потому что в коде же никак не обрабатывается какая кнопка сохранения была нажата )
И поэтому в БД получается фигня, что хранится куча записей, где в каждой заполнено только одно из свойств. Ну и “русский язык” почему-то назван “name” ))

В общем советую нормально изучить основы работы с реляционными БД и сделать что-то более нормальное.


Ну а если доделывать это, то более-менее нормальный вариант: положить все поля ввода в одну форму с одной кнопкой. Чтобы можно было поменять только одно не затерев остальные — загружать текущие значения и писать в значение по умолчанию полей ввода.

$result = mysqli_query($link, 'SELECT * FROM homework_table');
$currentData = mysqli_fetch_array($result);
<textarea name="hm2" cols="30" rows="5" placeholder="Впишите д/з"
><?= $currentData ? $currentData['hm2'] : '' ?></textarea>

И еще запихивать введенное значение в SQL запрос через просто вставку в строку запроса — плохая идея.

потому что кто-нибудь может захотеть ввести примерно такое Д/З (в последнее поле ввода):
'); DROP TABLE homework_table

Надо как-нибудь так:
PHP MySQL Prepared Statements
PHP: mysqli_stmt::bind_param - Manual

1 лайк

а куда я должен вставить в своём коде это

<textarea name="hm2" cols="30" rows="5" placeholder="Впишите д/з"
><?= $currentData ? $currentData['hm2'] : '' ?></textarea>

и это?

Первое после подключения к БД.

Там, кстати, еще по-моему вставка новой записи в БД происходит при любом открытии страницы, а не только по нажатию сохранить.
Надо проверять что это запрос на сохранение (например, просто проверить, что это POST запрос).

И еще после сохранения формы желательно редиректить, чтобы по F5 не было предупреждения браузера о повторе запроса.

$conn = mysqli_connect($servername, $username, $password, $database);
// Проверяем соединение
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
 
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $hm2 = $_POST['hm2'];
    $hm3 = $_POST['hm3'];
    $name = $_POST['name'];

    $sql = "INSERT INTO homework_table (name, hm2, hm3) VALUES ('$name', '$hm2', '$hm3')";
    if (!mysqli_query($conn, $sql)) {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }

    header('Location: ' . $_SERVER['PHP_SELF']);
    die();
}

А второе очевидно там где выводятся поля для ввода д/з )

1 лайк

[quote=“AlexP, post:11, topic:3777”]

написал вот так (код сохранения), внёс изменения как ты и сказал, но теперь старая проблема. в строчку выводиться все записи, а не новая
(код сохранения)->

<?php

$hm2 = $_POST['hm2'];
$hm3 = $_POST['hm3'];
$name = $_POST['name'];


$servername = 'localhost';  // Хост, у нас все локально
$username = 'tenikula';    // Имя созданного вами пользователя
$password = '9548711yout'; // Установленный вами пароль пользователю
$database = 'zxc';   // Имя базы данных
    

// Устанавливаем соединение
$conn = mysqli_connect($servername, $username, $password, $database);
// Проверяем соединение
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
 
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $hm2 = $_POST['hm2'];
    $hm3 = $_POST['hm3'];
    $name = $_POST['name'];

    $sql = "INSERT INTO homework_table (name, hm2, hm3) VALUES ('$name', '$hm2', '$hm3')";
    if (!mysqli_query($conn, $sql)) {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }

    header('Location: ' . $_SERVER['PHP_SELF']);
    die();
}

?>






<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8">
    <!--[if IE]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0">
    <meta name="robots" content="noyaca"/>
    <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&amp;subset=cyrillic,cyrillic-ext" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css?family=PT+Sans:400,400i,700,700i&amp;subset=cyrillic,cyrillic-ext" rel="stylesheet">

    <link rel="stylesheet" href="//hostiman.ru/static/css/main.css?1523954679" type="text/css">
    <title>Ваш личный дневник</title>
    <link rel="stylesheet" href="style.css"/>
</head>



<body>
    
    <a href="http://dnevnik.h1n.ru" class="gradient-button">Назад</a>
    <style>
        body {
  background: #d6eaf8;
}
.gradient-button {
  text-decoration: none;
  display: inline-block;
  color: white;
  padding: 10px 30px;
  margin: 10px 20px;
  border-radius: 10px;
  font-family: 'Montserrat', sans-serif;
  text-transform: uppercase;
  letter-spacing: 2px;
  background-image: linear-gradient(to right, #9EEFE1 0%, #4830F0 51%, #9EEFE1 100%);
  background-size: 200% auto;
  box-shadow: 0 0 20px rgba(0, 0, 0, .1);
  transition: .5s;
}
.gradient-button:hover {
  background-position: right center;
}
    </style>


<table {

    display: block;

    width: 100%;

    overflow-x: scroll;

    overflow-y: hidden;

    -ms-overflow-style: -ms-autohiding-scrollbar;

    -webkit-overflow-scrolling: touch;

}

 border="12" cellspacing="0" cellpadding="15" width="100%" height="13">
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="100%" height="1"><center>Понедельник</center></td>
<table border="1" cellspacing="0" cellpadding="15" width="100%" height="130">
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="1%" height="5">1</td>
<td border="1" cellspacing="0" cellpadding="15" width="15%" height="5">Русский язык</td>
<td> <form action="" method="POST">
    
    <textarea name="name" cols="30" rows="5" placeholder="Впишите д/з"
    ><?= $currentData ? $currentData['name'] : '' ?></textarea>
    <input type="submit" value="Сохранить">
   
    
</form>
</tr>
    
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="1%" height="5">2</td>
<td border="1" cellspacing="0" cellpadding="15" width="15%" height="5">История</td>
<td> <form action="" method="POST">
    
    <textarea name="hm2" cols="30" rows="5" placeholder="Впишите д/з"
    ><?= $currentData ? $currentData['hm2'] : '' ?></textarea>
    <input type="submit" value="Сохранить">
    
</form>
</tr>
    
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="1%" height="5">3</td>
<td border="1" cellspacing="0" cellpadding="15" width="15%" height="5">Математика</td>
<td> <form action="" method="POST">
    
    <textarea name="hm3" cols="30" rows="5" placeholder="Впишите д/з"
    ><?= $currentData ? $currentData['hm3'] : '' ?></textarea>
    <input type="submit" value="Сохранить">
    
</form>
</tr>

</body>
</html>

а если добавить

mysqli_query($conn, 'TRUNCATE TABLE homework_table');

mysqli_query($conn, 'INSERT INTO homework_table (name, hm2, hm3');

опять же удаляются все строчки, при введения текста в одну строчку

Так я же предлагал это:

1 лайк

а как это сделать?

В смысле как?
Не делать отдельную форму

с кнопкой

для каждого поля ввода, а просто все поля положить внутрь одной формы с одной кнопкой.

1 лайк

эх… положил всё в одну форму, но всё-ровно когда ввожу новый текст, очищается не одна старая надпись на одной строчке, а все строчки

<?php

$hm2 = $_POST['hm2'];
$hm3 = $_POST['hm3'];
$name = $_POST['name'];


$servername = 'localhost';  // Хост, у нас все локально
$username = 'tenikula';    // Имя созданного вами пользователя
$password = '9548711yout'; // Установленный вами пароль пользователю
$database = 'zxc';   // Имя базы данных
    

// Устанавливаем соединение

$conn = mysqli_connect($servername, $username, $password, $database);
// Проверяем соединение
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $hm2 = $_POST['hm2'];
    $hm3 = $_POST['hm3'];
    $name = $_POST['name'];
    
    mysqli_query($conn, 'TRUNCATE TABLE homework_table');
    mysqli_query($conn, 'INSERT INTO homework_table (name, hm2, hm3');
    $sql = "INSERT INTO homework_table (name, hm2, hm3) VALUES ('$name', '$hm2', '$hm3')";
    if (!mysqli_query($conn, $sql)) {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }

    header('Location: ' . $_SERVER['PHP_SELF']);
    die();
}

?>






<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8">
    <!--[if IE]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0">
    <meta name="robots" content="noyaca"/>
    <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&amp;subset=cyrillic,cyrillic-ext" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css?family=PT+Sans:400,400i,700,700i&amp;subset=cyrillic,cyrillic-ext" rel="stylesheet">

    <link rel="stylesheet" href="//hostiman.ru/static/css/main.css?1523954679" type="text/css">
    <title>Ваш личный дневник</title>
    <link rel="stylesheet" href="style.css"/>
</head>



<body>
    
    <a href="http://dnevnik.h1n.ru" class="gradient-button">Назад</a>
    <style>
        body {
  background: #d6eaf8;
}
.gradient-button {
  text-decoration: none;
  display: inline-block;
  color: white;
  padding: 10px 30px;
  margin: 10px 20px;
  border-radius: 10px;
  font-family: 'Montserrat', sans-serif;
  text-transform: uppercase;
  letter-spacing: 2px;
  background-image: linear-gradient(to right, #9EEFE1 0%, #4830F0 51%, #9EEFE1 100%);
  background-size: 200% auto;
  box-shadow: 0 0 20px rgba(0, 0, 0, .1);
  transition: .5s;
}
.gradient-button:hover {
  background-position: right center;
}
    </style>


<table {

    display: block;

    width: 100%;

    overflow-x: scroll;

    overflow-y: hidden;

    -ms-overflow-style: -ms-autohiding-scrollbar;

    -webkit-overflow-scrolling: touch;

}

 border="12" cellspacing="0" cellpadding="15" width="100%" height="13">
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="100%" height="1"><center>Понедельник</center></td>
<table border="1" cellspacing="0" cellpadding="15" width="100%" height="130">
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="1%" height="5">1</td>
<td border="1" cellspacing="0" cellpadding="15" width="15%" height="5">Русский язык</td>
<td> <form action="" method="POST">
    
    <textarea name="name" cols="30" rows="5" placeholder="Впишите д/з"
    ><?= $currentData ? $currentData['name'] : '' ?></textarea>
    
   
    

</tr>
    
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="1%" height="5">2</td>
<td border="1" cellspacing="0" cellpadding="15" width="15%" height="5">История</td>
<td> 
    
    <textarea name="hm2" cols="30" rows="5" placeholder="Впишите д/з"
    ><?= $currentData ? $currentData['hm2'] : '' ?></textarea>
   
    

</tr>
    
<tr>
<td border="1" cellspacing="0" cellpadding="15" width="1%" height="5">3</td>
<td border="1" cellspacing="0" cellpadding="15" width="15%" height="5">Математика</td>
<td> 
    
    <textarea name="hm3" cols="30" rows="5" placeholder="Впишите д/з"
    ><?= $currentData ? $currentData['hm3'] : '' ?></textarea>
    
    
    <input type="submit" value="Сохранить">
</tr>
    
</form>

</body>
</html>

Тут некорректный HTML и форма получается только до первого </tr>.
Можно просто всё содержимое страницы внутрь form положить.

<body>
    <form>
     ...
     </form>
</body>
</html>

Тут, кстати, тоже странная и некорректная смесь HTML и CSS

Раз отсутствие работоспособности этих стилей до сих пор не было замечено, то видимо они и не нужны и можно убрать всё это начиная с {.

А про очистку, так идея же была

и тут этого нет.

1 лайк

не понимаю куда этот код писать:

$result = mysqli_query($link, 'SELECT * FROM homework_table');
$currentData = mysqli_fetch_array($result);

написал вот так, но не работает:

<?php
$result = mysqli_query($link, 'SELECT * FROM homework_table');
$currentData = mysqli_fetch_array($result);
?>

<textarea name="hm2" cols="30" rows="5" placeholder="Впишите д/з"
><?= $currentData ? $currentData['hm2'] : '' ?></textarea>

а второе уже было же.