Avatar billede madsens90 Praktikant
25. oktober 2007 - 09:47 Der er 22 kommentarer og
1 løsning

man skal ikke kunne lave beskeden for "høj"

Jeg har en tagwall på min side, og man har et bestemt antal tegn til at bruge når man skriver beskeden.

Man kan bruge nl2br(); og <br> for linieskift,
og nogle folk har desværre fundet ud af at man kan lave en hel masse linier og så lave en hel vildt lang besked, selvom man ikke har så mange tegn at bruge.

Kan man forhindre dette?
Avatar billede nielle Nybegynder
25. oktober 2007 - 09:56 #1
Du kan lave en split() på din besked på linjeskift. Dette giver dig et array med en post pr. linje i neskeden. Så kan du lave en count() på denne for at tælle antallet af linjer. Er der fro mange, kan du jo bare nægte at modtage beskeden.
Avatar billede uggi16 Nybegynder
25. oktober 2007 - 10:03 #2
Eller.. lave et OnChange javascript på tekstfeltet der blokkere submitknappen hvis der er længden på feltet er over et bestemt antal tegn...
Avatar billede madsens90 Praktikant
25. oktober 2007 - 10:19 #3
Sad lige og kiggede lidt på split() og count(), og det er vidst lidt for avanceret for mig. :P

uggi16, kan du give et eksempel på det der OnChange javascript, eller skal jeg lave et nyt spørgsmål under javascript, og ikke php først ? :P
Avatar billede olebole Juniormester
25. oktober 2007 - 10:51 #4
<ole>

Denne her tillader kun ét linjeskift ad gangen, hvis du kører den, inden indsættelse i DB:

$s = "Ole\nBole\r\n\r\n\r\nBum\n\nHej";
$s = preg_replace("/(\r\n|\r|\n){2,}/", "$1", $s);
print $s;

/mvh
</bole>
Avatar billede olebole Juniormester
25. oktober 2007 - 10:52 #5
- evt. kombineret med nielle's løsning  :)
Avatar billede nielle Nybegynder
25. oktober 2007 - 11:01 #6
$besked = $_POST["besked"];
$besked = nl2br($besked);
$beskedArr = split("<br>", $besked);
if (count($beskedArr) > 15)
{
    // Afvis
}
else
{
    // Godkend og post.
}
Avatar billede uggi16 Nybegynder
25. oktober 2007 - 11:55 #7
IDer i formen:
textfelt = "textboks"
Submitknap = "Submit"

du tilføjer den der onChange funktion til dit tekstfelt:
onChange="java script:tolongtext();"

<script>
function tolongtext()
{
var boks = document.form.textboks.value.lenght;
var sub = document.form.submit;

if (boks.value > 150)
{
    sub.disabled = true;
}
else
{
    sub.disabled = false;
}
}
</script>

Så skulle brugeren ikke kunne submitte formen før indholdet af tekstfeltet er under 150 tegn :)
Avatar billede olebole Juniormester
25. oktober 2007 - 12:01 #8
uggi16 >> Du kan/må under ingen omstændigheder have en knap, der hedder submit. Derudover kan man jo bare trykke 'Return' i et tekstfelt ... så submitter formen helt fint, selvom der skulle stå 827 tegn  :)
Avatar billede uggi16 Nybegynder
25. oktober 2007 - 12:09 #9
olebole > Så kald den "olebole" :) og hvis der er over 150 tegn i tekstfeltet vil koden slå submit knappen fra ;)
Avatar billede madsens90 Praktikant
25. oktober 2007 - 12:18 #10
kan godt lide det der javascript. :P

Det er dejlig enkelt. XD

Ole:
Problemet er at de spammer på denne måde (Hvilket ikke har mere en ét linjeskift af gangen)

hejmeddig
hejmeddig
hejmeddig
osv. osv. osv.
Avatar billede olebole Juniormester
25. oktober 2007 - 13:07 #11
uggi16 >> Ja, submit-knappen bliver disabledved 151 tegn, men det er jo ligegyldigt, når man så let som ingenting kan submitte formen uden  :)
1) brugeren kan trykke 'Return' i et tekstfelt
2) brugeren kan enable knappen igen
3) brugeren kan slå JavaScript fra

