Опишу проблему!
Есть файл list.txt, содержание которого:
1
Новость1
дата1
2
Новость2
дата2
...
и т.д.
У меня есть форма из textarea для ввода текста. Текст планируется однострочным.
Введенный текст (например Мега новость вместо Новость1) из textarea попадает в другой php файл со скриптом по нажатию кнопки формы.
В этом скрипте открывается файл list.txt с помощь file(). Текст заносится в массив.
В массиве мы находим нужный нам раздел спомощью идентификаторов и заменяем элемент массива Новость1 на Мега новость1. Потом сохраняем все это занова в этот же файл. Если в textarea не делать переносов строк, то все работает так как мне нужно. Но вот если нажать ентер или или любые другие манипуляции из-за которых получается перенос строк, но все накрывается медным тазом с того самого места, где меняли массив. Начинается смещение.
Извиняюсь что столько много букв! Суть вопроса в том, как избежать переноса строк, как запретить это. Input не решает проблемы,wrap = "off" тоже.
Почему такой метод хранения информации?
Потому что использую php4 в котором xml на мой взгляд как то убого реализовон.
Подскажите плииз как решить эту проблему?
Спустя 1 час, 40 минут, 59 секунд (8.08.2010 - 05:21) Ineed$ написал(а):
Сдается мне проблема в вашем коде, а не в переносах строк. Дайте глянуть
Спустя 13 минут, 14 секунд (8.08.2010 - 05:35) GRean написал(а):
я на хостинге нашел кнопку вкл php5 , так что начинаю учить simpleXml
Но все равно спасиб за ответ!
несколько часов промучался с simpleXml и оказалось что тот не умеет удалять child как другими методами удалить child так и не смог найти.
решил все таки выложить код нынешней проблемы с textarea.
file3.txt
это форма - менеджер для новостей. Удаление \ Редактирование
При загрузки этой формы(php страница), автоматически открывается по определившемуся id текстовый файл с содержимым(новости)
В самом конце этой php страницы находится форма с которой у меня сложности.
Во втором файле (save_txt.php) $t1 = $_POST['text1']; почему то с пробелом в конце.
когда изменяю содержимое текущего элемента массива (вот таким образом $lArray[$idText2][1] = $t1;), то получается смещение Если вместо $t1 вписать любой текст, а не переменную, то все норм отображается.
Здесь собственно и обрабатываются все изменения внесенные в форме:
save_txt.php
здесь некоторые строки закоментированые, это вобщем черновик, но работающий, кроме корректного редактирования.
Как говорилось выше, если в textarea с именем name = "text1" сделать перенос строки, то получается смещение в file3.txt
Что я не так сделал? подскажите пожалуйста
Но все равно спасиб за ответ!
несколько часов промучался с simpleXml и оказалось что тот не умеет удалять child как другими методами удалить child так и не смог найти.
решил все таки выложить код нынешней проблемы с textarea.
file3.txt
1
Новость1
Ссылка1
2
Новость2
Ссылка2
3
Новость3
Ссылка3
4
Новость4
Ссылка4
5
Новость5
Ссылка5
6
Новость6
Ссылка6
7
Новость7
Ссылка7
это форма - менеджер для новостей. Удаление \ Редактирование
<?php session_start(); header("Content-Type: text/html; charset=utf-8"); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
.list{
posicion:relative;
float:left;
left: 10px;
top: 10px;
width: 100px;
border: solid 1px black;
}
.textField{
posicion:relative;
/*float:right;*/
/*left: 400px; */
top: 10px;
width: 600px;
height: 650px;
border: solid 1px black;
}
</style>
</head>
<body>
<?php
//#########################################################
$f = file('file3.txt');
$file = '';
$path = '';
$id = '';
$ind = 0;
$ind2 = 0;
foreach( $f as $line=>$data ) {
if($ind <= 2){
if($ind == 0){$arr[$ind2][$ind] = $data;}
else if($ind == 1){$arr[$ind2][$ind] = $data;}
else if($ind == 2){$arr[$ind2][$ind] = $data;}
if($ind == 2){$ind = -1;$ind2++;}
$ind++;
};
};
trace2($arr)
?>
<table border = 1 width = "100%">
<tr>
<td width = "400">
<!-- ##############################################################-->
<form action="form1_1.php" method="post" name="form1">
<?php
//for($i = 0;$i <= $count2 - 1;$i++){ $url = "./newsblock/index.php?id=".$arr[$i][0];
for($i = 0;$i < count($arr);++$i){
$id = 'id' . $i;
$url = "form1_4.php?id2=".$i."&id=".$arr[$i][0];
//$url2 = $url."&id2=".$i;
$text = "<a href =".$url." >".$arr[$i][1]."</a>";
//echo"url= ".$url;
//echo "<br/>";
$form = "<p><input name= $id type=\"checkbox\" value= $i>$text</p>";
//echo "<br/>";
//echo "i=".$i;
//echo "<br/>";
print $form;
//echo "<br/>";
}
$form = "<input type=hidden name=length value=$i>";
print $form;
?>
<br>
<br>
<p>--------------------------</p>
<input name="sud" type="submit" value="Удалить">
</form>
</td>
<?php
//-----------------------
function trace($array){
echo count($array);
for($i=0;$i<count($array);++$i){
echo"array= ".$array[$i];
}
}
//-----------------------
function trace2($array){
echo count($array);
echo"<br/>";
$l1 = count($array);
$l2 = count($array[0]);
for($i = 0;$i < $l1;++$i){
for($j = 0;$j < $l2;++$j){
echo"array= ".$array[$i][$j];
echo"<br/>";
}
}
}
?>
<!-- ############################################# -->
<td width = "200"></td>
<!-- ############################################# -->
<td>
<?php
//-------------------------------------- Открываем файл по id
//-- id получаем по выбранной ссылки. в левой форме
if(isset($_SESSION['idtext'])){
echo "id: ".$_SESSION['idtext'];
//echo"<br/>";
//--------------------------------- переменная id для подгрузки текста из файла
$textid = $_SESSION['idtext'];
}else{
$_SESSION['idtext'] = 1;
$textid = $_SESSION['idtext'];
//echo "idtext= ".$_SESSION['idtext'];
};
//---------------------------------------------------
if(isset($_SESSION['idtext2'])){
//echo"<br/>";
//echo "id2: ".$_SESSION['idtext2'];
//---------------------------------переменная id порядковый номер статьи/новости
$textid2 = $_SESSION['idtext2'];
//$textid = $arr[$textid2][0];
//echo"textid11= ".$textid;
//echo"textid12= ".$textid2;
}else{
$_SESSION['idtext2'] = 0;
$textid2 = $_SESSION['idtext2'];
//$textid = $arr[$textid2][0];
//echo"textid21= ".$textid;
//echo"textid22= ".$textid2;
};
//--------------------------------------------
//echo"file_name= ".$file_name;
//$a = str_word_count($file_name, 1);
//foreach($a as $vol)
//{
// echo $vol;
//}
//echo"vol= ".$vol;
//$file_name2 = str_replace(" ", ".", $file_name);
//echo"textid= ".$textid;
//echo"file_name= ".$vol;
//echo"p= ".$_SESSION['p'];
//echo"file_name2= ".$file_name2;
$file_name = 'news_'.$textid.'.txt';
echo"; file_name= ".$file_name;
$f = file($file_name);
if(@fopen($file_name, "r+")){
$file = file_get_contents ( $file_name , true );
//print $file;
}else{echo"Ошибка: файл не найден!";$file = "Ошибка: файл не найден!";};
//echo"<br/>";
?>
<div class = "textField">
<form action="save_txt.php" method = "POST" name = "form2">
<p><b>Заголовок:</b><textarea rows="1" cols="60" name="text1" style = "overflow: hidden !important;" wrap="off"><?php echo $arr[$textid2][1]; ?></textarea></p>
<textarea rows="30" cols="70" name="text2"><?php print $file; ?></textarea>
<?php
$form = "<input type=hidden name=id value=$textid>";
print $form;
$form = "<input type=hidden name=id2 value=$textid2>";
print $form;
?>
<p><input type="submit" value="Сохранить"></p>
</form>
</div>
</td>
</tr>
</table>
</body>
</html>
При загрузки этой формы(php страница), автоматически открывается по определившемуся id текстовый файл с содержимым(новости)
В самом конце этой php страницы находится форма с которой у меня сложности.
Во втором файле (save_txt.php) $t1 = $_POST['text1']; почему то с пробелом в конце.
когда изменяю содержимое текущего элемента массива (вот таким образом $lArray[$idText2][1] = $t1;), то получается смещение Если вместо $t1 вписать любой текст, а не переменную, то все норм отображается.
Здесь собственно и обрабатываются все изменения внесенные в форме:
save_txt.php
<?php session_start(); header("Content-Type: text/html; charset=utf-8"); ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?php
$t1 = $_POST['text1'];
$t2 = $_POST['text2'];
$idText = $_POST['id'];
$idText2 = $_POST['id2'];
$txtt = "tt".$t1."dd";
echo"<br/>";
echo $txtt;
echo"<br/>";
//$string = "This is a test";
echo ereg_replace (" ", "", $txtt);
echo"<br/>";
//$t1 = "tt4";
echo"t1= ".$t1;
echo"<br/>";
echo"t2= ".$t2;
echo"<br/>";
echo"id= ".$idText;
echo"<br/>";
echo"id2 ".$idText2;
echo"<br/>";
//#######################################################################
// Загружаем файл, СПИСОК ВСЕХ СТАТЕЙ
$filename1 = 'file3.txt';
$f = file($filename1);
flock($f,LOCK_EX);
$file = '';
$path = '';
$id = '';
$count_0 = 0;
$count_2 = 0;
//--------- Заносим содержимое файла в массив
foreach( $f as $line=>$data ) {
if($count_0 <= 2){
if($count_0 == 0){$lArray[$count_2][$count_0] = $data;}
else if($count_0 == 1){$lArray[$count_2][$count_0] = $data;}
else if($count_0 == 2){$lArray[$count_2][$count_0] = $data;}
if($count_0 == 2){$count_0 = -1;$count_2++;}
$count_0++;
};
};
fflush($f);
flock($f,LOCK_UN);
fclose($f);
//------------------------------
echo"Элемент= ".$lArray[$idText2][1];
echo"<br/>";
//----------------------------- вносим изменение в Заголовок новостей;
//-- Изменение приходит из формы;
$lArray[$idText2][1] = $t1;
echo"Элемент= ".$lArray[$idText2][1];
echo"<br/>";
trace2($lArray);
//-----------------------
function trace2($array){
echo count($array);
echo"<br/>";
$l1 = count($array);
$l2 = count($array[0]);
for($i = 0;$i < $l1;++$i){
for($j = 0;$j < $l2;++$j){
echo"i= ".$i." ; j".$j;
echo"<br/>";
echo"array= ".$array[$i][$j];
echo"<br/>";
}
echo"----";
echo "<br/>";
}
}
//-----------------------------------Открываем файл для перезаписи
$f=fopen($filename1,"a+");
flock($f,LOCK_EX);
fread($f,filesize($filename1));
//---------------------------Очистить файл
ftruncate($f,0);
//--------------------------в цикле записываем в файл все произведенные ранее изменения
$length1 = count($lArray);
$length2 = count($lArray[0]);
for($i = 0;$i < $length1;++$i){
for($j = 0;$j < $length2;++$j){
$txt = $lArray[$i][$j];
fwrite($f,$txt);
echo "<br/>";
echo"i= ".$i." ; j".$j;
echo"<br/>";
echo "txt=".$txt;
echo "<br/>";
};
echo"----";
echo "<br/>";
};
//------------------Закрываем файл
fflush($f);
$c=fread($f,filesize($filename1));
flock($f,LOCK_UN);
fclose($f);
//############################################################################
//####################################Сохраняем основной контент
$filename = 'news_'.$idText.'.txt';
//echo"file= ".$filename;
$f=fopen($filename,"a+");
flock($f,LOCK_EX);
$count=fread($f,filesize($filename));
//---------------------------Очистить файл
ftruncate($f,0);
fwrite($f,$t2);
fflush($f);
$c=fread($f,filesize($filename));
flock($f,LOCK_UN);
fclose($f);
//#######################################################################
// Загружаем файл, СПИСОК ВСЕХ СТАТЕЙ
$filename1 = 'file3.txt';
$f = file($filename1);
flock($f,LOCK_EX);
$file = '';
$path = '';
$id = '';
$count_0 = 0;
$count_2 = 0;
//--------- Заносим содержимое файла в массив
foreach( $f as $line=>$data ) {
if($count_0 <= 2){
if($count_0 == 0){$lArray[$count_2][$count_0] = $data;}
else if($count_0 == 1){$lArray[$count_2][$count_0] = $data;}
else if($count_0 == 2){$lArray[$count_2][$count_0] = $data;}
if($count_0 == 2){$count_0 = -1;$count_2++;}
$count_0++;
};
};
trace2($lArray);
fflush($f);
//$c=fread($f,filesize($filename1));
flock($f,LOCK_UN);
fclose($f);
//---------------------------------
//header("Location: form1_3.php");
//if ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 8.0') ){header('Location: form1_0.php');
//}else{header('Refresh: 1; URL=http://brownpaperbox.com/games/textEdit1/form1_0.php');}
//<a href = "form1_0.php">back</a>
?>
<a href = "form1_0.php">back</a>
здесь некоторые строки закоментированые, это вобщем черновик, но работающий, кроме корректного редактирования.
Как говорилось выше, если в textarea с именем name = "text1" сделать перенос строки, то получается смещение в file3.txt
Что я не так сделал? подскажите пожалуйста
Спустя 7 часов, 36 минут, 42 секунды (8.08.2010 - 13:11) Ice написал(а):
Цитата (GRean @ 8.08.2010 - 06:35) |
simpleXml и оказалось что тот не умеет удалять child |
Работайте с DOMNode
Спустя 16 минут, 29 секунд (8.08.2010 - 13:28) Семён написал(а):
Всё он умеет!
unset($xml->test['id']);
Спустя 8 часов, 20 минут, 42 секунды (8.08.2010 - 21:49) GRean написал(а):
Цитата (Семён @ 8.08.2010 - 10:28) |
Всё он умеет! unset($xml->test['id']); |
тогда помогите удалить весь <stat id="1">
<?xml version="1.0" encoding="UTF-8"?>
<list>
<stat id="1">
<title>Новость1</title>
<data>Дата1</data>
</stat>
<stat id="2">
<title>Новость2</title>
<data>Дата2</data>
</stat>
<stat id="3">
<title>Новость3</title>
<data>Дата3</data>
</stat>
<stat id="4">
<title>Новость4</title>
<data>Дата4</data>
</stat>
<stat id="5">
<title>Новость5</title>
<data>Дата5</data>
</stat>
<stat id="6">
<title>Новость6</title>
<data>Дата6</data>
</stat>
<stat id="7">
<title>Новость7</title>
<data>Дата7</data>
</stat>
<stat id="8">
<title>Новость8</title>
<data>Дата8</data>
</stat>
<stat id="9">
<title>Новость9</title>
<data>Дата9</data>
</stat>
</list>
Спустя 57 минут, 25 секунд (8.08.2010 - 22:46) Nord написал(а):
Цитата |
тогда помогите удалить весь <stat id="1"> |
Пожалуйста:
$string = <<<XML
<list>
<stat id="1">
<title>Новость1</title>
<data>Дата1</data>
</stat>
<stat id="2">
<title>Новость2</title>
<data>Дата2</data>
</stat>
<stat id="3">
<title>Новость3</title>
<data>Дата3</data>
</stat>
<stat id="4">
<title>Новость4</title>
<data>Дата4</data>
</stat>
<stat id="5">
<title>Новость5</title>
<data>Дата5</data>
</stat>
</list>
XML;
$xml = new SimpleXMLElement($string);
$nodes = $xml->xpath("stat[@id='1']");
if ($node) {
unset($nodes[0][0]);
echo($xml->asXML());
}
//
//Выведет:
//<list>
// <stat id="2">
// <title>Новость2</title>
// <data>Дата2</data>
// </stat>
// <stat id="3">
// <title>Новость3</title>
// <data>Дата3</data>
// </stat>
// <stat id="4">
// <title>Новость4</title>
// <data>Дата4</data>
// </stat>
// <stat id="5">
// <title>Новость5</title>
// <data>Дата5</data>
// </stat>
//</list>
Спустя 34 минуты, 21 секунда (8.08.2010 - 23:20) GRean написал(а):
Nord
Огромное тебе спасибо за пример, я уж было разочаровался в simplexml и вообще в метовах xml!
Все работает и подправил для чтения из файла
Огромное тебе спасибо за пример, я уж было разочаровался в simplexml и вообще в метовах xml!
Все работает и подправил для чтения из файла