Проблем с текстово поле и въвеждането му в тхт файл

Sonik_Blast

Registered
Здравейте колеги, днес се зблъсках със следния проблем:
Правя една проста формичка в която искам да се въвежда малко заглавие и малко текст. Да обаче когато текст е дълъг и с нови редове не ми го записва в текстовото файлче на 1 редче ами прави мацаница и се чудя дали може да помогнете ето малко да ви стане по-ясно:

формата:

Код:
<tr>
	<td>Author</td>
	<td><input type=text name=topicauthor size=29></td>
</tr>
<tr>
	<td>Enter topic title</td>
	<td>
		<input type=text name=topictitle size=29>
	</td>
</tr>
<tr bgcolor=#cccccc><td colspan=2>Enter short description of topic</td></tr>
<tr>
	<td colspan=2 align=center><textarea name=topicshort rows=5 cols=40></textarea></td>
</tr>
<tr bgcolor=#cccccc><td colspan=2>Enter full topic text here</td></tr>
<tr>
	<td colspan=2 align=center><textarea name=topictext rows=20 cols=40></textarea></td>
</tr>
<tr>
	<td colspan=2 align=center><input type=submit value='Submit Post'> <input type="reset" value="Clear"></td>
</tr>

кода
PHP:
<?php 

// here i get the values by _POST from orderform.html
$topicauthor = $_POST['topicauthor'];
$topicat = $_POST['topicat'];
$topictitle = $_POST['topictitle'];
$topicshort = $_POST['topicshort'];
$topictext = $_POST['topictext'];
$tshort = trim($topicshort);
$ttext = trim($topictext);

// here are the variables
$date = date('H:i');

// here i echo the values from orderform.html
echo ("Author: $topicauthor <br><br>");
echo ("Category: $topicat <br><br>");
echo ("Title: $topictitle <br><br>");
echo ("Short text: $topicshort <br><br>");
echo ("Full text: $topictext <br><br>");
echo ("Posed on: $date");

$output = $date."|".$topicauthor."|".$topicat."|".$topictitle."|".$tshort."|".$ttext."\n";

$file = "news.txt";
$open = fopen($file,'a');
if (!$open = fopen($file,'a')) { echo "No database"; }
fwrite($open, $output);
fclose($open);

?>

Надявам се разбрахте проблема че искам дългите текстове да си ми ги добавя на 1 редче в текстовото файлче и немога да разбера проблема къде идва.
 
Недей гледай Notepad какво ти показва (ако ползваш него), текста в действителност е на 1 ред. Редактора ти има лимит на редовете, за това се получава така, когато във PHP извикаш текста, той ще ти се покаже така както си го въвел.

Аз ти предлагам да ползваш различен разделител от нов ред. Може да ползваш пример: "|LineSeparate!1234| " или група от символи, който смяташ, че не могат да се въведат във нормален текст.

Извеждането става:

PHP:
$info = explode("|LineSeparate!1234|", $text);

foreach ($info as $in) {
echo $in; 
}

Все пак може и текстовете да си имат нови редове, защо да не?
 
Наистина отиват на нов ред ако искаш може да влезеш да видиш примера ми:

http://webleit.info/projects/hellfire/

Тука имаш ордер формата в която може да ги въведеш както и самото тхт файлче може да видиш какво се случва сложи в текстовото поле примерно

тест

тест

тест

и виж какво ще стане.
 
PHP:
for ($i=0; $i<$number_of_orders; $i++)
{
$line = explode('|', $orders[$i]);
echo "<table border=0 cellspacing=0 cellpadding=0 width=500px>";
echo "<tr><td colspan=2 bgcolor=#cccccc><b>Title: </b>$line[3]</td></tr>
<tr><td colspan=2 bgcolor=#cccccc><b>Author: </b>$line[1]<b> at: </b>$line[0]<b> in category: </b>$line[2]</td></tr>
<tr><td colspan=2 bgcolor=#cccccc><b>Short text</b></td></tr>
<tr><td colspan=2>$line[4]</td></tr>
<tr><td colspan=2 bgcolor=#cccccc><b>Full text</b></td></tr>
<tr><td colspan=2>$line[5]<hr></td></tr>
</table>";
}
echo("</table>");
 
Трябва да има array_filter();

