Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][quickForm] Sprawdzenie wartosci check box
Forum PHP.pl > Forum > PHP
Wolfie
Witam.


Napisalem sobie formularz w QuickForm w ktorym znajduje sie checkbox

formularz wyglada nastepujaco:

Kod
<?

require_once 'HTML/QuickForm.php';

$formularz = new HTML_QuickForm('formularz');

$formularz->setDefaults(
    array('login' => 'Mati')
    );



$formularz->addElement('header', null ,'Zgłoszenie nowego użytkownika');

$formularz->addElement('checkbox', 'check1', null, 'checkMe', null);

$formularz->addElement('text', 'login', 'Login:', null);
$formularz->addElement('password', 'password', 'Hasło (5-10 znaków) ', array('size' => 12, 'maxlength' => 10));
$formularz->addElement('password', 'repeat', 'Hasło (powtórz)', array('size' => 12, 'maxlength' => 10));

$formularz->addElement('text', 'name', 'Imie i nazwisko', null);
$formularz->addElement('text', 'mail', 'Adres e-mail', null);
$formularz->addElement('text', 'age', 'Wiek', null);
$formularz->addElement('text', 'phone', 'Telefon', null);

$formularz->addElement('select', 'prenumerata', 'Czy prenumerujesz <br /> magazyn INTERNET?:', array('Tak' => 'Tak', 'Nie' => 'nie'));
$formularz->addElement('submit', null, 'Wyslij');

//addRule($name, $msg, $option)
$formularz->addRule('login', 'Niepoprawny format pola login', 'regex', '/^[-_a-z0-9]+$/i');
$formularz->addRule('login', 'Wypełnij pole', 'required');
$formularz->addRule('password', 'Podaj haslo', 'required');
$formularz->addRule('password', 'Haslo musi miec 5-10 znakow', 'rangelength', array(5,10));
$formularz->addRule('repeat', 'Powtorz podane haslo', 'required');
$formularz->addRule(array('password','repeat'), 'Hasla musza byc takie same', 'compare');

$formularz->addRule('mail', 'Podaj adres e-mail', 'required', null, 'client');
$formularz->addRule('mail', 'Podaj poprawny adres e-mail', 'email');

$formularz->addRule('age', 'Podaj wiek', 'required', null, 'client');
$formularz->addRule('age', 'To nie moze byc Twoj wiek', 'numeric');

$formularz->addRule('name', 'Podaj imie i nazwisko', 'required', null, 'client');
$formularz->addRule('phone', 'To nie moze byc Twoj numer', 'numeric');

if($formularz->validate()){
    echo '<h1> Formularz </h1>';
        echo '<b> Imie i nazwisko </b>'.htmlspecialchars($formularz->exportValue('name')).'<br />';
        echo '<b> Hasło </b>'.htmlspecialchars($formularz->exportValue('password')).'<br />';
        echo '<b> Login </b>'.htmlspecialchars($formularz->exportValue('login')).'<br />';
        echo '<b> E-mail </b>'.htmlspecialchars($formularz->exportValue('mail')).'<br />';
        echo '<b> Wiek </b>'.htmlspecialchars($formularz->exportValue('age')).'<br />';
        echo '<b> Czy prenumerujesz : </b>'.htmlspecialchars($formularz->exportValue('prenumerata')).'<br />';
        echo '<b> Telefon </b>'.htmlspecialchars($formularz->exportValue('phone')).'<br />';
        exit;
}

$formularz->display();

?>



Szukalem w necie ale ciezko znalezc cos na temat QuickForm

Problem polega na tym, iz chce po zaznaczeniu checkboxa "zaslonic" powiedzmy pole 'age' aby nie mozna bylo tam nic wpisac.
Po odznaczeniu checkbox-a chcialbym aby to pole bylo znowu dostepne do edycji.

Jakies pomysly?

Ewentualnie zamias checkbox uzyc radio

POzdrawiam
cichy380
zdaje się, że metoda HTML_QuickForm->addElement() jako 4 parametr przyjmuje najczęściej atrybuty znaczników HTML, więc można w ten sposób podpiąć zdażenie onClick, a pod nie funkcje JavaScript.

Kod
$formularz->addElement('checkbox', 'check1', null, 'checkMe', array('onclick'=>'funkcja_java_script_rozróżniająca_wciśnięty_checkbox()'));

   $formularz->addRule('age', 'Podaj wiek', 'required', array('id'=>'identyfikato_elementu'), 'client'); // trzeba jakoś ten element zidentyfikować, ewentualnie ID można nadać na element HTML już w samym szablonie (jeżeli takowych używasz)
Wolfie
Nie uzywam szablonow bo nigdy nie mialem z nimi nic wspolnego.
Mysle ze element zidentyfikuje za pomoca getElementById()

Czy to dobry pomysl ?

Ok. Wiec odwolam sie poprzez getElementById() ale tutaj pojawia sie maly problem poniewaz checkbox ma w QuickForm na czwartej pozycji juz zadeklarowana jakas tablice wiec nie wiem jak przypisac mu ID aby pozniej odwolac sie do niego w taki sposob :

Kod
if(document.getElementById('box').checked == true)
         tu dalsza czesc kodu......


Napisalem cos takiego :

Kod
<?

require_once 'HTML/QuickForm.php';


<script type="text/javascript">

function dis_area()
{
    if(document.getElementById('box') == true)
        document.getElementById('log').disabled = true;
    else
        document.getElementById('log').disabled = false;
}


</script>

/*
$defaults = array('name' => 'Matt',
                  'age' => 25,
                  'phone' => 445);
                  */

$formularz = new HTML_QuickForm('formularz');

$formularz->setDefaults(
    array('login' => 'Mati')
    );

$attr = array('id'=>'box',
              'onClick' => 'dis_area();');



$formularz->addElement('header', null ,'Zgłoszenie nowego użytkownika');

$formularz->addElement('checkbox', 'check1', null, 'checkMe', $attr);

$formularz->addElement('text', 'login', 'Login:', 'id'=>'log');
$formularz->addElement('password', 'password', 'Hasło (5-10 znaków) ', array('size' => 12, 'maxlength' => 10));
$formularz->addElement('password', 'repeat', 'Hasło (powtórz)', array('size' => 12, 'maxlength' => 10));

$formularz->addElement('text', 'name', 'Imie i nazwisko', null);
$formularz->addElement('text', 'mail', 'Adres e-mail', null);
$formularz->addElement('text', 'age', 'Wiek', null);
$formularz->addElement('text', 'phone', 'Telefon', null);

$formularz->addElement('select', 'prenumerata', 'Czy prenumerujesz <br /> magazyn INTERNET?:', array('Tak' => 'Tak', 'Nie' => 'nie'));
$formularz->addElement('submit', null, 'Wyslij');

//addRule($name, $msg, $option)
$formularz->addRule('login', 'Niepoprawny format pola login', 'regex', '/^[-_a-z0-9]+$/i');
$formularz->addRule('login', 'Wypełnij pole', 'required');
$formularz->addRule('password', 'Podaj haslo', 'required');
$formularz->addRule('password', 'Haslo musi miec 5-10 znakow', 'rangelength', array(5,10));
$formularz->addRule('repeat', 'Powtorz podane haslo', 'required');
$formularz->addRule(array('password','repeat'), 'Hasla musza byc takie same', 'compare');

$formularz->addRule('mail', 'Podaj adres e-mail', 'required', null, 'client');
$formularz->addRule('mail', 'Podaj poprawny adres e-mail', 'email');

$formularz->addRule('age', 'Podaj wiek', 'required', null, 'client');
$formularz->addRule('age', 'To nie moze byc Twoj wiek', 'numeric');

$formularz->addRule('name', 'Podaj imie i nazwisko', 'required', null, 'client');
$formularz->addRule('phone', 'To nie moze byc Twoj numer', 'numeric');

