• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Способы сохранения текста из формы

  • Автор темы Guest
  • Дата начала
G

Guest

Есть скрипт, который сохраняет текст из textarea в файлы, форматы которых выбираются выпадающим списком. Нумерация файлов начинается со значения, которое записано в файле "index".

Нужно сделать так, чтобы была возможность выбора (например, выпадающим списком) сохранять в новый файл(w+) или дописывать в последний созданный(a+). Есть какие идеи? Подскажите, пожалуйста.


Код:
<?php
$source = $_POST['source'];//имя textarea, из которого берется текст
$triad = $_POST['triad'];//расширение, с которым будет сохранен файл (в выпадающем списке)
$fh = fopen("./SMI/index",'r');//в этом файле находится число, с которого начинается нумерация
$i = fgets($fh);
fclose($fh);
$fh = fopen("./SMI/index",'w');
$i++;
fputs($fh, $i);
fclose($fh);
$file = $i.".".$triad;
$Saved_file = fopen("./SMI/".$file, 'w+');//директория для записи
fwrite($Saved_file, $source);
fclose($Saved_file);
header("Location: index.php");
?>
 
N

nws

if ($some_flag) {
//запись в новый файл
} else {
//запись в существующий файл
}

при записи не забывай экранировать тэги
 
G

Guest

Примерно так:

Код:
<?php
// Принимаем и обрабатываем сообщение из TEXTAREA
if(isset($_POST[source])&& !empty($_POST[source])){
$source = trim($_POST[source]);
// Удаляем ненужные переводы строк
$source = preg_replace("/[\r\n]{2,}/i", "\n", $source);
// Ограничение количества вводимых символов
$source = substr($source,0,1024);

if(isset($_POST[add])){
// Нажата кнопка добавления записи к последнему сохранённому файлу
// Считываем имя последнего сохранённого файла из last.txt
if(file_exists('last.txt')){
// Открываем файл для чтения и записи в режиме r+t 
// некоторые версии FreeBSD имеют проблемы с режимом а+ 
// и не могут установить указатель на начало файла при помощи fseek 
$f1=fopen('last.txt', 'r+t') or die("Невозможно открыть файл"); 
// Блокируем файл (блокировка с запретом "подвисания") 
while(!flock($f1, LOCK_EX+LOCK_NB)) 
{ 
sleep(1);	// ждём одну секунду 
} 
// Файл заблокирован, можно производить чтение и запись
// считываем имя последнего сохранённого файла
$file=explode("\n",fread($f1,filesize('last.txt')));
if(file_exists($file[0])){
$f2=fopen($file[0], 'r+t') or die("Невозможно открыть файл");
// Блокируем файл (блокировка с запретом "подвисания") 
while(!flock($f2, LOCK_EX+LOCK_NB)) 
{ 
sleep(1);	// ждём одну секунду 
} 
$position = filesize($file[0]);
fseek($f2, $position-1);
fwrite ($f2,$source."\n");
fclose($f1);
fclose($f2);
}
}else{
echo "Отсутствует файл содержащий информацию о последнем сохранённом файле.";
}
}
if(isset($_POST[save])){
// Нажата кнопка добавления записи в новый файл
switch ($_POST[triad]) {
case 0: $triad='txt'; break;
case 1: $triad='xml'; break;
case 2: $triad='smi'; break;
case 3: $triad='doc'; break;
default: $triad='txt';
}
// Считываем счётчик нумерации из count.txt
if(file_exists('count.txt')){
$f1=fopen('count.txt', 'r+t') or die("Невозможно открыть файл"); 
// Блокируем файл (блокировка с запретом "подвисания") 
while(!flock($f1, LOCK_EX+LOCK_NB)) 
{ 
sleep(1);	// ждём одну секунду 
} 
// Файл заблокирован, можно производить чтение и запись
// считываем счётчик
$n=explode("\n",fread($f1,filesize('last.txt')));
$new=$n[0]+1;
$file=($new).".$triad";
ftruncate($f1, 0); // очищаем файл
fseek($f1, 0, SEEK_SET); // переходим в начало файла
fwrite ($f1, $new); // записываем строку из массива	
if(!file_exists($file)){
fclose(fopen($file, "a+t"));
$f2=fopen($file, 'r+t') or die("Невозможно открыть файл");
fputs ($f2,$source."\n");
fclose($f2);
fclose($f1);
if(file_exists('last.txt')){
$f3=fopen('last.txt', 'r+t') or die("Невозможно открыть файл"); 
// Блокируем файл (блокировка с запретом "подвисания") 
while(!flock($f3, LOCK_EX+LOCK_NB)) 
{ 
sleep(1);	// ждём одну секунду 
}
ftruncate($f3, 0); // очищаем файл
fseek($f3, 0, SEEK_SET); // переходим в начало файла
fwrite ($f3, $file); // записываем строку из массива
fclose($f3);
}else{
echo "Отсутствует файл содержащий информацию о последнем сохранённом файле.";
}	
}else{
echo "Фйл с таким именем уже существует";
exit;
}
}else{
echo "Отсутствует файл счётчика.";
}	
}
}else{
echo "Отсутствует текстовое сообщение";
}
?>
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!