madsens90 >> Du kan ikke forhindre noget somhelst med JavaScript. Du er nødt til at bruge en serverside løsning. Hvis spammernes fremgangsmåde er, som du viser, ville jeg foretrække nielle's løsning  :)
Avatar billede nielle Nybegynder
25. oktober 2007 - 13:15 #12
I en lidt simplere form:

$besked = $_POST["besked"];
$beskedArr = explode("\r\n", $besked);
if (count($beskedArr) > 15)
{
    // Afvis ...
}
else
{
    // Godkend og post.
}
Avatar billede nielle Nybegynder
25. oktober 2007 - 13:17 #13
... eller:

$besked = $_POST["besked"];
$besked = nl2br($besked);
$beskedArr = explode("<br />", $besked);
if (count($beskedArr) > 15)
{
    // Afvis ...
}
else
{
    // Godkend og post.
}

Jeg er nemlig lidt usikker på om folk som sidder med en browser fra en Linux eller en Mac altid sender "... \r\n ..." eller om de kun sender hhv. "... \n ... " og "... \r ...". Ole?
Avatar billede olebole Juniormester
25. oktober 2007 - 13:24 #14
Hehe ... der kan ske lidt af hvert. Forskellige platforme bruger alle tre versioner  :o|

Dette skulle vel kunne sikre alle:

$besked = $_POST["besked"];
$besked2 = preg_replace("/(\r\n|\r|\n)/", "{BREAK}", $besked);
$beskedArr = explode("{BREAK}", $besked2);
if (count($beskedArr) > 15)
{
    // Afvis ...
}
else
{
    // Godkend og post.
    // - brug $besked
}
Avatar billede olebole Juniormester
25. oktober 2007 - 13:26 #15
Årsagen til {BREAK} er, at ellers går der ged i udskiftningen med det pågældende RX-mønster. Ikke særlig 'sexy', men på den anden side mener jeg, man bør dumpe indlægget, _inden_ det bliver indsat  :)
Avatar billede nielle Nybegynder
25. oktober 2007 - 13:29 #16
Jeg gætter på at kaldet af nl2br() vil fungere lige så godt om din preg_replace()?
Avatar billede olebole Juniormester
25. oktober 2007 - 13:32 #17
Yups, jeg troede bare, du ville gøre det, når data blev fremvist  :)

$besked = $_POST["besked"];
$besked2 = nl2br($besked);
$beskedArr = explode("<br />", $besked2);
if (count($beskedArr) > 15)
{
    // Afvis ...
}
else
{
    // Godkend og post.
    // - brug $besked
}

- sådan. Så er det skåret ud i pap  ;o)
Avatar billede nielle Nybegynder
25. oktober 2007 - 13:58 #18
... når data blev fremvist>

Nej, efter min mening bør man bare konsekvent afvise indlæg som tydeligvis er designet til at sabotere udseenedet af ens gæstebog/tagwall/chat/gobbeligob. Det gælder således "høje poster" såvel som poster med laaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaange ord.

Afvises. Der er ingen grund til at bruge krævter på at få dem til at frestå pænere. Afvises.
Avatar billede uggi16 Nybegynder
25. oktober 2007 - 14:01 #19
Svar til brugeren: Dit indlæg er afvist.. du snakker for meget ?
Avatar billede madsens90 Praktikant
25. oktober 2007 - 14:27 #20
Hehe. Prøver sådan nogenlunde at følge med i det der. :D

Men tror jeg vil teste:
$besked = $_POST["besked"];
$besked = nl2br($besked);
$beskedArr = explode("<br />", $besked);
if (count($beskedArr) > 15)
{
    // Afvis ...
}
else
{
    // Godkend og post.
}

Skal bare lige hjem først. ;)
Avatar billede olebole Juniormester
25. oktober 2007 - 14:39 #21
nielle >> Så er vi (igen) fuldstændig enige!  ;o)
Avatar billede madsens90 Praktikant
25. oktober 2007 - 17:03 #22
Nielle.. brugte din meget simple form. :P

$besked = $_POST["besked"];
$beskedArr = explode("\r\n", $besked);
if (count($beskedArr) > 15)
{
    // Afvis ...
}
else
{
    // Godkend og post.
}

Tak for det. :) Kom med et svar, og få point. :)
Avatar billede nielle Nybegynder
25. oktober 2007 - 19:00 #23
Svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester