Problem z metodą POST na serwerze

Tutaj dyskutujemy o PHP oraz zgłaszamy i rozwiązujemy problemy dotyczące tego języka.

Problem z metodą POST na serwerze

Postprzez matys777 » piątek, 10 lutego 2012, 22:40

Mam problem z metodą post. Zrobiłem sobie księgę gości:

Kod: 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: &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
   <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: &nbsp; &nbsp; &nbsp; &nbsp;
   <input type="text" size="30" maxlength="30" style="background-color: #BBBBBB; font-family: Verdana; font-size: 12pt color: #00FF00" name="Adres"><BR><BR>
   www:  &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
   <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> &nbsp;  &nbsp;  &nbsp; 
   <input type="submit" value= " Dopisz " style="BACKGROUND-COLOR: #333333;  FONT-FAMILY : Verdana; FONT-SIZE : 12; color: #FFFFFF"> &nbsp;  &nbsp;  &nbsp; 
   <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>&nbsp; &nbsp;<a href='http://$web'><img title='$web' src='obrazki/home.png' alt='$web'></a>&nbsp; &nbsp;<img title='Adres IP to: $ip' src='obrazki/search.png' alt='Adres ip to: $ip'>&nbsp;&nbsp;&nbsp;&nbsp;".date("d.m.Y")."r. &nbsp; &nbsp; ".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\">&nbsp;&nbsp;&nbsp;";
  print "&nbsp;>> <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):&nbsp;");


// 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(" &nbsp; $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.
matys777
Nowicjusz
 
Posty: 2
Dołączył(a): piątek, 10 lutego 2012, 22:35

Re: Problem z metodą POST na serwerze

Postprzez Morfidon » piątek, 10 lutego 2012, 23:43

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

Re: Problem z metodą POST na serwerze

Postprzez matys777 » sobota, 11 lutego 2012, 20:11

Zrobiłem to na różnych plikach php i wprowadziłem zabezpieczenia
matys777
Nowicjusz
 
Posty: 2
Dołączył(a): piątek, 10 lutego 2012, 22:35


Powrót do PHP

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość

cron