if($formularz->validate()){
    
    $formularz->freeze();
    /*
    echo '<h1> Formularz </h1>';
        echo '<b> Imie i nazwisko </b>'.htmlspecialchars($formularz->exportValue('name')).'<br />';
        echo '<b> Hasło </b>'.htmlspecialchars($formularz->exportValue('password')).'<br />';
        echo '<b> Login </b>'.htmlspecialchars($formularz->exportValue('login')).'<br />';
        echo '<b> E-mail </b>'.htmlspecialchars($formularz->exportValue('mail')).'<br />';
        echo '<b> Wiek </b>'.htmlspecialchars($formularz->exportValue('age')).'<br />';
        echo '<b> Czy prenumerujesz : </b>'.htmlspecialchars($formularz->exportValue('prenumerata')).'<br />';
        echo '<b> Telefon </b>'.htmlspecialchars($formularz->exportValue('phone')).'<br />';
        exit;

    */
}

//$formularz->setDefaults($defaults);

$formularz->display();

?>



Ale niestety wyskakuje blad

Parse error: syntax error, unexpected '<' in C:\Program Files\WebServ\httpd\Formularz\formularz.php on line 6

Linia 6-ta to ta :

Kod
<script type="text/javascript">
skowron-line
  1. <?php
  2. <script type="text/javascript">
  3.  
  4. function dis_area()
  5. {
  6.    if(document.getElementById("box") == true)
  7.        document.getElementById("log").disabled = true;
  8.    else
  9.        document.getElementById("log").disabled = false;
  10. }
  11.  
  12.  
  13. </script>
  14. ';
  15. ?>
Wolfie
Skowron Twoj sposob niestety wywala bład :

Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in C:\Program Files\WebServ\httpd\Formularz\formularz.php on line 10

linia 10-ta to ta :

Kod
if(document.getElementById('box') == true){


Przenioslem za to kod javascript poza znacznik php i nie wywala bledu
Plik wyglada nastepujaco :

Kod
<?

require_once 'HTML/QuickForm.php';

/*
$defaults = array('name' => 'Matt',
                  'age' => 25,
                  'phone' => 445);
                  */

$formularz = new HTML_QuickForm('formularz');

$formularz->setDefaults(
    array('login' => 'Mati')
    );

$attr = array('id'=>'box',
              'onClick' => 'dis_area();');



$formularz->addElement('header', null ,'Zgłoszenie nowego użytkownika');

$formularz->addElement('checkbox', 'check1', null, 'checkMe', $attr);

$formularz->addElement('text', 'login', 'Login:', array('id'=>'log'));
$formularz->addElement('password', 'password', 'Hasło (5-10 znaków) ', array('size' => 12, 'maxlength' => 10));
$formularz->addElement('password', 'repeat', 'Hasło (powtórz)', array('size' => 12, 'maxlength' => 10));

$formularz->addElement('text', 'name', 'Imie i nazwisko', null);
$formularz->addElement('text', 'mail', 'Adres e-mail', null);
$formularz->addElement('text', 'age', 'Wiek', null);
$formularz->addElement('text', 'phone', 'Telefon', null);

$formularz->addElement('select', 'prenumerata', 'Czy prenumerujesz <br /> magazyn INTERNET?:', array('Tak' => 'Tak', 'Nie' => 'nie'));
$formularz->addElement('submit', null, 'Wyslij');

//addRule($name, $msg, $option)
$formularz->addRule('login', 'Niepoprawny format pola login', 'regex', '/^[-_a-z0-9]+$/i');
$formularz->addRule('login', 'Wypełnij pole', 'required');
$formularz->addRule('password', 'Podaj haslo', 'required');
$formularz->addRule('password', 'Haslo musi miec 5-10 znakow', 'rangelength', array(5,10));
$formularz->addRule('repeat', 'Powtorz podane haslo', 'required');
$formularz->addRule(array('password','repeat'), 'Hasla musza byc takie same', 'compare');

$formularz->addRule('mail', 'Podaj adres e-mail', 'required', null, 'client');
$formularz->addRule('mail', 'Podaj poprawny adres e-mail', 'email');

$formularz->addRule('age', 'Podaj wiek', 'required', null, 'client');
$formularz->addRule('age', 'To nie moze byc Twoj wiek', 'numeric');

$formularz->addRule('name', 'Podaj imie i nazwisko', 'required', null, 'client');
$formularz->addRule('phone', 'To nie moze byc Twoj numer', 'numeric');

if($formularz->validate()){
    
    $formularz->freeze();
    /*
    echo '<h1> Formularz </h1>';
        echo '<b> Imie i nazwisko </b>'.htmlspecialchars($formularz->exportValue('name')).'<br />';
        echo '<b> Hasło </b>'.htmlspecialchars($formularz->exportValue('password')).'<br />';
        echo '<b> Login </b>'.htmlspecialchars($formularz->exportValue('login')).'<br />';
        echo '<b> E-mail </b>'.htmlspecialchars($formularz->exportValue('mail')).'<br />';
        echo '<b> Wiek </b>'.htmlspecialchars($formularz->exportValue('age')).'<br />';
        echo '<b> Czy prenumerujesz : </b>'.htmlspecialchars($formularz->exportValue('prenumerata')).'<br />';
        echo '<b> Telefon </b>'.htmlspecialchars($formularz->exportValue('phone')).'<br />';
        exit;

    */
}

//$formularz->setDefaults($defaults);

$formularz->display();

?>

<script type="text/javascript">

function dis_area()
{
    if(document.getElementById('box') == true){
        document.getElementById('log').disabled = true;
    }
    else{
        document.getElementById('log').disabled = false;
    }
}

</script>

Formularz sie wyswietla ale niestety zastosowanie checkbox-a ("zaslanianie" elementu login) niestety nie dziala
Jakies pomysly gdzie moze byc blad ?
skowron-line
Cytat(Wolfie @ 19.12.2008, 12:55:00 ) *
Skowron Twoj sposob niestety wywala bład :

Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in C:\Program Files\WebServ\httpd\Formularz\formularz.php on line 10

linia 10-ta to ta :

Kod
if(document.getElementById('box') == true){

Bo czytać to też trzeba umić.
Zobacz w moim poście na tą linie.
Wolfie
Ok. Rozwiazalem problem

Uzylem javascriptu za znacznikami php

Blad byl w linijce

Kod
if(document.getElementById('box').checked == true){


Brakowalo slowa checked smile.gif

Dzieki za pomoc

Teraz wszystko dziala

Pozdrawiam

Mam jeszcze jedno pytanie bo nie wiem jak sobie z tym poradzic

Mianowicie zrobilem 2 elementy radio z czego jeden teoretycznie jest domyslnie zaznaczony, przynajmniej tak wyglada to na stronie

Skrypt ma dzialac w ten sposob ,ze gdy jeden radio button jest aktywny to zasloniete jest pole login a gdy drugi radio button jest aktywny to zasloniete jest pole mail

Problem polega na tym iz wlaczajac skrypt mimo ze jeden radio button jest zaznaczony oba pola mozna edytowac

kod wyglada nastepujaco :

Kod
<?

require_once 'HTML/QuickForm.php';

/*
$defaults = array('name' => 'Matt',
                  'age' => 25,
                  'phone' => 445);
                  */

$formularz = new HTML_QuickForm('formularz');

$formularz->setDefaults(
    array('login' => 'Mati')
    );

$attr = array('id'=>'radio',
              'onClick' => 'dis_area();');

$attr2 = array('id'=>'radio2',
               'onClick'=> 'dis_area();');



$formularz->addElement('header', null ,'Zgłoszenie nowego użytkownika');

//$formularz->addElement('checkbox', 'check1', null, 'checkMe', $attr);

$formularz->addElement('text', 'login', 'Login:', array('id'=>'log'));
$formularz->addElement('password', 'password', 'Hasło (5-10 znaków) ', array('size' => 12, 'maxlength' => 10));
$formularz->addElement('password', 'repeat', 'Hasło (powtórz)', array('size' => 12, 'maxlength' => 10));

$formularz->addElement('text', 'name', 'Imie i nazwisko', null);
$formularz->addElement('text', 'mail', 'Adres e-mail', array('id'=>'email'));
$formularz->addElement('text', 'age', 'Wiek', null);
$formularz->addElement('text', 'phone', 'Telefon', null);

//$radio[] = &HTML_QuickForm::CreateElement('radio', 'Firma', 'Firma');
//$radio[] = &HTML_QuickForm::CreateElement('radio', 'Os_priv', 'Osoba prywatna');
//$formularz->addGroup($radio, 'cos', null, '&nbsp;');
$formularz->addElement('radio', 'status', 'Firma', null, null, $attr);
$formularz->addElement('radio', 'status', 'Osoba prywatna', null, null, $attr2);

$formularz->addElement('select', 'prenumerata', 'Czy prenumerujesz <br /> magazyn INTERNET?:', array('Tak' => 'Tak', 'Nie' => 'nie'));
$formularz->addElement('submit', null, 'Wyslij');

//addRule($name, $msg, $option)
$formularz->addRule('login', 'Niepoprawny format pola login', 'regex', '/^[-_a-z0-9]+$/i');
$formularz->addRule('login', 'Wypełnij pole', 'required');
$formularz->addRule('password', 'Podaj haslo', 'required');
$formularz->addRule('password', 'Haslo musi miec 5-10 znakow', 'rangelength', array(5,10));
$formularz->addRule('repeat', 'Powtorz podane haslo', 'required');
$formularz->addRule(array('password','repeat'), 'Hasla musza byc takie same', 'compare');

$formularz->addRule('mail', 'Podaj adres e-mail', 'required', null, 'client');
$formularz->addRule('mail', 'Podaj poprawny adres e-mail', 'email');

$formularz->addRule('age', 'Podaj wiek', 'required', null, 'client');
$formularz->addRule('age', 'To nie moze byc Twoj wiek', 'numeric');

$formularz->addRule('name', 'Podaj imie i nazwisko', 'required', null, 'client');
$formularz->addRule('phone', 'To nie moze byc Twoj numer', 'numeric');

if($formularz->validate()){
    
    $formularz->freeze();
    /*
    echo '<h1> Formularz </h1>';
        echo '<b> Imie i nazwisko </b>'.htmlspecialchars($formularz->exportValue('name')).'<br />';
        echo '<b> Hasło </b>'.htmlspecialchars($formularz->exportValue('password')).'<br />';
        echo '<b> Login </b>'.htmlspecialchars($formularz->exportValue('login')).'<br />';
        echo '<b> E-mail </b>'.htmlspecialchars($formularz->exportValue('mail')).'<br />';
        echo '<b> Wiek </b>'.htmlspecialchars($formularz->exportValue('age')).'<br />';
        echo '<b> Czy prenumerujesz : </b>'.htmlspecialchars($formularz->exportValue('prenumerata')).'<br />';
        echo '<b> Telefon </b>'.htmlspecialchars($formularz->exportValue('phone')).'<br />';
        exit;

    */
}

//$formularz->setDefaults($defaults);

$formularz->display();

?>

<script type="text/javascript">

function dis_area()
{
    if(document.getElementById('radio').checked == true){
        document.getElementById('log').disabled = true;
        document.getElementById('email').disabled = false;
    }
    if(document.getElementById('radio2').checked == true){
        document.getElementById('log').disabled = false;
        document.getElementById('email').disabled = true;
    }
}

</script>


Jak mozna poradzic sobie z tym problemem ?

Pytanie okazalo sie troszke glupie winksmiley.jpg

Poprostu przed funkcja dis_area() dodalem jedna linijke kodu :

Kod
<script type="text/javascript">

document.getElementById('email').disabled = true;

function dis_area()
{
    if(document.getElementById('radio').checked == true){
        document.getElementById('log').disabled = true;
        document.getElementById('email').disabled = false;
    }
    if(document.getElementById('radio2').checked == true){
        document.getElementById('log').disabled = false;
        document.getElementById('email').disabled = true;
    }
}

</script>


Pozdro
skowron-line
google.pl -> javascript onLoad
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.