Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP, JS]Sprawdzanie formularza
inOs
post 9.08.2008, 10:05:07
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 16.01.2008

Ostrzeżenie: (0%)
-----


Witajcie, mam pewien problem -
Mam skrypt na dodawanie komentarzy, chce zrobić coś, aby spamerzy nie mogli wkleić linków do innych stron, zrobiłem takie coś w JS:
Kod
function sprawdz()
  {
  if(document.getElementById("comment").value.indexOf("http://")!=-1) {alert("Nie można wklejać linków do innych stron"); return false;} else {window.event.returnValue=true;}
  }

Po naciśnięciu button "wyślij" wyskakuje ten komunikat, jesli w komentarzu znajduje sie http:// - fajnie.
Problem polega na tym ze i tak wysyła ta wiadomość, bo w sumie, ciężko będzie zatrzymać skrypt PHP poprzez JS, da sie takie coś zrobić?

Albo da sie coś zrobić takiego w PHP? Próbowałem,
Kod
if ($comment == ("http://") or ("https://") or (".com") or ("[url=") or ("[/url]") or ("<a href=")or ("</a>") or (".es") or ("www")){    
  echo "<script language=\"JavaScript\"> setTimeout(\"window.location.replace('http://frikiz.com')\", 1) </script>";  
  echo "<script language=\"JavaScript\"> alert('Nie można wklejać linków do innych stron!') </script>";  
  sleep (5);      
  $comment = exit;                                                                
  }


Niestety, te działania sie włączają od razu po wczytaniu strony.
Reasumując, jak można zrobić, tak ze, kiedy znajdzie linki w textboxie, zatrzymywano wykonywanie skryptu, i dawało jakaś wiadomość dla użytkownika, aby wiedział o co "kaman" biggrin.gif Obojętnie, czy w js, czy w php.
Pozdrawiam.
Wogole jestem jeszcze bardzo słabym webmasterem, wiec możecie sie spodziewać głupich błędów.
BTW. wkleję skrócony skrypt na te komentarze, tak na wszelki wypadek:
  1. <html>
  2. <head>
  3. <script language="JavaScript"> 
  4. <!-- 
  5. function sprawdz()
  6. {
  7. if(document.getElementById("comment").value.indexOf("http://")!=-1) {alert("Nie mozna wklejac linków do innych stron"); return false;} else {window.event.returnValue=true;}
  8. }
  9.  
  10. </script> 
  11.  
  12. </head>
  13. <body>
  14. <?php
  15.  
  16. extract($HTTP_GET_VARS);
  17. extract($HTTP_POST_VARS);
  18. function smile(){
  19. ?>
  20. <a href="http://frikiz.com/pages/gifs.htm" onclick="window.open('http://frikiz.com/pages/gifs.htm', 'http://frikiz.com/pages/gifs.htm', 'menubar=yes,toolbar=yes,location=centre,directories=yes,status=no,scrollbars=yes
  21. resizable=yes,fullscreen=no,channelmode=yes,width=300,height=500').focus(); return false"><p><strong>Gifs</strong></p></a>
  22. <?php
  23. }
  24. //if ($comment == ("http://") or ("https://") or (".com") or ("[url=") or ("[/url]") or ("<a href=")or ("</a>") or (".es") or ("www")){
  25. //echo "<script language=\"JavaScript\"> setTimeout(\"window.location.replace('http://frikiz.com')\", 1) </script>";
  26. //echo "<script language=\"JavaScript\"> alert('ĄNo puede poner links a otras paginas web!') </script>";  
  27. //sleep (5);
  28. //$comment = exit;  
  29. //}
  30. $name = stripslashes ($name);
  31. $comment = stripslashes ($comment);
  32. $name = stripslashes ($name);
  33. $comment = stripslashes ($comment);
  34. $lis="0";
  35. $user=file("../../../coment/badwords.txt");
  36. for($x=0;$x<sizeof($user);$x++) {
  37. $comment = str_replace($temp[0],"",$comment);
  38. $jemp = explode(";",$user[$x]);
  39. $opp[$x] = "$jemp[0];";
  40. $list[$lis] = $opp[$x];
  41. $lis++;
  42. }
  43. if(sizeof($list) != "0") {
  44. for($y=0;$y<sizeof($list);$y++) {
  45. $temp = explode(";",$list[$y]);
  46. $temq=ucwords($temp[0]);
  47. $temr=ucfirst($temp[0]);
  48. $tems=strtoupper($temp[0]);
  49. $comment = str_replace ($temp[0],"", $comment);
  50. $comment = str_replace ($tep,"", $comment);
  51. $comment = str_replace ($temq,"", $comment);
  52. $comment = str_replace ($temr,"", $comment);
  53. $comment = str_replace ($tems,"", $comment);
  54. $name = str_replace ($temp[0],"",$name);
  55. $name = str_replace ($temq,"",$name);
  56. $name = str_replace ($temr,"",$name);
  57. $name = str_replace ($tems,"",$name);
  58. $comment = trim($comment);
  59. }
  60. }
  61.  
  62. $main_file_m = $mfile;
  63. $latest_rev = 20;  //Number of latest reviews to show
  64. $lines_review = file($main_file_m);
  65. $abc = count($lines_review);
  66. $uli = $abc - $latest_rev;
  67. echo "<table width=425 height=30 align=center border=0 cellpadding=0 bordercolor=#3a
    4f6c>"
    ;
  68. for($cv = $abc; $cv >= $uli ;$cv--){
  69. if(substr($lines_review[$cv], 0, 6 )=="[list]"){
  70. $lpop = explode("|~|",$lines_review[$cv]);
  71. if ($lpop[5]=="5"){
  72. $img="../../../coment/vota/b5.jpg";
  73. }elseif ($lpop[5]>="4"){
  74. $img="../../../coment/vota/b4.jpg"; }
  75. elseif ($lpop[5]>="3"){
  76. $img="../../../coment/vota/b3.jpg"; }elseif ($lpop[5]>="2"){
  77. $img="../../../coment/vota/b2.jpg"; }elseif ($lpop[5]>="1"){
  78. $img="../../../coment/vota/b1.jpg"; }
  79. $bar="<img src='$img'>";
  80. $mesi=wordwrap($lpop[2], 50, "\n", 1);
  81. echo "<tr><td bgcolor=#c2cfdf>$lpop[1] Ańadido en $lpop[3] $bar</td></tr><tr><td bgcolor=#f5f9fd>$mesi </td></tr>";
  82. }
  83. }
  84. ?>
  85. </td></table>
  86.  
  87. <form method='post'> 
  88. <table align="center" width=400 height=280 border='1' cellspacing='0' bordercolor=#000000 bgcolor=#F5F9FD>
  89. <tr><font size=1>
  90. <td bgcolor=#B2BFCF><img alt="" border="0" src="../../../gifs/discuss.gif" class="style96" width="16" height="16" /><font face="arial" size="2"><b>Comenta y ańade tu voto personal</b></font></td>
  91. </span><br />
  92. <tr><td><table border='0'cellspacing='0' align=middle bgcolor=#f5f9fd>
  93. <tr><td><font size=1>
  94. Nombre:<BR></font></b></td><td><input type='text' maxlength="30" name='name' size=20 style="font-weight:10"></td><td>Vota: <select name=rate><option value="">Selecciona<option value="5">5 - Excelente!<option value="4">4 - Muy bueno<option value="3">3 - Normal<option value="2">2 - Malo<option value="1">1 -Muy malo</select></td></tr></table><table>
  95. <tr valign='top'><td></td><td align=middle><?php
  96. smile();
  97. ?></td><tr><td><font size=1>
  98. Texto:<BR></b></td>
  99. <td><textarea cols='5' rows='3' maxlength="60" name='comment' id="comment" onkeydown="textCounter(this.form.comment,this.form.descriptionleft,60);"></textarea><br>Faltan:&nbsp;<INPUT maxLength=3 name=descriptionleft readOnly size=3 tabIndex=60 value=60 s
    tyle='BORDER-RIGHT: 0px; BORDER-TOP:0px;BORDER-LEFT:0px; BORDER-BOTTOM:0px;BACKGROUND-COLOR: #f5f9fd;'></td></tr>
  100. <tr><td></td><td>
  101. <input type='submit' value='Ańadir' style="background:#f5f9fd;border-width:1;Border-color:#3a4f6c;" onClick="sprawdz()"></td></tr>
  102. </table>
  103. </table>
  104. </form>
  105. </font>