Ето това може да го тестваш:

Ето ти формата за въвеждане:

HTML:
<form method="post" action="processorder.php">
    <table>	
    <tr>
   <td>Author</td>
   <td><input type=text name=topicauthor size=29></td>
</tr>
<tr>
   <td>Enter topic title</td>
   <td>
      <input type=text name=topictitle size=29>
   </td>
</tr>
<tr bgcolor=#cccccc><td colspan=2>Enter short description of topic</td></tr>
<tr>
   <td colspan=2 align=center><textarea name=topicshort rows=5 cols=40></textarea></td>
</tr>
<tr bgcolor=#cccccc><td colspan=2>Enter full topic text here</td></tr>
<tr>
   <td colspan=2 align=center><textarea name=topictext rows=20 cols=40></textarea></td>
</tr>
<tr>
   <td colspan=2 align=center><input type='submit' name='send' value='Submit Post'> <input type="reset" value="Clear"></td>
</tr>
    </table>
</form>

Ето ти и processorder.php

PHP:
if(isset($_POST['send'])) {
    
// here i get the values by _POST from orderform.html
$topicauthor = $_POST['topicauthor'];
$topicat = $_POST['topicat'];
$topictitle = $_POST['topictitle'];
$topicshort = $_POST['topicshort'];
$topictext = $_POST['topictext'];
$tshort = trim($topicshort);
$ttext = trim($topictext);

// here are the variables
$date = date('H:i');

// here i echo the values from orderform.html
echo ("Author: $topicauthor <br><br>");
echo ("Category: $topicat <br><br>");
echo ("Title: $topictitle <br><br>");
echo ("Short text: $topicshort <br><br>");
echo ("Full text: $topictext <br><br>");
echo ("Posed on: $date");

$output = $date."|".$topicauthor."|".$topicat."|".$topictitle."|".$tshort."|".$ttext."\n";

$file = "news.txt";
$open = fopen($file,'a');
if (!$open = fopen($file,'a')) { echo "No database"; }
fwrite($open, $output);
fclose($open);
}

Ето ти и vieworders.php

PHP:
$FileCont = file_get_contents('news.txt');
$EachNews = explode("\n", $FileCont);
$EachNews = array_filter($EachNews);
foreach ($EachNews as $News)
{
   
$line = explode('|', $News);

echo "<table border=0 cellspacing=0 cellpadding=0 width=500px>";
echo "<tr><td colspan=2 bgcolor=#cccccc><b>Title: </b>$line[3]</td></tr>
<tr><td colspan=2 bgcolor=#cccccc><b>Author: </b>$line[1]<b> at: </b>$line[0]<b> in category: </b>$line[2]</td></tr>
<tr><td colspan=2 bgcolor=#cccccc><b>Short text</b></td></tr>
<tr><td colspan=2>$line[4]</td></tr>
<tr><td colspan=2 bgcolor=#cccccc><b>Full text</b></td></tr>
<tr><td colspan=2>$line[5]<hr></td></tr>
</table>";
}


Препоръчвам обаче да ползваш база от данни - mysql.
 
Става така, защото при въвеждане на текста във полето натискаш enter, правиш нов ред. А във procesorder, ние отделяме по новия ред. За това ти казах по - горе, да направиш нов разделител, ако смяташ да има нови редове във големия текст. Тоест разделяй с друг разделител като например


Ето така направи procesorder:

Замени с това:

PHP:
$output = $date."|".$topicauthor."|".$topicat."|".$topictitle."|".$tshort."|".$ttext."[@#-]\n";

А също може да замениш и тези с това:

Тази функция ще направи така, че където сложиш (натиснеш enter) нов ред, после във vieworder, ще ти го изкара на нов ред със <br /> тага автоматично.

PHP:
$topicshort = nl2br($_POST['topicshort']);
$topictext = nl2br($_POST['topictext']);
Също така и във vieworder:

Замени с това:

PHP:
$EachNews = explode("[@#-]\n", $FileCont);


---------

А както казах също, ползвай MYSQL примерно вместо тези .txt файлове.
 
Ето това вече е гениално решение на целия този проблем.
Благодаря за помоща, ако си от София когато решиш където решиш имаш голяма биричка с картофки от мене! :)
 

Горе