 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
danielsen
Data înscrierii: 14/Feb/2004
Mesaje: 100
Locație: Cluj-Napoca
|
| Trimis: Sâm Mai 03, 2008 9:20 am Titlul subiectului: functie pt formulare [rezolvat] |
|
|
Am incercat sa fac o functie pt a-mi genera campuri de formular. Arata cam asa:
Cod: // campuri formular
function formular($type, $label, $name, $value, $class) {
$eticheta = !empty($label) ? "\t<td class=\"label\">".$label."</td>\n" : "\t<td></td>\n";
$stil = !empty($class) ? ' class="'.$class.'"' : '';
$valoare = !empty($value) ? ' value="'.$value.'"' : '';
$input = "<input type=\"".$type."\" name=\"".$name."\"";
switch ($type) {
case 'text':
case 'password':
$afisare = "<tr>\n".$eticheta."\t<td class=\"input\">".$input.$valoare.$stil."></td>\n</tr>\n";
break;
case 'submit':
$afisare = "<tr>\n".$eticheta."\t<td>".$input.$valoare.$stil."></td>\n</tr>\n";
break;
case 'textarea':
$afisare = "<tr>\n".$eticheta."\t<td class=\"input\"><textarea name=\"".$name."\">".$value."</textarea></td>\n</tr>\n";
break;
}
return $afisare;
}
In context, sa zicem ca am un formular de login:
Cod: <form action="<?php echo SITE; ?>?p=admin&actiune=validare" method="POST">
<table class="form">
<?php
// type, label, name, value, class
echo formular('text', 'user', 'utilizator', '', '');
echo formular('password', 'password', 'parola', '', '');
echo formular('submit', '', 'autentificare', 'trimite', 'submit');
?>
</table>
</form>
M-ar interesa in switch-ul ala din primul exemplu sa adaug optiune si pt campuri radio (cate 2 cu Da | Nu intr-un rand <tr> de tabel) si campuri select, in care sa pot adauga cate <option> vreau.
Problema e ca nu prea am idee cum s-ar putea face asa incat in context sa pot scrie ceva de genul:
formular('radio', 'afisare', 'ceva', array('da', 'nu'), '');
Se poate asa ceva? Daca stie cineva cum se poate face, in asa fel incat sa-mi genereze toata treaba cu tot cu tag-urile de tabel intre <tr><td>....</td></tr> |
|
| Sus |
|
hpuiu
Data înscrierii: 05/Apr/2005
Mesaje: 10
Locație: Bucuresti
|
| Trimis: Sâm Mai 03, 2008 1:36 pm Titlul subiectului: |
|
|
Salut,
Pai avand in vedere ca atat select-urile cat si radio-urile pot avea mai multe perechi de label/valori, e clar ca trebuie sa folosesti array-uri.
O implementare pentru 'radio' ar putea fi :
Cod:
case 'radio':
// verificam daca $value este array si are cel putin un element, altfel nu putem afisa un radio input
if (is_array($value) && count($value)){
// initializam afisarea cu tag-urile tr si td + eticheta si un rand nou
$afisare="<tr><td>$eticheta<br>";
// luam fiecare pereche key/value din array, key-ul va fi valoarea, iar value va fi textul de afisat
foreach ($value as $valoare=>$text){
// creem tag-ul input, pentru radio, toate input-urile au acelasi nume
$afisare.="<input type='radio' name='$nume' $stil value='$valoare' /> ";
// adaugam eticheta si trecem la rand nou - afisam optiunile una sub alta
$afisare.=" $text<br>";
}
// inchidem tag-urile td si tr
$afisare.='</td></tr>';
}
break;
Pentru codul de mai sus putem folosi urmatorul cod pentru a genera doua campuri radio pentru alegerea sexului:
Cod:
echo formular('radio', 'sexfield', 'alege sexul', array('F'=>'Femeie','B'=>'Barbat'), '');
Acelasi cod un pic modificat il folosim si pentru generarea de SELECT-uri :
Cod:
case 'select':
// verificam daca $value este array si are cel putin un element, altfel nu are rost sa afisam un SELECT gol
if (is_array($value) && count($value)){
// initializam afisarea cu tag-urile tr si td + eticheta si un rand nou
$afisare="<tr><td>$eticheta<br>";
// cream tag-ul select
$afisare.="<select name='$name' $style>";
// luam fiecare pereche key/value din array, key-ul va fi valoarea, iar value va fi textul de afisat
foreach ($value as $valoare=>$text){
// creem tag-ul OPTION pentru fiecare pereche de valori/text din array
$afisare.="<option value='$valoare' >$text</option> ";
}
// inchidem tag-ul SELECT
$afisare.='</select>';
// inchidem tag-urile td si tr
$afisare.='</td></tr>';
}
break;
Pentru codul de mai sus putem folosi urmatorul cod pentru a genera un camp select cu doua valori pentru alegerea sexului:
Cod:
echo formular('select', 'sexfield', 'alege sexul', array('F'=>'Femeie','B'=>'Barbat'), '');
Codul poate fi destul de mult optimizat (valori preselectate, etc), oricum sper ca te va ajuta sa continui lucrul :)
PuYa |
|
| Sus |
|
danielsen
Data înscrierii: 14/Feb/2004
Mesaje: 100
Locație: Cluj-Napoca
|
| Trimis: Sâm Mai 03, 2008 4:24 pm Titlul subiectului: |
|
|
Mersi mult, f fain rezolvata problema. Mi-am adaptat codul la ce am avut nevoie si merge, insa am uitat un aspect. Formularul pe care-l fac e integrat intr-o sectiune de administrare la un site, si sunt niste optiuni asa-zis globale in formular la care admin-ul sa poata reveni oricand sa le schimbe. De exemplu, in html-ul generat, am 2 campuri cum ar fi:
Cod: <tr>
<td class="label">afișează data</td>
<td class="input">
<input type="radio" name="data" value="1" class="radio"> da
<input type="radio" name="data" value="0" class="radio"> nu</td>
</tr>
<tr>
<td class="label">format dată</td>
<td class="input">
<select name="format">
<option value="0">4 septembrie 2008</option>
<option value="1">4/01/2008</option>
<option value="2">4-01-2008</option>
<option value="3">septembrie 4, 2008</option>
</select>
</td>
</tr>
N-ar fi nici o problema daca ar fi un formular de contact, dar fiind formular cu optiuni, valorile selectate trebuie sa fie retinute, sau preselectate (vorba ta), asa incat daca omul revine la formular si vrea sa schimbe, sa vada ce a setat ultima data.
Codul tau, adaptat la ce am avut nevoie arata asa:
Cod: case 'radio':
// verifica daca $value este array si are cel putin un element
if (is_array($value) && count($value)) {
$afisare = "<tr>\n".$eticheta."\t<td class=\"input\">";
// ia fiecare pereche value din array
foreach ($value as $valoare => $text) {
$afisare.= "\n\t<input type=\"radio\" name=\"".$name."\" value=\"".$valoare."\" class=\"radio\"> ".$text;
}
$afisare.= "</td>\n</tr>\n";
} // sfarsit IF
break;
O intrebare suplimentara, in materie de sintaxa, de ce se pune .= si ce inseamna?
Am nevoie ca <input type="radio" name="data" value="0" class="radio" checked> sa ramana checked daca, sa zicem, valoarea campului data == $value din baza de date.
Ceva de genul $i = $row['data']; if ($i == '0') { echo ' checked'; }
Am incercat cum am stiut si nu mi-a iesit, m-am gandit ca poate ar mai trebui adaugat un parametru la functia asta:
function formular($type, $label, $name, $value, $class) {
...
}
daca mai adaug si al 6-lea, pentru $row, sa pot face chestia asta, dar am deja mai multe formulare facute si ma gandeam ca poate este alta solutie. La urma urmei $name = 'data' si $row['data'], nu s-ar putea face ceva cu astea 2?
La un camp de tip text n-am probleme:
echo formular('text', 'nume', 'nume', $rand['nume'], '');
dar la camp radio este deja array.
Daca ai chef sa-mi dai o idee ori sa modifici codul, ti-as fi recunoscator. Mersi inca odata. |
|
| Sus |
|
hpuiu
Data înscrierii: 05/Apr/2005
Mesaje: 10
Locație: Bucuresti
|
| Trimis: Sâm Mai 03, 2008 5:08 pm Titlul subiectului: |
|
|
1.
Cod:
$variabila.="text";
codul asta adauga la continutul variabilei $variabila sirul de caractere "text".
Daca de exemplu inainte aveam in variabila string-ul "afiseaza un ", dupa linia de mai sus o sa am in variabila "afiseaza un text". Operatorul "." se numeste operator de concatenare si uneste unul sau mai multe stringuri.
Daca scriem
Cod:
echo "unu"."doi"."trei";
PHP-ul o sa afiseze "unudoitrei";
forma $variabila.="ceva" este prescurtarea de la $variabila=$variabila."ceva"
Sper ca am fost destul de explicit :)
2. Referitor la problema cu valoarea preselectata, ma asteptam la intrebarea asta :) si intr-adevar nu se poate rezolva fara un parametru suplimentar (e adevarat ca se poate folosi la o functie un singur parametru de tip array/object care sa contina toti parametrii necesari, dar deja vorbim de alte cunostinte/stil de programare).
Cel mai simplu pentru tine ar fi sa adaugi inca un parametru optional la functie.
Un parametru optional nu trebuie scris obligatoriu la apelul unei functii si are o valoare predefinite ("default"). In acest fel, codul deja scris care cheama aceasta functi nu va trebui modificat ci doar codul care genereaza campuri de tipul "select"/"radio" vor trebui sa-l completeze.
Prototipul functiei va deveni astfel :
Cod:
function formular($type, $label, $name, $value, $class,$selectedValue=null) {
...
}
Parametrul $selectedValue este declarat ca optional, iar valoarea sa predefinita ( default in cazul in care parametrul nu este dat la apelul functiei) este null.
Astfel vom putea apela functia ca si pana acum pentru campurile text, textarea, etc, iar pentru select/radio vom putea folosi de ex :
Cod:
echo formular('select', 'sexfield', 'alege sexul', array('F'=>'Femeie','B'=>'Barbat'), '','B');
Codul de mai sus va genera select-ul cu optiunea "Barbat" selectata.
Binenteles, mai trebuie scris codul care sa adauge atributul checked/selected pentru valoarea ce trebuie selectata:
Cod:
case 'radio':
// verificam daca $value este array si are cel putin un element, altfel nu putem afisa un radio input
if (is_array($value) && count($value)){
// initializam afisarea cu tag-urile tr si td + eticheta si un rand nou
$afisare="<tr><td>$eticheta<br>";
// luam fiecare pereche key/value din array, key-ul va fi valoarea, iar value va fi textul de afisat
foreach ($value as $valoare=>$text){
// -------- inceput cod adaugat/modificat
// setam atributul checked, daca optiunea curenta ar trebui sa fie cea selectata, comparam folosind === pentru a compara si tipurile variabilelor (vezi manualul PHP pentru operatorul === )
$checked=($selectedValue===$valoare?" checked='checked'":"");
// creem tag-ul input, pentru radio, toate input-urile au acelasi nume
$afisare.="<input type='radio' name='$nume' $stil value='$valoare' $checked /> ";
// -------- sfarsti cod adaugat/modificat
// adaugam eticheta si trecem la rand nou - afisam optiunile una sub alta
$afisare.=" $text<br>";
}
// inchidem tag-urile td si tr
$afisare.='</td></tr>';
}
break;
La fel facem si pentru select :
Cod:
case 'select':
// verificam daca $value este array si are cel putin un element, altfel nu are rost sa afisam un SELECT gol
if (is_array($value) && count($value)){
// initializam afisarea cu tag-urile tr si td + eticheta si un rand nou
$afisare="<tr><td>$eticheta<br>";
// cream tag-ul select
$afisare.="<select name='$name' $style>";
// luam fiecare pereche key/value din array, key-ul va fi valoarea, iar value va fi textul de afisat
foreach ($value as $valoare=>$text){
// -------- inceput cod adaugat/modificat
// setam atributul checked, daca optiunea curenta ar trebui sa fie cea selectata, comparam folosind === pentru a compara si tipurile variabilelor (vezi manualul PHP pentru operatorul === )
$selected=($selectedValue===$valoare?' selected="selected"':'');
// creem tag-ul OPTION pentru fiecare pereche de valori/text din array
$afisare.="<option value='$valoare' $selected>$text</option> ";
// -------- sfarsti cod adaugat/modificat
}
// inchidem tag-ul SELECT
$afisare.='</select>';
// inchidem tag-urile td si tr
$afisare.='</td></tr>';
}
break;
In cod am folosit conditia inline, poate ar trebui sa ti-o explic putin si pe asta :) :
Cod:
$variabila=( CONDITIE ? VALOARE_1 : VALOARE_2 );
Aceasta linie de cod evalueaza conditia CONDITIE, daca este adevarata, atribuie variabilei $variabila valoarea VALOARE_1, atlfel (conditie falsa), atribuie valoarea VALOARE_2. O versiune mai lunga a liniei ar fi :
Cod:
if (CONDITIE){
$variabila=VALOARE_1;
} else {
$variabila=VALOARE_2;
}
Am folosit "checked='checked'" si "selected='selected'" in loc de doar "checked" si "selected" pentru ca versiunea scurta nu este recunoscuta ca standard HTML (orice atribut trebuie sa aibe o valoare), dar deja o dam in chestii mai filozofice :)
3. Ar trebui sa citesti un pic despre standardul HTML, in codul tau folosesti afisarea etichetei intre tag-urile <tr> si <td>, ex:
Cod:
<tr>
Alege ceva:
<td>
...............................
</td>
</tr>
in HTML nu ai voie sa bagi ceva intre aceste doua tag-uri, se poate sa-ti afiseze ok in unele browsere, nu in toate (decat daca ai noroc, nu am incercat), dar nefiind ceva standard, s-ar putea ca la o versiune noua de browser sa ai surprize ... |
|
| Sus |
|
danielsen
Data înscrierii: 14/Feb/2004
Mesaje: 100
Locație: Cluj-Napoca
|
| Trimis: Sâm Mai 03, 2008 10:12 pm Titlul subiectului: |
|
|
In primu rand mersi pentru ajutorul mura-n gura care mi l-ai dat :D Te poti face profesor, daca nu esti deja. Mi-au prins bine explicatiile, desi stiam de concatenare (chiar daca nu cu .=) si de conditia inline pe care am folosit-o in functie daca te-ai uitat. Nu stiu unde ai vazut text intre tag-urile <tr> si <td> dar nu stiu sa fi scris asa ceva, in nici un caz constient.
In al doilea rand, mersi, si vreau sa-ti arat cum am facut pt ca nu-mi merge partea cu campurile preselectate. Daca poti vedea unde am gresit...
Functia arata asa:
Cod: function formular($type, $label, $name, $value, $class, $selectedVal=null ) {
$eticheta = !empty($label) ? "\t<td class=\"label\">".$label."</td>\n" : "\t<td></td>\n";
$stil = !empty($class) ? ' class="'.$class.'"' : '';
$valoare = !empty($value) ? ' value="'.$value.'"' : '';
$input = "<input type=\"".$type."\" name=\"".$name."\"";
switch ($type) {
case 'text':
case 'password':
$afisare = "<tr>\n".$eticheta."\t<td class=\"input\">".$input.$valoare.$stil."></td>\n</tr>\n";
break;
case 'submit':
$afisare = "<tr>\n".$eticheta."\t<td>".$input.$valoare.$stil."></td>\n</tr>\n";
break;
case 'textarea':
$afisare = "<tr>\n".$eticheta."\t<td class=\"input\"><textarea name=\"".$name."\">".$value."</textarea></td>\n</tr>\n";
break;
case 'radio':
// verifica daca $value este array si are cel putin un element
if (is_array($value) && count($value)) {
$afisare = "<tr>\n".$eticheta."\t<td class=\"input\">";
// ia fiecare pereche value din array
foreach ($value as $valoare => $text) {
$checked = ($selectedVal===$value ? ' checked="checked"' : '');
$afisare.= "\n\t<input type=\"radio\" name=\"".$name."\" value=\"".$valoare."\" class=\"radio\"".$checked." />".$text;
}
$afisare.= "</td>\n</tr>\n";
} // sfarsit IF
break;
case 'select':
// verifica daca $value este array si are cel putin un element
if (is_array($value) && count($value)) {
$afisare = "<tr>\n".$eticheta."\t<td class=\"input\">\n";
$afisare.= "\t<select name=\"".$name."\">";
// ia fiecare pereche value din array
foreach ($value as $valoare => $text) {
$selectat = ($selectedVal===$value ? ' selected="selected"' : '');
$afisare.= "\n\t\t<option value=\"".$valoare."\"".$selectat.">".$text."</option>";
}
$afisare.= "\n\t</select>\n\t</td>\n</tr>\n";
} // sfarsit IF
break;
}
return $afisare;
}
De afisat, afiseaza tot ce trebuie, numai nu baga selected si checked unde trebuie.
In context am facut asa:
Cod: if (is_numeric($_GET['id'])) {
$interogare = "SELECT * FROM `optiuni` WHERE id={$_GET['id']}";
if ($rezultat = mysql_query ($interogare)) {
$rand = mysql_fetch_array ($rezultat);
?>
<form action="<?php echo SITE; ?>?p=administrare&actiune=optiuni" method="POST">
<table class="form">
<?php
// type, label, name, value, class
echo formular('text', text(21), 'nume', $rand['nume'], '');
echo formular('text', text(22), 'slogan', $rand['slogan'], '');
echo formular('text', text(29), 'email', $rand['email'], '');
echo formular('radio', text(23), 'autor', array('1' => text(37), '0' => text(38)), 'radio', $rand['autor'] );
echo formular('radio', text(25), 'inapoi', array('1' => text(37), '0' => text(38)), 'radio', $rand['inapoi'] );
echo formular('radio', text(24), 'data', array('1' => text(37), '0' => text(38)), 'radio', $rand['data'] );
echo formular('select', text(60), 'format', array('4 '.text(49).' '.date('Y'), '4/01/'.date('Y'), '4-01-'.date('Y'), text(49).' 4, '.date('Y')), '', $rand['format'] );
echo formular('select', text(30), 'limba', array('ro' => text(31)), '', $rand['limba'] );
echo formular('textarea', text(27), 'descriere', $rand['descriere'], '');
echo formular('textarea', text(26), 'cuvinte', $rand['cuvinte'], '');
echo formular('textarea', text(28), 'google', $rand['google'], '');
echo formular('submit', '', 'actualizare', text(36), 'submit');
?>
<tr>
<td colspan="2"><input type="hidden" name="id" value="<?php echo $_GET['id']; ?>"></td>
</tr>
</table>
</form>
<?php
} else {
echo '<div class="msg">'.text(34).'</div>';
}
} else {
echo '<div class="msg">'.text(35).'</div>';
}
}
mysql_close();
Functia e in includes/functions.php si formularul afisat in admin/admin.php iar incluziunea lui config.php (datele pt db) e chiar in index.php ... daca conteaza locatia lor... |
|
| Sus |
|
hpuiu
Data înscrierii: 05/Apr/2005
Mesaje: 10
Locație: Bucuresti
|
| Trimis: Sâm Mai 03, 2008 11:45 pm Titlul subiectului: |
|
|
1. Ori ai copiat tu gresit, ori am scris eu gresit :
Cod:
$checked = ($selectedVal===$value ? ' checked="checked"' : '');
trebuie inlocuit cu:
Cod:
$checked = ($selectedVal===$valoare ? ' checked="checked"' : '');
$value - array cu perechile de text/valoare
$valoare - valoarea curenta
deci nu are nici un sens sa compari valoarea ce doresti sa fie slectata cu array-ul ci cu valoarea curenta (pentru care se creaza input-ul),
La fel si la select ....
2. Urmatorul cod va general problema aia cu >tr><td> :
Cod:
$afisare ="<tr>\n".$eticheta."\t<td>".$input.$valoare.$stil."></td>\n</tr>\n";
dupa cum vezi $eticheta e pus intre <tr> si <td> ;)
Spor ... :) |
|
| Sus |
|
danielsen
Data înscrierii: 14/Feb/2004
Mesaje: 100
Locație: Cluj-Napoca
|
| Trimis: Dum Mai 04, 2008 7:49 am Titlul subiectului: |
|
|
Problema e ca daca pun $valoare, adica:
$checked = ($selectedVal===$valoare ? ' checked="checked"' : '');
mai sus, pe la linia 4 a functiei:
$valoare = !empty($value) ? ' value="'.$value.'"' : '';
si atunci va iesi ceva de genul: value=" value="Array" "... si de asta am evitat, ei bine, oricum am schimbat variabila si am pus
Cod: foreach ($value as $val => $text) {
$checked = ($selectedVal===$val ? ' checked="checked"' : '');
$afisare.= "\n\t<input type=\"radio\" name=\"".$name."\" value=\"".$val."\" class=\"radio\"".$checked." />".$text;
}
cu $val
de afisat, imi afiseaza tot ce trebuie, doar ca nu preselectat.
Am observat la un alt <select> cu un singur element <option> tot in acelasi formular, ca-mi afiseaza selected="selected" cum trebuie, dar restul radio/select, unde am cel putin 2 elemente, nu-mi mai afiseaza preselectat. Imi scapa ceva?
A, si cu $eticheta dintre <tr> si <td>, vezi la a 2-a linie a functiei:
Cod: $eticheta = !empty($label) ? "\t<td class=\"label\">".$label."</td>\n" : "\t<td></td>\n";
asa ca output-ul va fi:
Cod: <tr>
<td class="label">nume website</td>
<td class="input"><input type="text" name="nume" value="Brand Magazine "></td>
</tr>
cu <td class="label">nume website</td> intre <tr> si <td>.
Nu de afisare ii problema. Problema e ca din array-ul ala, nu recunoaste ce trebuie.
M-am gandit la un moment dat sa bag html unde-s campuri radio si select, dar pe parcurs vor veni multe formulare in site si va fi mult de lucru. Nu-i nici estetic sa bag format(...) si mai jos cod html si pe urma iar... ca nu se mai stie ce iese. |
|
| Sus |
|
hpuiu
Data înscrierii: 05/Apr/2005
Mesaje: 10
Locație: Bucuresti
|
| Trimis: Dum Mai 04, 2008 10:34 am Titlul subiectului: |
|
|
Uite cum facem, ca sa-mi pot da seama exact de problema :
1. apeleaza functia ca sa creeze de exemplu un select si posteaza codul exact aici;
2. fa un var_dump in functie pe fiecare parametru si posteaza aici;
3. posteaza rezultatul exact returnat de functie;
4. posteaza rezultatul asteptat de la functie (ce ai vrea sa returneze);
5. posteaza codul complet al functiei.
Dupa asta o sa vedem sigur unde e problema :) |
|
| Sus |
|
danielsen
Data înscrierii: 14/Feb/2004
Mesaje: 100
Locație: Cluj-Napoca
|
| Trimis: Dum Mai 04, 2008 11:40 am Titlul subiectului: |
|
|
1. functia apelata (dau si comentariu cu parametri) pt <select> cu un singur element:
Cod: // type, label, name, value, class, selectedVal
echo formular('select', text(30), 'limba', array('ro' => text(31)), '', $rand['limba'] );
// text(31) = romana
avand un singur element <option> va returna asa cum vreau, cu selected, pt ca asa e si in baza de date, dar asta pt ca nu ai ce altceva sa alegi:
Cod: <tr>
<td class="label">limba</td>
<td class="input">
<select name="limba">
<option value="ro" selected="selected">română</option>
</select>
</td>
</tr>
cu var_dump am facut ceva de genul:
Cod: $a = array($type, $label, $name, $value, $class, $selectedVal);
var_dump($a);
array(6) {
[0]=>
string(6) "select"
[1]=>
string(5) "limba"
[2]=>
string(5) "limba"
[3]=>
array(1) {
["ro"]=>
string(16) "română"
}
[4]=>
string(0) ""
[5]=>
string(2) "ro"
}
2. functia apelata pt <select> cu 4 elemente:
Cod: // type, label, name, value, class, selectedVal
echo formular('select', text(60), 'format', array('4 '.text(49).' '.date('Y'), '4/01/'.date('Y'), '4-01-'.date('Y'), text(49).' 4, '.date('Y')), '', $rand['format'] );
/*
text(49) = septembrie
$rand considera-l $row
oare daca pun array('0' => '4 '.text(49).' '.date('Y'), ... merge?
nu de alta dar la campurile radio asa e, si totusi nu ramane selectat
*/
output (nu ramane nimic selected, desi ar trebui sa fie elementul cu value="2" asa cum e si in db):
Cod: <tr>
<td class="label">format dată</td>
<td class="input">
<select name="format">
<option value="0">4 septembrie 2008</option>
<option value="1">4/01/2008</option>
<option value="2">4-01-2008</option>
<option value="3">septembrie 4, 2008</option>
</select>
</td>
</tr>
var_dump() :
Cod: array(6) {
[0]=>
string(6) "select"
[1]=>
string(16) "format dată"
[2]=>
string(6) "format"
[3]=>
array(4) {
[0]=>
string(17) "4 septembrie 2008"
[1]=>
string(9) "4/01/2008"
[2]=>
string(9) "4-01-2008"
[3]=>
string(18) "septembrie 4, 2008"
}
[4]=>
string(0) ""
[5]=>
string(1) "2"
}
3. si acuma toata functia asa cum o am facuta:
Cod: function formular($type, $label, $name, $value, $class, $selectedVal=null ) {
$eticheta = !empty($label) ? "\t<td class=\"label\">".$label."</td>\n" : "\t<td></td>\n";
$stil = !empty($class) ? ' class="'.$class.'"' : '';
$valoare = !empty($value) ? ' value="'.$value.'"' : '';
$input = "<input type=\"".$type."\" name=\"".$name."\"";
switch ($type) {
case 'text':
case 'password':
$afisare = "<tr>\n".$eticheta."\t<td class=\"input\">".$input.$valoare.$stil."></td>\n</tr>\n";
break;
case 'submit':
$afisare = "<tr>\n".$eticheta."\t<td>".$input.$valoare.$stil."></td>\n</tr>\n";
break;
case 'textarea':
$afisare = "<tr>\n".$eticheta."\t<td class=\"input\"><textarea name=\"".$name."\">".$value."</textarea></td>\n</tr>\n";
break;
case 'radio':
// verifica daca $value este array si are cel putin un element
if (is_array($value) && count($value)) {
$afisare = "<tr>\n".$eticheta."\t<td class=\"input\">";
// ia fiecare pereche value din array
foreach ($value as $val => $text) {
$checked = ($selectedVal===$val ? ' checked="checked"' : '');
$afisare.= "\n\t<input type=\"radio\" name=\"".$name."\" value=\"".$val."\" class=\"radio\"".$checked." />".$text;
// $a = array($type, $label, $name, $value, $class, $selectedVal);
// var_dump($a);
}
$afisare.= "</td>\n</tr>\n";
} // sfarsit IF
break;
case 'select':
// verifica daca $value este array si are cel putin un element
if (is_array($value) && count($value)) {
$afisare = "<tr>\n".$eticheta."\t<td class=\"input\">\n";
$afisare.= "\t<select name=\"".$name."\">";
// ia fiecare pereche value din array
foreach ($value as $val => $text) {
$selectat = ($selectedVal===$val ? ' selected="selected"' : '');
$afisare.= "\n\t\t<option value=\"".$val."\"".$selectat.">".$text."</option>";
}
// $a = array($type, $label, $name, $value, $class, $selectedVal);
// var_dump($a);
$afisare.= "\n\t</select>\n\t</td>\n</tr>\n";
} // sfarsit IF
break;
}
return $afisare;
} |
|
| Sus |
|
hpuiu
Data înscrierii: 05/Apr/2005
Mesaje: 10
Locație: Bucuresti
|
| Trimis: Dum Mai 04, 2008 12:59 pm Titlul subiectului: |
|
|
Ce imi sare mie in ochi acum este ca key-urile array-ului sunt
valori integer ( (int)0, (int)1, etc ), iar $row[...] contine valori de tip string, iar operatorul === verifica si daca tipurile sunt identice si (int)0 != "0"
Pentru verificare inlocuieste === cu == si vezi ce iese.
Tine-ma la curent, revin pe diseara, ma odihnesc dupa un drum lung cu trenul :) |
|
| Sus |
|
danielsen
Data înscrierii: 14/Feb/2004
Mesaje: 100
Locație: Cluj-Napoca
|
| Trimis: Dum Mai 04, 2008 2:15 pm Titlul subiectului: |
|
|
| Meserie!!! Nu mi-o dat prin cap ca putea fi asta problema. Ma gandeam la un moment dat, inainte sa-mi zici chestia asta, sa schimb cu litere in loc de valori integer, sa pun 'da', 'nu', si 'a1', 'a2'... dar ideea ta m-o salvat. Numa ce-am schimbat operatorul si merge! Nu mai trebuie schimbate valorile. Mersi! Se vede ca esti profesionist :) |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |
|