Ten post edytował inOs 9.08.2008, 10:09:18
Go to the top of the page
+Quote Post
Riotq
post 9.08.2008, 10:37:28
Post #2





Grupa: Zarejestrowani
Postów: 19
Pomógł: 1
Dołączył: 9.07.2008

Ostrzeżenie: (0%)
-----


Możesz użyc onsubmit w formularzu.

Kod
<form action="" method="post" onsubmit="check();">
...
</form>


Funkcja check (czy jak tam ją sobie nazwiesz) musi zwracaą wartość true albo false. Jezeli zwróci false to wysyłanie formularza zostaje przerwane. Poszukaj sobie o "onsubmit" w necie jeżeli za mętnie tłumacze, ale to powinno rozwiązać twój problem smile.gif
Go to the top of the page
+Quote Post
Shili
post 9.08.2008, 12:00:09
Post #3





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


Tak czy tak musisz to zrobić w php. Sprawdzanie tylko i wyłącznie w jsie to pomyłka jakich mało, a ktoś kto ma podstawową wiedzę o przeglądarce obejdzie Ci to w 30 sekund.

Zapoznaj na przykład się ze stristr" title="Zobacz w manualu PHP" target="_manual, tudzież preg_match" title="Zobacz w manualu PHP" target="_manual oraz wyrażeniami regularnymi.
Go to the top of the page
+Quote Post
inOs
post 9.08.2008, 12:44:47
Post #4





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 16.01.2008

Ostrzeżenie: (0%)
-----


Ok... a jak można zatrzymać skrypt?
Go to the top of the page
+Quote Post
Shili
post 9.08.2008, 12:47:02
Post #5





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


Najprościej przez die('Komunikat').

Ale o wiele bardziej profesjonalnie jest wrócić na stronę z formularzem, wyświetlić błąd i uzupełnić pola formularza wprowadzonymi już do niego przez użytkownika wartościami (sesje ogólnie do tego polecam i funkcję header).
Go to the top of the page
+Quote Post
inOs
post 9.08.2008, 13:02:29
Post #6





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 16.01.2008

Ostrzeżenie: (0%)
-----


if ($com == ("http://") or ("https://") or (".com") or ("[url=") or ("[/url]") or ("<a href=")or ("</a>") or (".es") or ("www")){
die('No puede poner links a otras paginas web');
}

Dlaczego mi od razu wyskakuje die, a nie dopiero po sprawdzeniu formularza?
Go to the top of the page
+Quote Post
--koki--
post 9.08.2008, 17:00:37
Post #7





Goście







Nie chciało mi sie dokładnie analizować, ale wydaje mi się że ten warunek jest sprawdzany za kazdym uruchomieniem strony, a powinien byc tylko w przypadku kiedy uzytkownik wyślie formularz, wiec najpierw powienienes sprawdzi czy t ozrobił mozesz to zrobic dodają pole hidden i potem sprawdzajac czy istnieje takie jaką mu wpisałes nazwe, albo lepszym chyba rozwiazaniem jest w <inptu type=submit> dodac parametr name o wartosci dajmy na to 'wyslano' i potem w skrypcie sprawdzasz czy uzytkownik kliknął to w ten sposób:
  1. <?php
  2. if(isset($_POST['wyslano'])
  3. {
  4.  //i dopiero tutaj sprawdzasz Twoj warunek
  5. }
  6. ?>


Jeżeli zbyt pobierznie przeanalizowałem ten Twoj skrypt i juz masz tam sprawdzenie tego w jakis sposob to przepraszam smile.gif
Go to the top of the page
+Quote Post
paziek
post 9.08.2008, 17:09:52
Post #8





Grupa: Zarejestrowani
Postów: 207
Pomógł: 25
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


część skryptu, która ma byc wykonywana tylko przy wysłaniu danych z formularza obejmij w
  1. <?php
  2. if($_SERVER['REQUEST_METHOD'] === 'POST') {
  3.  #tutaj kod wykonywany przy wysłaniu formularza
  4. }
  5. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 03:50