Strona 1 z 1

Problem z metodą POST na serwerze

Napisane: piątek, 10 lutego 2012, 22:40
przez matys777
Mam problem z metodą post. Zrobiłem sobie księgę gości:

Code: Zaznacz cały

<?php switch ($id)
{
case 1: 
   ?>

    
   <div class="styl"><br><font size="4">Twój wpis do księgi:<br><br><br></font>
   <form action="ksiega.php?id=2" method="POST">
   Autor:         
   <input type="text" size="30" maxlength="30" style="background-color: #BBBBBB; font-family: Verdana; font-size: 12pt color: #00FF00" name="Autor"><BR><BR>
   E-mail:        
   <input type="text" size="30" maxlength="30" style="background-color: #BBBBBB; font-family: Verdana; font-size: 12pt color: #00FF00" name="Adres"><BR><BR>
   www:          
   <input type="text" size="30" maxlength="30" style="background-color: #BBBBBB; font-family: Verdana; font-size: 12pt color: #00FF00" name="Web"><BR><BR>
<font size="2">(pola e-mail i www mogą pozostać puste)</font><BR><BR>
   <textarea name="Tresc" cols=50 style="BACKGROUND-COLOR: #BBBBBB; font-family: Verdana; font-size: 12pt color: #00FF00" ROWS=5></textarea><BR><BR><BR>          
   <input type="submit" value= " Dopisz " style="BACKGROUND-COLOR: #333333;  FONT-FAMILY : Verdana; FONT-SIZE : 12; color: #FFFFFF">          
   <input type="reset" value=" Wyczyść " style="BACKGROUND-COLOR: #333333; FONT-FAMILY : Verdana; FONT-SIZE : 12; color: #FFFFFF">
   </form></div>  
<?php break; ?>


<?php 
case 2: 

  if(($Autor=="") or ($Tresc==""))   // był jeszcze sprawdzanie pole e-mail, ale zrezygnowałem:  or ($adres=="")
  //jesli pole autor lub tresc jest puste pojawia sie komunikat monitujacy
  {
  print("<BR><BR><P class=\"styl\"><B>Nie wypełniłeś wszytkich pól</B></P>");
  print("<BR><BR><P class=\"styl\"><A HREF=\"ksiega.php?id=1\">powrót do formularza</A></P>");
  print("<P class=\"styl\"><A HREF=\"ksiega.php\">powrót do księgi</A></P>");
  exit;
  } 
//tu obrabia sie wpis przez usuniecie ewentualnych znakow niebezpiecznych,
//a enter zamienia sie na przejscie do nowej linii  
  $Web = filter_var($_POST['Web'], FILTER_SANITIZE_STRING);
  $Autor = filter_var($_POST['Autor'], FILTER_SANITIZE_STRING);
  $Tresc = filter_var($_POST['Tresc'], FILTER_SANITIZE_STRING);
  $Tresc = ereg_replace("\n", "<BR>", $Tresc);
  
  // Dzieli wyrazy dłuższe niż 40 znaków
  $Tresc = wordwrap($Tresc, 40,  " ", true);
  
//wpisy ksiegi gosci pamietane sa w pliku o nazwie ksiazka.txt - oczywiscie mozna to zmienic 

  $nazwa = "ksiazka.txt";
// IP wpisujacego

if($_SERVER['HTTP_CLIENT_IP'])
{
 $ip = $_SERVER['HTTP_CLIENT_IP'];
}
else if($_SERVER['HTTP_X_FORWARDED_FOR'])
{
 $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
 $ip = $_SERVER['REMOTE_ADDR'];
}

$nazwa = "ksiazka.txt"; 
  $myFile = fopen($nazwa, "r");
  $i=1;
  while(!feof($myFile))  {
     $myLine = fgets($myFile, 3000);
     $i++; 
   }
  fclose($myFile);

//nie wysilalem sie z weryfikacja wpisanego przez goscia adresu wlasnej strony
//po prostu mozna tutaj wpisac tylko adres w ktorym wystepuje ciag znakow ".pl"
//moze jest to krzywdzace dla posiadaczy stron bez takich znakow w adresie,
//ale z pewnoscia uchroni to ksiege przed wpisem zlosliwego goscia np. http://dupa.jasiu 



//jak widac nizej wpis zawiera nie tylko dane wpisane przez goscia, ale takze rozmaite znaczniki
//HTML formatujace wpis do postaci przydatnej do natychmiastowego wyswietlenia. 
//jest to rozwiazanie spotykane w wielu ksiegach gosci




 $wpis = "<table cellspacing='0' border='0'><tr border='0' bgcolor='d7d7d7'><td width='650px' style='text-align: justify;'><font style='font-size: 12px; text-align: left;'>[#$i] Autor: <b>$Autor</b></font><td width='200px' align='right'><font style='font-size: 10px; text-align: right;'><a href='mailto:$adres'><img title='$adres' src='obrazki/email.png' alt='$adres'></a>   <a href='http://$web'><img title='$web' src='obrazki/home.png' alt='$web'></a>   <img title='Adres IP to: $ip' src='obrazki/search.png' alt='Adres ip to: $ip'>    ".date("d.m.Y")."r.     ".date("H:i:s")."</font></td></tr><tr border='0'><td bgcolor='e0e0e0' colspan='2' style='text-align:justify;'><font style='font-size: 18px; '>$Tresc</font><br></td></tr></table>\n";
  
  $myFile = fopen($nazwa, "r+");
  $wpis=$wpis.fread($myFile, filesize($nazwa));
  rewind($myFile);
  fputs($myFile, $wpis);
  fclose($myFile);
    
  print("<BR><BR><P class=\"styl\"><B>Dziękuję za wpis!</B></P><BR>");
  print("<BR><BR><P class=\"styl\"><A href=\"ksiega.php\">obejrzyj swój wpis</A></P>");

//w tym miejscu jest hiperlink do powrotu do strony glownej naszego serwisu np index.php lub index.htm itp.

  print("<P class=\"styl\"><A href=\"ksiega.php\">powrót do strony</A></P>");

break; 

default:  //id nie równa się 1 ani 2 
  
  print "<A HREF=\"?id=1\">   ";
  print " >> <input type='submit' class='ksiega' value='Kliknij by dodać wpis'></input> <<</A>";
  print ("<BR><font color=#000000>liczba wpisów do księgi (od 01.02.2012): "); 


// zliczanie dotychczasowych wpisów
// tu istotny moment liczba 3000 lilka linii nizej okresla w przyblizeniu dlugosc calego wpisu
//ktory mozna dokonac. Jezeli gosc wpisze caly elaborat to moze on zostac podzielony na 2
//albo na wiecej wpisow w ksiedze, ktore beda wyswietlone jeden za drugim jakby byly to 2 wpisy
//jezeli liczba 3000 jest za mala to mozna ja zmienic

$nazwa = "ksiazka.txt"; 
  $myFile = fopen($nazwa, "r");
  $i=0;
  while(!feof($myFile))  {
     $myLine = fgets($myFile, 3000);
     $i++; 
   }
  fclose($myFile);
  print("   $i<BR><BR></B></font>"); // drukowanie liczby wpisow;

 
  print "<HR color=#0000FF width=\"500\"><BR>";
  $nazwa = "ksiazka.txt";
  $myFile = fopen($nazwa, "r");
  $k=1;
  $end=$st+9;
  while(!feof($myFile))   // dopóki nie jest koniec pliku - drukowanie po jednym wpisie (1 wpis = 1 linia pliku
   {        // ale 1 linia pliku ma już w sobie format w jakim jest drukowana - zajmuje kilka linii)
     $myLine = fgets($myFile, 2000);
     if ($k>=$st) {
        if ($k<=$end) {
                     
                print("<P class=\"styl\">$myLine</P><HR width=\"500\" color=#0000FF><BR>");           
        };
     };
     $k++;
   }


//wpisy w ksiedze sa wyswietlane  "w dawkach" po 10 sztuk na jednej stronie;
//kolejne wpisy sa dostepne na innych stronach ksiegi, do ktorych mozna wejsc
//przez hiperlinki u dolu strony 

  fclose($myFile);
  print("<P class=\"styl\"><B><font color=#000000>inne strony księgi<BR>");

  $ile=floor($i/11);                      //obliczenie ilości stron ksiegi
  $ctpage=floor($st/11)+1;          //numer strony biezacej
  for ($z=0;$z<=$ile;$z++) {
    $y=$z+1;                             //numery stron są od 1 a nie od 0
    if ($y==$ctpage) {print ("<FONT color=#000000> $y ");}       //piszemy numer biezacej strony nie jako hiperlink
       else {print ("<A HREF=\"ksiega.php?st=".$z."1\"> $y </A>");}    //numery innych stron to hiperlinki
  };


   break;} //koniec switcha
Na serwerze lokalnym wszystko działa pięknie, natomiast po wrzuceniu na serwer publiczny nie działa metoda post tzn. po kliknięciu na link nie wyświetla mi formularza do dodania komentarza.
Proszę o pomoc.

Re: Problem z metodą POST na serwerze

Napisane: piątek, 10 lutego 2012, 23:43
przez Morfidon
Zawsze odwołuj się do zmiennych $_POST przy pomocy $_POST['nazwa'], bo inaczej narażasz się niemiłosiernie na atak. Na serwerze masz wyłączoną opcję posługiwania się $_POST['Autor'] jako $Autor i bardzo dobrze, chronią Cię.

Re: Problem z metodą POST na serwerze

Napisane: sobota, 11 lutego 2012, 20:11
przez matys777
Zrobiłem to na różnych plikach php i wprowadziłem zabezpieczenia