[PHP] Shoutbox - kilka potrzebnych rzeczy

0

Witam! Znalazłem na necie jeden z najprostrzych shoutów:

index.php

<FRAMESET ROWS="*, 230" FRAMEBORDER=0 FRAMESPACING=0 BORDER=0>
   <FRAME SRC=rozmowa.php NAME="gora">
   <FRAME SRC="reply.php" NAME="dol">
</FRAMESET>

reply.php

<form method="post" action="save.php">
 <textarea id="content" name="content" style="width:100%; height:150;" class="mceEditor"></textarea><br><input name="user" size="20" value="Twój nick">
<input type="submit" value="Wy&#347;lij"></form>

rozmowa.php

<?
include("rozmowa.txt");
?>
<META HTTP-EQUIV="REFRESH" CONTENT="1">

save.php

<?

$EE = $_POST["content"];
$user = $_POST["user"];
$fp=fopen("rozmowa.txt", "a+");
fwrite($fp, "$user: $EE<br>");
fclose($fp);

?>

<script>window.location="reply.php"</script>

I potrzebuje do niego następujące rzeczy:

  1. Blokowanie znaków takich jak < > " $ &. Potrzebne mi to bo gdy wpiszę w wiadomosć shouta"<?" to potem nie chce mi się załadować plik rozmowa.txt i wychodzi coś takiego: "Parse error: parse error, unexpected '<' in C:\Program Files\WebServ\httpd\rozmowa.txt on line 1"

  2. Wczytywanie określonej ilości wpisów do SB . Jeśli to oczywiście możliwe. Bo jak sądzę bedzie to wymagało zmiany formy zapisywania wiadomości. (coś w stylu wczytywania ostatnich kilku linijek "rozmowa.txt")

  3. Określona ilość znaków w wiadomości, żeby mi nie wysyłali długiego spamu.

  4. à propos spamu. Przydało by mi się też jakieś czasowe ograniczenie pisania wiadomości, np 1 wiadomość co 10 sekund.

To by było na tyle. Z góry dziękuję i życzę wszystkim miłych wakacji, gdyż jeszcze się nie skończyły :) .

0

50PLN na konto PayPal (mail ten sam co w profilu), albo podam numer konta - zrobione od ręki w góra godzinę.

0

50 zl? ło ludzie. To może chociaż jedna z tych rzeczy za 50 zł mniej niż chcesz? ;-P

0

Ja nie fryzjer, jakbym wziął mniej to by mnie koledzy tutaj wyśmiali :>
Mogę podpowiedzieć żeby nie używać include do rozmowa.txt, tylko file_get_contents('rozmowa.txt'). Rozwiąże to szybko problem #1. Reszta kosztuje, to nie jest tak dużo...

No chyba że spytasz o jakiś KONKRETNY problem który napotkałeś podczas samodzielnego pisania wyżej wymienionych aktualizacji, to wtedy odpowiem ci za darmo, jak przychodzisz i prosisz "zróbcie mi to i to" to nikt za ciebie tego nie zrobi...

0

Poszukam jeszcze czegoś w necie i się trochę pomęczę, za darmo, może coś z tego wyjdzie. Życz mi powodzenia [green] .

0

Problem NR.1 udało mi się rozwiązać:

<?

$EE = $_POST["content"];
$user = $_POST["user"];
<font color="red">$EE = str_replace("<", "#", $EE);
$EE = str_replace(">", "#", $EE);
$EE = str_replace("$", "#", $EE);
$EE = str_replace("&", "#", $EE);</font>
$fp=fopen("rozmowa.txt", "a+");
fwrite($fp, "$user: $EE<br>");
fclose($fp);

?>

<script>window.location="reply.php"</script>

Także pozostają nr 2,3,4 :D

0
fwrite($fp, "$user: $EE<br>");

Skąd ludzie uczą się tak pisać kod? To będzie się dłużej parsowało, bo PHP musi poszukać zmiennych w stringu, o ile nie ma problemu przy tak małym stringu, to przy większym już będzie nie lada niespodzianka wydajnościowa. No i czasami jak się pomylisz w nazwie zmiennej to wychodzą głupoty, większość koloryzatorów kodu też nie koloruje takiego przypadku porządnie. Lepiej wszystko porozbijać:

fwrite($fp, $user . ': ' . $EE . '<br>');

