Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP, JS]Sprawdzanie formularza
Forum PHP.pl > Forum > Przedszkole
inOs
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>
Riotq
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
Shili
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.
inOs
Ok... a jak można zatrzymać skrypt?
Shili
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).
inOs
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?
-koki-
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
paziek
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. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.