Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP, banni systeemi

Sivun loppuun

Clacier [11.08.2010 21:39:41]

#

Hei. Sivuillani on käytössä /report- komento, ilmiannot tallentuvat mysqliin reports tableen, nick|kohde|väärinkäyttö. Moderaattorit voivat lukea näitä ns. moderaattorisivulla, ja tarkoituksena olisi tehdä bannien antaminen mahdolliseksi.

Miten tuollainen bannisysteemi olisi hyvä tehdä? Tarkoituksena olisi siis saada sellainen että voi asettaa esim. 1 päivän bannin (aka. mute), joka poistuu itsestään kyseisen päivän kuluessa.

Tein erillisen tablen ban, minkälaisia sarakkeita sinne kuuluisi laittaa?

Teuro [11.08.2010 22:26:55]

#

Olisko ihan vaikka id|aika|nick_id|syy_id|pituus_id

Tässä siis syy_id on viittaus syy-tauluun ja pituus_id on viittaus bannien pituuteen. Haku on ihan peruskauraa siinä vaiheessa, kun olet tulostamassa kirjoituslomaketta esille, niin katsot onko kirjautunut ja onko banneja. Ei ollenkaan paha rasti.

Clacier [11.08.2010 22:30:29]

#

Suurin piirtein tuollaista ajattelinkin. Mutta, otetaan vaikka tiedosto ban.php joka tarkistaa, onko banneja. Miten? Miten PHP:llä voi tarkistaa, onko aika+pituus_id päivämäärä mennyt jo? Olisi tarkoitus myös pystyä antaa esim. 10min tai 1h "pelikieltoja". Missä muodossa kyseinen pituus_id kannattaisi lisätä, että php osaisi sitä käsitellä? Voiko pituus_id olla esim. "1h" tai "1d" ?

E: Nyt on table mute. Sisältö:

id|nick|mod|syy|aika|pituus
1|jorma|ilkeämod|peeloilu|2010-08-11 22:34:17|1d


Miten tarkistus, onko kyseinen aika+pituus mennyt?

villev [11.08.2010 22:38:09]

#

Pistä pituus_id ihan vain sekunteina. Tällöin on helppo tarkistaa, onko banni vanhentunut:

<?php
if($aika + $pituus > time(0)){
//Bannatty
}
?>

Clacier [11.08.2010 22:39:56]

#

villev kirjoitti:

Pistä pituus_id ihan vain sekunteina. Tällöin on helppo tarkistaa, onko banni vanhentunut:

<?php
if($aika + $pituus > time(0)){
//Bannatty
}
?>

Okei. Varchar lienee sopiva sekuntien tallentamiseen mysliin?

Blaze [11.08.2010 22:42:44]

#

Miksi ihmeessä ei jokin numeerinen tyyppi? Unix-aikaleima mahtuu etumerkittömänä neljään tavuun (Myslin INT UNSIGNED) vuoteen 2106 asti.

Clacier [11.08.2010 22:44:45]

#

En tiedä. En ole hyvä myslissä, siksi päätinkin kysyä. Mikäs sitten? INT? :(

trilog [11.08.2010 22:45:38]

#

Voi sen vertailun tehdä suoraan hakulausekkeessakin, tyyliin:

SELECT NOW() > '2010-08-11 22:34:17';

Kannattanee tallentaa bannien päättymisaika myös aikaleimana. Tuollainen "1d" on hyvin epämääräinen, ja se estää tietojen joustavan käytön. Jos taas haluat käyttää sekunteja niin tallenna bannien pituus sekunteina. Mielestäni selvintä on kuitenkin tallentaa selvät ajankohdat, milloin banni on annettu ja milloin se päättyy.

Clacier kirjoitti:

Okei. Varchar lienee sopiva sekuntien tallentamiseen mysliin?

Oikea tyyppi olisi jokin numeerinen, esim. INT.

Clacier [11.08.2010 22:48:51]

#

Joo, laitoin INT. Tuli jo outo ongelma, miksei tämä suostunut lisäämään mitään? :O

<?php
include "database_yhteys/jne.php";
$date = date("Y-m-d H:i:s");
mysql_query("INSERT INTO mute(nick,mod,syy,aika,pituus) VALUES('Jorma', 'ModX', 'peelo', '$date', '3000')");
?>

trilog [11.08.2010 22:54:32]

#

Tarkista MySQL:n virheet funktiolla mysql_error.

Metabolix [14.08.2010 17:45:19]

#

Tauluun olisi järkevämpää tallentaa yksinkertaisesti bannin alkamis- ja loppumisajankohta, jolloin bannauksen voisi helposti tarkistaa näin:

SELECT COUNT(*) AS banneja_voimassa FROM bannit WHERE kayttaja = ? AND NOW() BETWEEN alkaa AND loppuu

Looginen tietotyyppi loppumisajalle on DATETIME.


Sivun alkuun

Vastaus

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

Tietoa sivustosta