Pamiętaj też że w nazwie użytkownika również mogą znajdować się dziwne znaki, no i to co pisałem wyżej z include - to jest aż proszenie się, żeby jakiś złośliwy kod się wykonał, lepiej przez file_get_contents()

0

Potrzebuje jeszcze pewnej rzeczy. Otóż zrobilem system logowania i system bana do shoutboxa. Ale mam problem, bo zrobilem sobie tez Panel Admina, w ktorym chcialbym miec formularz zawierajacy mozliwosc wpisania nicku kolesia do zbanowania.
W pliku konta jest cos takiego:

ban="0"

Chcialbym aby formularz zamienial mi ta wartosc na 1. Moze pokaze jeszcze jak mam to zadeklarowane (To mi dziala jakby co):

$account = $_SESSION["account"];
$file = $accounts . $account . ".txt";
$filecontents = fopen("$file", "r");
$line=fgets($filecontents);
$banpos=strstr($line,"ban=");

if(!($banpos === false)) {
				$bantemp=explode("\"",$banpos);
				$ban=$bantemp[1];
}
}

Wartość $ban moge bez problemu uzywac w warunkach. Także proszę o ten formularz, z góry dziękuję

0
fwrite($fp, "$user: $EE<br>");

Skąd ludzie uczą się tak pisać kod? To będzie się dłużej parsowało, bo PHP musi poszukać zmiennych w stringu, o ile nie ma problemu przy tak małym stringu, to przy większym już będzie nie lada niespodzianka wydajnościowa. No i czasami jak się pomylisz w nazwie zmiennej to wychodzą głupoty, większość koloryzatorów kodu też nie koloruje takiego przypadku porządnie. Lepiej wszystko porozbijać:

fwrite($fp, $user . ': ' . $EE . '<br>');

Zrób sobie tablicę:

$user = array();
$user['ban'] = 0;

Zserializuj:

$costam = serialize($user);

To co zwróciła funkcja wrzucasz do pliku. Potem jak chcesz odczytać:

$file = file_get_contents($plik);
$user = unserialize($file);

I normalnie masz w tablicy user zapisane różne wartości.

0

Nie chwytam. Nie chce teraz polowy shoutboxa przebudowywac na jakies tablice, nie ma zadnej funkcji która zastąpi mi to 0 na 1?

0

No jeśli bany zajmują ci połowę shoutboxa to faktycznie mały jest skrypt. Jeszcze raz:

//zakładanie bana
$user['ban'] = 1; //$user - dane o użytkowniku
$file = fopen(..., 'w');
fwrite($file, serialize($user));
fclose($file);
// zapisalismy do pliku usera ze ma bana.

// -----
//sprawdzanie czy user ma bana
$user = file_get_contents(...);
$user = unserialize($user);
if ($user['ban'] == 1)
exit('Masz bana kolego...');

Jestem zwolennikiem zmuszania do przerabiania kiczowatego kodu, na mniej kiczowaty. To ma walory edukacyjne.

0

Dobra. Juz sobie inaczej poradzilem:

<?

include('sciezki.php');


function setBeetween($from,$setto,$to,$string)
{
    if(!eregi($from,$string) || !eregi($to,$string)) return $string;
    $result = explode($from, $string);
    $res_arr = explode($to,$result[1]);
    $res_arr[0] = $setto;
    $result[1] = implode($to,$res_arr);
    $string = implode($from,$result);
    return $string;
}

$account = $_POST["userban"];


if(!empty($_POST['userban']))
{
$accountfile = file_get_contents($accounts . $account . '.txt');
                $accountfile = setBeetween('ban="','1','"',$accountfile);
                $acct_fp = fopen($accounts . $account . '.txt','w');
                fwrite($acct_fp,$accountfile);
                fclose($acct_fp);

$fil=fopen("rozmowa.txt", "a+");
rewind($fil);
flock($fil,2); 
fwrite($fil,'<i> :: Użytkownik o nicku ' . $account . ' został zbanowany!</i><br>');
flock($fil, 3); 
fclose($fil);

echo 'Uzytkownik zostal zbanowany!';
?><meta http-equiv="Refresh" content="2"; url=adminpanel.php" /><?
}
else
{
echo 'Wypelnij pole!';
?><meta http-equiv="Refresh" content="2"; url=adminpanel.php" /><?
}
?>

xd xd, tych tablic nie łapie, ale dzięki i tak za wczesniejsza pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1