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.
<?php
class rej{
var $wyslano;
var $ile = 9; //ilość pól formularza-1 - potrzebne do pętli
public function __construct($form_table, $wyslano) {
for ($i=0;$i<$this->ile;$i++){
}
}
private function input($value, $name, $style, $opis){
echo '<input type="text" maxlength="100" name="'.$name.'" value="'.$value.'" style="'.$style.'" /> '.$opis; }
private function przypiszOpisy(){
$this->opisy[0] = 'Login';
$this->opisy[1] = 'Hasło';
$this->opisy[2] = 'Powtórz hasło';
$this->opisy[3] = 'E-mail';
$this->opisy[4] = 'Imię';
$this->opisy[5] = 'Nazwisko';
$this->opisy[6] = 'Ulica i nr domu/mieszkania';
$this->opisy[7] = 'Kod pocztowy';
$this->opisy[8] = 'Miasto';
$this->opisy[9] = 'Telefon kontaktowy';
}
public function formularz(){
$this->przypiszOpisy();
echo '<form action="'.$_SERVER["REQUEST_URI"].'" method=POST>';
for ($i=0;$i<$this->ile;$i++){
if (!empty($this->wyslano) && empty($this->form[$i])){ //pusty $this->input($this->form[$i], 'form["'.$i.'"]', 'background-color: lightsteelblue;', $this->opis[$i].' - proszę uzupełnić');
}else{
$this->input($this->form[$i], 'form["'.$i.'"]', '', $this->opis[$i]);
}
}
echo '<input type=hidden name=wyslano value=tak />'; echo '<tr><td><input type=submit value=Zarejestruj /></td></tr>'; }
public function czyWypelniono(){
if (!empty($this->form[0
]) && !empty($this->form[1
]) && !empty($this->form[2
]) && !empty($this->form[3
]) && !empty($this->form[4
]) && !empty($this->form[5
]) && !empty($this->form[6
]) && !empty($this->form[7
]) && !empty($this->form[8
]) && !empty($this->form[9
])){ return true;
}else{
return false;
}
}
}//end class rej
$r = new rej($_POST["form"],$_POST["wyslano"]);
if ($r->czyWypelniono()){
echo '<h1>ZAPIS, WYPELNOINO</h1>'; }else{
$r->formularz();
}
?>
Ten post edytował hyhyhy 23.07.2011, 16:50:06