PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
Irina88
Отправлено: 05 Декабря, 2021 - 19:45:33
Новичок
Покинул форум
Сообщений всего: 61
Дата рег-ции: Март 2018
Откуда: Kyiv, Ukraine
Помог: 0 раз(а)
Хочу реализовать такую штуку:
Вот скрин:
Вот код:
Спойлер (Отобразить ) <?php
$title = " ";
$myFile = "enter.txt";
$lines = file($myFile);
$test=$_POST['text'];
echo $lines[0];
echo "<form method='post' action=''>
<textarea name='text'>
</textarea>
<input type='submit' value='Отправить!'>
</form>";
$current = ($_POST['text'] . "<br> <br>" . "\r\n" );
if (empty($lines)) {$test;} else {$current .= file_get_contents($myFile);
file_put_contents($myFile, $current);};
?>
Вроде все работает. Но надо чтобы предыдущий комментарий открывался сразу после нажатия <submit>, а не после перезагрузки страницы. Как это сделать?
Vladimir Kheifets
Отправлено: 05 Декабря, 2021 - 21:09:24
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)
Irina88 пишет: Хочу реализовать такую штуку:
Вот скрин:
Вот код:
Спойлер (Отобразить ) <?php
$title = " ";
$myFile = "enter.txt";
$lines = file($myFile);
$test=$_POST['text'];
echo $lines[0];
echo "<form method='post' action=''>
<textarea name='text'>
</textarea>
<input type='submit' value='Отправить!'>
</form>";
$current = ($_POST['text'] . "<br> <br>" . "\r\n" );
if (empty($lines)) {$test;} else {$current .= file_get_contents($myFile);
file_put_contents($myFile, $current);};
?>
Вроде все работает. Но надо чтобы предыдущий комментарий открывался сразу после нажатия <submit>, а не после перезагрузки страницы. Как это сделать?
Добрый день, Ирина!
Уж, простите, но никто пока на вопросы не отвечает.
Может я смогу помочь.
То что, Вы хотите, сделать легко.
Что должно открываться без перезагрузки страницы и где?
Например, в каком-нибудь контейрнере <div id="content"></div>
(Отредактировано автором: 06 Декабря, 2021 - 08:22:51)
Vladimir Kheifets
Отправлено: 07 Декабря, 2021 - 10:48:03
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)
Irina88 пишет: Здравствуйте, Владимир!
Ну типа над полем ввода должно отображаться предыдущее сообщение. Как на скрине.
Добрый день, Ирина!
Сделал без перезагрузки страницы.
Чтобы было заметно, что страница не перезагружается добавил тестовый контент.
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
$StartLine = 0 ;
$nLines = 10 ;
$title = $_SERVER [ 'SERVER_NAME' ] ;
function ReadLinesFromFile( $StartLine , $nLines , $file ) {
$EndLine = $StartLine + $nLines ;
$line = $StartLine ;
$news = [ ] ;
while ( $line < $EndLine ) {
$file -> seek ( $line - 1) ;
$news [ ] = $file -> current ( ) ;
$line ++;
}
return $news ;
}
//--------------------------------------
$file = new SplFileObject( 'enter.txt' ) ;
$file -> seek ( PHP_INT_MAX) ;
$linesTotal = $file -> key ( ) + 1 ;
$LineInPage = 10 ;
$Pages = ceil ( ( $linesTotal ) / $LineInPage ) ; $page = isset ( $_GET [ 'page' ] ) ?
$_GET [ 'page' ] : 1 ;
$StartLine = ( $page - 1) * $LineInPage + 1 ;
$news = ReadLinesFromFile( $StartLine , $LineInPage , $file ) ;
{
echo $lines ;
}
######################################################
$testContent = "http://beautiful-puppies.de/video/2/" ;
$p = $testContent . "poster_g/20210929134906.jpg" ;
$f = $testContent . "20210929134906.mp4" ;
######################################################
echo <<<HTML
<html>
<head>
<title> $title </title>
<style>
#pageContent{height: 250px}
</style>
</head>
<body>
<!-- Begin test Content --->
<video preload="none" poster="$p" width="30%"
onMouseOver="this.controls=true" >
<source src="$f" type="video/mp4" >
</video>
<hr>
<!-- End test Content --->
<div id="pageContent">$lines</div>
<hr>
<div id="pageSelector">
<span>Страница:</span>
<span></span>
<select></select>
</div>
</body>
<script>
page = '$page';
Pages = '$Pages';
pageContent = document.getElementById("pageContent");
pageSelector = document.getElementById("pageSelector");
span = pageSelector.querySelectorAll("span")[1];
select = pageSelector.querySelectorAll("select")[0];
//------------------------------
setOpt = function(){
optArr=Array.from({length: Pages}, (v, k) => k+1);
optArr.splice(page-1, 1);
select.innerHTML = "";
opt = document.createElement('option');
opt.innerHTML = "выбор";
select.appendChild(opt);
for(i in optArr)
{
opt = document.createElement('option');
opt.innerHTML = optArr[i];
select.appendChild(opt);
}
select.addEventListener("change", function (e){
page=e.target.value;
ViewNews(page, pageContent);
});
span.innerHTML = page;
};
//-----------------------------
ViewNews = function(page,target){
req = new XMLHttpRequest();
url = "?page="+page;
req.open("get", url, true);
req.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
try
{
rsp = this.responseText;
target.innerHTML=rsp;
setOpt();
}
catch (e)
{
err={state:this.readyState,err:e.message,url:url};
console.log(err);
}
};
};
req.send();
};
//------------------------------------------------
if(Pages>1)
setOpt();
else
pageSelector.style.display="none";
//------------------------------------------------
</script>
</html>
HTML ;
?>
Файл enter.txtСпойлер (Отобразить ) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Удачи!(Отредактировано автором: 07 Декабря, 2021 - 10:49:28)
Vladimir Kheifets
Отправлено: 08 Декабря, 2021 - 06:52:04
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)
Irina88 пишет: Я имею ввиду, что есть поле ввода. При вводе ТЕКСТА и нажатии ENTER, содержимое <textarea> сохраняется в текстовом файле. И первая строка выводится НАД ПОЛЕМ ВВОДА.
P.S. Это уже другой вопрос. Не путать с предыдущим "Как разбить текстовый файл на страницы?"!
Добрый день, Ирина!
Что должно проходить после ввода каждого последующего ТЕКСТА и нажатии ENTER?
а. Текста перезаписывается
б. текст дополняется в файл и выводится над или после ранее введёного
После нажатия ENTER должно ли удаляться содержимое <textarea>?
P.S. Я показал, как изменять контент без полной перезагрузки страницы.
Это работает также и в этом вопросе. Советую внимательно посмотреть код.
(Отредактировано автором: 08 Декабря, 2021 - 08:25:57)
Vladimir Kheifets
Отправлено: 08 Декабря, 2021 - 14:08:57
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)
Irina88 пишет: Текст сохраняется в файл. А на главной странице перезаписывается..
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
{
}
echo <<<HTML
<html>
<head>
<title>Test</title>
<style>
</style>
</head>
<body>
<div></div>
<hr>
<form>
<textarea name="text"></textarea>
<br>
<input type="button" value="Отправить!" onclick="saveText()">
</form>
</body>
<script>
form = document.querySelectorAll("form")[0];
target = document.querySelectorAll("div")[0];
//-----------------------------
saveText = function(){
req = new XMLHttpRequest();
url = "?save=1";
data = new FormData(form);
req.open("post", url, true);
req.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
try
{
rsp = this.responseText;
target.innerHTML=rsp;
}
catch (e)
{
err={state:this.readyState,err:e.message,url:url};
console.log(err);
}
};
};
req.send(data);
};
</script>
</html>
HTML ;
?>
Удачи!
Vladimir Kheifets
Отправлено: 09 Декабря, 2021 - 06:45:50
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)
Irina88 пишет: Текст над полем ввода должен сохраняться, а не сбрасываться после перезагрузки страницы...
См.
https://www.alto-booking.com/dem...textareaAJAX.php
Скриншот с QR-link
https://www.alto-booking.com/dem...-09%20051658.jpg
файл test.txt
https://www.alto-booking.com/dem.../PHP_SU/test.txt
p.s. если после перезагрузки страницы захотите увидеть ранее введённый текст, прочитайте файл
test.txt
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
{
$file = 'test.txt' ;
}
echo <<<HTML
<html>
<head>
<title>Test</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<style>
</style>
</head>
<body>
<div></div>
<hr>
<form>
<textarea name="text"></textarea>
<br>
<input type="button" value="Отправить!" onclick="saveText()">
</form>
</body>
<script>
form = document.querySelectorAll("form")[0];
target = document.querySelectorAll("div")[0];
//-----------------------------
saveText = function(){
req = new XMLHttpRequest();
url = "?save=1";
data = new FormData(form);
req.open("post", url, true);
req.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
try
{
rsp = this.responseText;
target.innerHTML=rsp;
}
catch (e)
{
err={state:this.readyState,err:e.message,url:url};
console.log(err);
}
};
};
req.send(data);
};
</script>
</html>
HTML ;
?>
(Отредактировано автором: 09 Декабря, 2021 - 07:20:11)
Vladimir Kheifets
Отправлено: 09 Декабря, 2021 - 22:21:45
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)
Irina88 пишет: Ну опять же: введенный текст не сохраняется...
Где не сохраняется?
Вы можете более конкретно сформулировать задачу и адекватно осмыслить результат?
Вы дейстаительно не понимате, что здесь
https://www.alto-booking.com/dem.../PHP_SU/test.txt
Вы видите файл с введенным и сохранённый текстом?
При каждом заходе на страницу Вы можете читать файл и выводить ранее введённый текст.
Если Вы хотите получать текст из кэш после refresh странцы, выводите его из $_POST["text"]
Не знаете как? Показать?
(Отредактировано автором: 09 Декабря, 2021 - 22:27:13)
Vladimir Kheifets
Отправлено: 11 Декабря, 2021 - 15:14:13
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)
Irina88 пишет: Ну опять же: введенный текст не сохраняется...
Добрый день, Ирина!
Прошу Вас простить меня за недопустимо резкий ответ в предыдущем посте.
Надеюсь, что Вы поняли, что введённый текст, без перезагрузки страницы сохраняется в файле и выводится в div контейнере над textarea.
Я добавил чтение файла и вывод ранее введёного текст при загрузке страницы.
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
$file = 'test.txt' ;
{
}
{
$file = 'test.txt' ;
}
echo <<<HTML
<html>
<head>
<title>Test</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<style>
</style>
</head>
<body>
<div>$text</div>
<hr>
<form>
<textarea name="text"></textarea>
<br>
<input type="button" value="Отправить!" onclick="saveText()">
</form>
</body>
<script>
form = document.querySelectorAll("form")[0];
target = document.querySelectorAll("div")[0];
//-----------------------------
saveText = function(){
req = new XMLHttpRequest();
url = "?save=1";
data = new FormData(form);
req.open("post", url, true);
req.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
try
{
rsp = this.responseText;
target.innerHTML=rsp;
}
catch (e)
{
err={state:this.readyState,err:e.message,url:url};
console.log(err);
}
};
};
req.send(data);
};
</script>
</html>
HTML ;
?>
Мне не хочется отвечать за то, что там могут написать, поэтому удалил скрипт на сервере.
Удачи!
Irina88
Отправлено: 11 Декабря, 2021 - 19:33:37
Новичок
Покинул форум
Сообщений всего: 61
Дата рег-ции: Март 2018
Откуда: Kyiv, Ukraine
Помог: 0 раз(а)
Почему когда я захожу на страницу со скриптом, мне выдает вот это:
хотя в файле enter.txt первая строка "3"...
Вот содержимое файла enter.txt :
И еще: мне нужно чтобы все записи с поля ввода сохранялись в файле enter.txt ...
Например:
я захожу на страницу со скриптом, мне должно выдать цифру "3" (первая строка файла enter.txt) потом поле ввода, и кнопка "Отправить!".
если я напишу в поле ввода "4" и нажму submit (отправить!) - то эта "четвёрка" должна передаться в enter.txt
Вот содержимое обновленного файла enter.txt :
и одновременно с нажатием сабмита ЭТА ЖЕ "червёрка" должна появиться над полем ввода страницы со скриптом.
Потом если я или кто-то другой зайдет на страницу со скриптом (index.php) - должна высвечиваться уже "4" вместо "тройки" и т.д.
Vladimir Kheifets
Отправлено: 12 Декабря, 2021 - 11:38:48
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)
Irina88 пишет: Почему когда я захожу на страницу со скриптом, мне выдает вот это:
хотя в файле enter.txt первая строка "3"...
Вот содержимое файла enter.txt :
Актуализируйте скрипт
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
$file = 'enter.txt' ;
{
}
{
}
echo <<<HTML
<html>
<head>
<title>Test</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<style>
</style>
</head>
<body>
<div>$text</div>
<hr>
<form>
<textarea name="text"></textarea>
<br>
<input type="button" value="Отправить!" onclick="saveText()">
</form>
</body>
<script>
form = document.querySelectorAll("form")[0];
target = document.querySelectorAll("div")[0];
//-----------------------------
saveText = function(){
req = new XMLHttpRequest();
url = "?save=1";
data = new FormData(form);
req.open("post", url, true);
req.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
try
{
rsp = this.responseText;
target.innerHTML=rsp;
}
catch (e)
{
err={state:this.readyState,err:e.message,url:url};
console.log(err);
}
};
};
req.send(data);
};
</script>
</html>
HTML ;
?>
мне выдает вот это:
[img]https://www.alto-booking.com/demo/PHP_SU/51658.jpg[/img]
Вот содержимое файла enter.txt :
Irina88 пишет: И еще: мне нужно чтобы все записи с поля ввода сохранялись в файле enter.txt ...
Например:
я захожу на страницу со скриптом, мне должно выдать цифру "3" (первая строка файла enter.txt) потом поле ввода, и кнопка "Отправить!".
если я напишу в поле ввода "4" и нажму submit (отправить!) - то эта "четвёрка" должна передаться в enter.txt
Вот содержимое обновленного файла enter.txt :
и одновременно с нажатием сабмита ЭТА ЖЕ "червёрка" должна появиться над полем ввода страницы со скриптом.
Потом если я или кто-то другой зайдет на страницу со скриптом (index.php) - должна высвечиваться уже "4" вместо "тройки" и т.д.
Если напишите одну строку, например, "4" , то она дополнится в начало ранее сохранённого текста в файле enter.txt.Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
$file = 'enter.txt' ;
{
$text = explode ( PHP_EOL
, $lines ) [ 0
] ;
}
else
$lines = "" ;
{
$lines = $_POST [ "text" ] . PHP_EOL. $lines ;
}
echo <<<HTML
<html>
<head>
<title>Test</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<style>
</style>
</head>
<body>
<div>$text</div>
<hr>
<form>
<textarea name="text"></textarea>
<br>
<input type="button" value="Отправить!" onclick="saveText()">
</form>
</body>
<script>
form = document.querySelectorAll("form")[0];
target = document.querySelectorAll("div")[0];
//-----------------------------
saveText = function(){
req = new XMLHttpRequest();
url = "?save=1";
data = new FormData(form);
req.open("post", url, true);
req.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
try
{
rsp = this.responseText;
target.innerHTML=rsp;
}
catch (e)
{
err={state:this.readyState,err:e.message,url:url};
console.log(err);
}
};
};
req.send(data);
};
</script>
</html>
HTML ;
?>
Что делать, если:
введёте несколько строк?
введёте повторящие строки, например, "3"?
Удачи!(Отредактировано автором: 12 Декабря, 2021 - 11:41:37)
Поиск в теме | Версия для печати
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB