Hoe doe ik dit met gebruik van case?
Ik heb een paar functies geschreven om makkelijk een dynamisch formulier te genereren, aan de hand van gegevens die door klanten met een reeds geschreven editor in de database worden gezet. Zij kunnen dus hun eigen inschrijf of aanmeld formulier samenstellen. (het gaat om een website waar klanten online een congressite kunnen maken met daarbij de optie een formulier samen te stellen. Dit zijn de functies.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
function textveld($name, $value=NULL, $omschrijving) {
$html = '<tr><td>' . $omschrijving . ': </td><td><input type="text" name="' . $name . '" value="' . $value . '" /></td></tr>';
return $html;
}
function radio($name, $options ,$omschrijving) {
$options_x = explode('>><<', $options);
$html = '<tr><td>' . $omschrijving . ':</td>';
$aantal = 1;
foreach( $options_x as $option => $value ) {
if ($aantal == 1) {
$html .= '<td><input type="radio" name="' . $name . '" value="' . $value . '" />' . $value . '</td></tr>';
$aantal = 2;
} else {
$html .= '<tr><td></td><td><input type="radio" name="' . $name . '" value="' . $value . '" />' . $value . '</td></tr>';
}
}
return $html;
}
function checkbox($name, $options ,$omschrijving) {
$options_x = explode('>><<', $options);
$aantal = 1;
$html = '<tr><td>' . $omschrijving . ':</td>';
foreach( $options_x as $option => $value ) {
if ($aantal == 1) {
$html .= '<td><input type="checkbox" name="' . $value . '" value="' . $value . '" />' . $value . '</td></tr>';
$aantal = 2;
} else {
$html .= '<tr><td></td><td><input type="checkbox" name="' . $value . '" value="' . $value . '" />' . $value . '</td?</tr>';
}
}
return $html;
}
function textarea($name, $value=NULL, $omschrijving) {
$html = '<tr><td>' . $omschrijving . ': </td><td><textarea name="' . $name . '" value="" cols="20" rows="5" />' . $value . '</textarea></td></tr>';
return $html;
}
function select($name, $options ,$omschrijving) {
$options_x = explode('>><<', $options);
$html = '<tr><td>' . $omschrijving . ': </td><td><select name="' . $name . '">';
foreach( $options_x as $option => $value ) {
$html .= '<option value="' . $value . '" />' . $value . '<br />';
}
$html .= '</td></tr></select>';
return $html;
}
?>
function textveld($name, $value=NULL, $omschrijving) {
$html = '<tr><td>' . $omschrijving . ': </td><td><input type="text" name="' . $name . '" value="' . $value . '" /></td></tr>';
return $html;
}
function radio($name, $options ,$omschrijving) {
$options_x = explode('>><<', $options);
$html = '<tr><td>' . $omschrijving . ':</td>';
$aantal = 1;
foreach( $options_x as $option => $value ) {
if ($aantal == 1) {
$html .= '<td><input type="radio" name="' . $name . '" value="' . $value . '" />' . $value . '</td></tr>';
$aantal = 2;
} else {
$html .= '<tr><td></td><td><input type="radio" name="' . $name . '" value="' . $value . '" />' . $value . '</td></tr>';
}
}
return $html;
}
function checkbox($name, $options ,$omschrijving) {
$options_x = explode('>><<', $options);
$aantal = 1;
$html = '<tr><td>' . $omschrijving . ':</td>';
foreach( $options_x as $option => $value ) {
if ($aantal == 1) {
$html .= '<td><input type="checkbox" name="' . $value . '" value="' . $value . '" />' . $value . '</td></tr>';
$aantal = 2;
} else {
$html .= '<tr><td></td><td><input type="checkbox" name="' . $value . '" value="' . $value . '" />' . $value . '</td?</tr>';
}
}
return $html;
}
function textarea($name, $value=NULL, $omschrijving) {
$html = '<tr><td>' . $omschrijving . ': </td><td><textarea name="' . $name . '" value="" cols="20" rows="5" />' . $value . '</textarea></td></tr>';
return $html;
}
function select($name, $options ,$omschrijving) {
$options_x = explode('>><<', $options);
$html = '<tr><td>' . $omschrijving . ': </td><td><select name="' . $name . '">';
foreach( $options_x as $option => $value ) {
$html .= '<option value="' . $value . '" />' . $value . '<br />';
}
$html .= '</td></tr></select>';
return $html;
}
?>
Hier volgt de code die nagaat welk type veld er opgevraagd wordt en welke HTML code er dus gegenereerd moet worden. (De stap naar XHTML is gemaakt! :) ).
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$query = "SELECT * FROM formulier WHERE congres_id = 75"; // 75 is even als voorbeeld genomen
$result_set = mysql_query($query);
while ($result = mysql_fetch_object($result_set)) {
if ($result->type == 'radio') {
echo radio($result->name, $result->options, $result->omschrijving);
}
if ($result->type == 'text') {
echo textveld($result->name, $result->value, $result->omschrijving);
}
if ($result->type == 'textarea') {
echo textarea($result->name, $result->value, $result->omschrijving);
}
if ($result->type == 'select') {
echo select($result->name, $result->options, $result->omschrijving);
}
if ($result->type == 'checkbox') {
echo checkbox($result->name, $result->options, $result->omschrijving);
}
}
?>
$query = "SELECT * FROM formulier WHERE congres_id = 75"; // 75 is even als voorbeeld genomen
$result_set = mysql_query($query);
while ($result = mysql_fetch_object($result_set)) {
if ($result->type == 'radio') {
echo radio($result->name, $result->options, $result->omschrijving);
}
if ($result->type == 'text') {
echo textveld($result->name, $result->value, $result->omschrijving);
}
if ($result->type == 'textarea') {
echo textarea($result->name, $result->value, $result->omschrijving);
}
if ($result->type == 'select') {
echo select($result->name, $result->options, $result->omschrijving);
}
if ($result->type == 'checkbox') {
echo checkbox($result->name, $result->options, $result->omschrijving);
}
}
?>
Nu is mijn vraag, hoe kan ik deze laatste code beter/sneller maken met behulp van CASE?! (Ik heb iig begrepen dat het gebruik van CASE beter is in dit geval.)
Alvast bedankt!
Gewijzigd op 01/01/1970 01:00:00 door Bas Matthee
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$query = "SELECT * FROM formulier WHERE congres_id = 75"; // 75 is even als voorbeeld genomen
$result_set = mysql_query($query);
while ($result = mysql_fetch_object($result_set)) {
switch($result->type) {
case 'radio':
echo radio($result->name, $result->options, $result->omschrijving);
break;
case 'text':
echo textveld($result->name, $result->value, $result->omschrijving);
break;
case 'textarea':
echo textarea($result->name, $result->value, $result->omschrijving);
break;
case 'select':
echo select($result->name, $result->options, $result->omschrijving);
break;
case 'checkbox':
echo checkbox($result->name, $result->options, $result->omschrijving);
break;
}
}
?>
$query = "SELECT * FROM formulier WHERE congres_id = 75"; // 75 is even als voorbeeld genomen
$result_set = mysql_query($query);
while ($result = mysql_fetch_object($result_set)) {
switch($result->type) {
case 'radio':
echo radio($result->name, $result->options, $result->omschrijving);
break;
case 'text':
echo textveld($result->name, $result->value, $result->omschrijving);
break;
case 'textarea':
echo textarea($result->name, $result->value, $result->omschrijving);
break;
case 'select':
echo select($result->name, $result->options, $result->omschrijving);
break;
case 'checkbox':
echo checkbox($result->name, $result->options, $result->omschrijving);
break;
}
}
?>
Zo dus?
Maar dat hoef je niet eens te vragen of het zo goed is, is gewoon kwestie van nu testen of het werkt.
Werkt het? Dan is het goed.
Werkt het niet? Dan doorvragen.
;)
Alvast bedankt, dit gaat een mooi plekje krijgen in mijn PHP talenknobbel :)
PS: Oops, ik las net iets over bumpen. Heb in andere topuic al 3 of 4 posts geplant. Bij deze mijn excuses. Was hiervan niet op de hoogte! Zal me wel eventjes kalm houden. :(
GEGROET ALLEN!
Oh zo, vandaar, maar sowieso, als je veel met PHP bezig bent enz, is het vaak altijd wel handig om een local webserver te installeren.
Ik weet, ik heb wamp ook wel draaien, ik heb zelfs een webserver 24 uur per dag runnen hier. Maar een database aanmaken voor het testen van dit scriptje ging me te ver. Ik merk het morgen wel als ik weer op m'n stage ben.
[/sorry voor het bumpen]
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
switch($result->type) {
case 'radio':
echo radio($result->name, $result->options, $result->omschrijving);
break;
case 'text':
echo textveld($result->name, $result->value, $result->omschrijving);
break;
case 'textarea':
echo textarea($result->name, $result->value, $result->omschrijving);
break;
case 'select':
echo select($result->name, $result->options, $result->omschrijving);
break;
case 'checkbox':
echo checkbox($result->name, $result->options, $result->omschrijving);
break;
default :
//doe wat als er een waarde is ingevoerd dat niet gevonden is (netzoals de else dus van een if / else constructie)
break;
}
?>
switch($result->type) {
case 'radio':
echo radio($result->name, $result->options, $result->omschrijving);
break;
case 'text':
echo textveld($result->name, $result->value, $result->omschrijving);
break;
case 'textarea':
echo textarea($result->name, $result->value, $result->omschrijving);
break;
case 'select':
echo select($result->name, $result->options, $result->omschrijving);
break;
case 'checkbox':
echo checkbox($result->name, $result->options, $result->omschrijving);
break;
default :
//doe wat als er een waarde is ingevoerd dat niet gevonden is (netzoals de else dus van een if / else constructie)
break;
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Terence Hersbach
Aha! default dus. Vroeg me stiekem al af hoe dat nou zou gaan.. Super. Ik ben ontzettend geholpen! Kon dit niet terugvinden op PHP.net (zal aan mij liggen!)
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
if(function_exists($result->type)) {
call_user_func($result->type, $result->name, $result->options, $result->omschrijving);
} else {
echo 'functie niet gevonden: '.$result->type;
}
?>
if(function_exists($result->type)) {
call_user_func($result->type, $result->name, $result->options, $result->omschrijving);
} else {
echo 'functie niet gevonden: '.$result->type;
}
?>
Patrick Niezen schreef op 25.03.2008 09:53:
Dus als je een case in een case hebt, hoef je dus maar 1 keer break; te doen om deze beide af te sluiten (of brgrijp ik het verkeerd?)
Terence schreef op 25.03.2008 09:58:
jouw dingetje kan een stuk sneller trouwens:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
if(function_exists($result->type)) {
call_user_func($result->type, $result->name, $result->options, $result->omschrijving);
} else {
echo 'functie niet gevonden: '.$result->type;
}
?>
if(function_exists($result->type)) {
call_user_func($result->type, $result->name, $result->options, $result->omschrijving);
} else {
echo 'functie niet gevonden: '.$result->type;
}
?>
Maar $result->type is geen functie! maar een object uit een SELECT result.
Gewijzigd op 01/01/1970 01:00:00 door Bas Matthee
Code (php)
Edit:
In jouw geval kun je dat bijv. gebruiken voor:
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door Patrick Niezen
Bas Matthee schreef op 25.03.2008 10:03:
Maar $result->type is geen functie! maar een object uit een SELECT result.
en wat is het verschil tussen type en de functienaam die jij gebruikt? niets idd. Daarom kan je hem ook zo als functie aanroepen. Scheelt je een hoop werk uiteindenlijk