Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Tworzenie się klasy na nowo przy przesłaniu formularza - jak to obejść
hyhyhy
post
Post #1





Grupa: Zarejestrowani
Postów: 135
Pomógł: 5
Dołączył: 6.02.2011

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


Witam, piszę sobie formularz rejestracyjny w PHP z wyszczególnianiem niewypełnionych pól. Kod może trochę nieoptymalny, ale działałby, gdyby klasa nie tworzyła się za każdym razem po przesłaniu formularza. Jest to jakoś do obejścia, czy raczej powinienem sobie dać spokój, bo w PHP się tego nie stworzy? Dodam, że mam inny pisany kiedyś z nudów kod, który działa, ale zajmuje mi 4x tyle miejsca i sam się w nim gubię (IMG:style_emoticons/default/smile.gif)

A działanie tego kodu jest takie, że jak nacisnę "rejestruj", wszystkie pola dostaję na niebiesko z hasłem "proszę uzupełnić". I nigdy nie udaje mi się go wysłać. Z pewnością działałby, gdybym odwoływał się bezpośrednio do zmiennych z $_POST, ale wolę tego unikać, bo czytałem jakiś artykuł o atakach XSS gdzie coś było, że tworzy to lukę dla takiego ataku.

  1. <?php
  2.  
  3.  
  4. class rej{
  5. var $wyslano;
  6. var $ile = 9; //ilość pól formularza-1 - potrzebne do pętli
  7. var $form = array();
  8. var $opisy = array();
  9.  
  10.  
  11. public function __construct($form_table, $wyslano) {
  12. for ($i=0;$i<$this->ile;$i++){
  13. $this->form[$i] = mysql_real_escape_string(htmlspecialchars(trim($form_table)));
  14. }
  15. $this->wyslano = mysql_real_escape_string(htmlspecialchars($wyslano));
  16. }
  17.  
  18.  
  19.  
  20.  
  21. private function input($value, $name, $style, $opis){
  22. echo '<input type="text" maxlength="100" name="'.$name.'" value="'.$value.'" style="'.$style.'" /> '.$opis;
  23. }
  24.  
  25.  
  26. private function przypiszOpisy(){
  27. $this->opisy[0] = 'Login';
  28. $this->opisy[1] = 'Hasło';
  29. $this->opisy[2] = 'Powtórz hasło';
  30. $this->opisy[3] = 'E-mail';
  31. $this->opisy[4] = 'Imię';
  32. $this->opisy[5] = 'Nazwisko';
  33. $this->opisy[6] = 'Ulica i nr domu/mieszkania';
  34. $this->opisy[7] = 'Kod pocztowy';
  35. $this->opisy[8] = 'Miasto';
  36. $this->opisy[9] = 'Telefon kontaktowy';
  37. }
  38.  
  39.  
  40. public function formularz(){
  41. $this->przypiszOpisy();
  42. echo '<table>';
  43. echo '<form action="'.$_SERVER["REQUEST_URI"].'" method=POST>';
  44.  
  45. for ($i=0;$i<$this->ile;$i++){
  46. if (!empty($this->wyslano) && empty($this->form[$i])){ //pusty
  47. echo '<tr><td>';
  48. $this->input($this->form[$i], 'form["'.$i.'"]', 'background-color: lightsteelblue;', $this->opis[$i].' - proszę uzupełnić');
  49. echo '</td></tr>';
  50. }else{
  51. echo '<tr><td>';
  52. $this->input($this->form[$i], 'form["'.$i.'"]', '', $this->opis[$i]);
  53. echo '</td></tr>';
  54. }
  55. }
  56.  
  57. echo '<input type=hidden name=wyslano value=tak />';
  58. echo '<tr><td><input type=submit value=Zarejestruj /></td></tr>';
  59. echo '</form>';
  60. echo '</table>';
  61. }
  62.  
  63. public function czyWypelniono(){
  64. if (!empty($this->form[0]) && !empty($this->form[1]) && !empty($this->form[2]) && !empty($this->form[3]) &&
  65. !empty($this->form[4]) && !empty($this->form[5]) && !empty($this->form[6]) && !empty($this->form[7]) &&
  66. !empty($this->form[8]) && !empty($this->form[9])){
  67. return true;
  68. }else{
  69. return false;
  70. }
  71. }
  72.  
  73.  
  74. }//end class rej
  75.  
  76. $r = new rej($_POST["form"],$_POST["wyslano"]);
  77. if ($r->czyWypelniono()){
  78. echo '<h1>ZAPIS, WYPELNOINO</h1>';
  79. }else{
  80. $r->formularz();
  81. }
  82.  
  83.  
  84.  
  85. ?>
  86.  


Ten post edytował hyhyhy 23.07.2011, 16:50:06
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 24.08.2025 - 07:50