Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Chat, viestin poisto tekstitiedostosta

Sivun loppuun

Jontsu1 [17.02.2013 21:20:06]

#

Tein murekuhasta tällä ohjeella chatin: http://mureakuha.com/koodikirjasto/592 . Viestit generoituvat siis chat.txt tiedostoon. Mutta kysymykseni olikin että onko mahdollista saada noita viestejä pois tietokannasta yhdellä klikkauksella, eli (vain) mulla näkyis viestien vieressä joku "poista" nappi?

The Alchemist [17.02.2013 21:21:26]

#

Tietysti on. Voit joko poistaa viestejä rivinumeron perusteella, mutta luotettavampaa olisi lisätä jokaiseen viestiin yksilöllinen tunniste, jonka perusteella rivit voi tunnistaa ja poistaa luotettavammin.

Jontsu1 [17.02.2013 21:24:42]

#

Ja PHP-taitoni ovat melko huonot, joten mitenköhän tällaisen "tunnisteen" voisi lisätä?

Metabolix [19.02.2013 01:06:20]

#

Tuo koodi on todella huonoa, en suosittele.

Voit lisätä chat.php:hen yksilöivän tunnisteen joka riville muuttamalla fwrite-riviä näin:

// fwrite($fp, $logit);
fwrite($fp, "<!-- ". uniqid(1,1). " -->". $logit);

Yksinkertaisin tapa viestien poistamiseen on tehdä erillinen sivu, jolla niitä poistetaan. Sivu voisi näyttää tältä:

<?php
$viestit = file("chat.txt");
if (isset($_POST["poista"])) {
	if ($_POST["salasana"] != "kissa2") {
		die("Salasana ei kelpaa!");
	}
	file_put_contents("chat.txt", array_diff($viestit, array(urldecode($_POST["poista"]))));
	header("Location: ". basename(__FILE__));
	die();
}
?>
<form action="?" method="post">
Salasana: <input type="password" name="salasana">
<hr>
<?php
// -4 = näytetään 4 viestiä; 0 = näytetään kaikki.
foreach (array_slice($viestit, -4) as $viesti) {
	echo $viesti;
	$v = urlencode($viesti);
	echo "<button type='submit' name='poista' value=\"$v\">Poista</button>";
	echo "<hr>";
}
?>
</form>

Jontsu1 [19.02.2013 09:23:14]

#

Kiitosta, toimii ja auttoi paljon :)

Jontsu1 [02.03.2013 22:28:30]

#

Onkelma ilmeni.

Chatissa spämmii nykyään niin moni, että haluaisin että KAIKKIEN jotka kirjoittavat tuonne, IP-osoite näkyisi, mutta vain minulle, tuo onnistuisi varmaan esim. salasanalla?

Viitsisikö joku auttaa? IP:t saisi näkyä suoraan viesteissä tai sitten jollain eri sivulla..

Jontsu1 [03.03.2013 18:17:21]

#

Kaipaisin vastauksia..


Triplepost..

Metabolix [03.03.2013 18:41:41]

#

Ei se hyvä vastaus vaatimalla tule.

Kuten jo viimeksi sanoin, olet valinnut pohjaksi todella huonon koodin, johon on vaikea tehdä mitään järkeviä muutoksia. Koodi perustuu siihen, että kaikki viestit ovat tiedostossa tulostusvalmiina; siksi niiden muokkaaminen tai näyttäminen eri tilanteissa eri tavalla on tarpeettoman vaikeaa. Hankkisit kunnollisen viestisysteemin tai opettelisit itse ohjelmoimaan.

Jos nyt vielä jatketaan vanhalla purkkalinjalla, voit vain lisätä IP-osoitteen tallennusvaiheessa:

// fwrite($fp, $logit);
$logit = "<!--ADMIN-->IP: {$_SERVER["REMOTE_ADDR"]}<br><!--/ADMIN-->". $logit;
fwrite($fp, "<!-- ". uniqid(1,1). " -->". $logit);

Sitten voit muuttaa viestit tulostavan sivun (Kuhan vinkin ensimmäisen koodin) tällaiseksi, jotta IP-osoitetta ei näytetä siinä:

<?php
$viestit = file("chat.txt");
?>
<form method="post" action="chat.php" name="chat">
	<p><input name="nick" value="nimi" maxlength="15"></p>
	<p><input name="msg" type="text" value="viesti" maxlength="128"></p>
	<p><button type="submit">Lähetä</button></p>
</form>
<?php
foreach (array_slice($viestit, -4) as $viesti) {
	$viesti = preg_replace('#<!--ADMIN-->.*?<!--/ADMIN-->#', '', $viesti);
	echo $viesti;
}
?>

IP-osoite näkyy tuolla aiemmin tehdyllä sivulla, jolla viestejä voi poistaa.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta