Problem z metodą POST na serwerze

Tutaj dyskutujemy o PHP oraz zgłaszamy i rozwiązujemy problemy dotyczące tego języka.
matys777
Bywalec
Bywalec
Posty: 33
Dołączył(a): piątek, 10 lutego 2012, 22:35
Contact:

Problem z metodą POST na serwerze

Post 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.
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Problem z metodą POST na serwerze

Post 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ę.
matys777
Bywalec
Bywalec
Posty: 33
Dołączył(a): piątek, 10 lutego 2012, 22:35
Contact:

Re: Problem z metodą POST na serwerze

Post przez matys777 »

Zrobiłem to na różnych plikach php i wprowadziłem zabezpieczenia
Post Reply