<select> verwerken
ik vraag me af hoe ik een formulier met een <select> erin kan verwerken.
het zou de bedoeling dus zijn om te controleren of er wel iets geselecteerd is en ook wat er juist geselecteerd is. de <select> wordt automatisch gevuld met gegevens van een database. ik heb hieronder mijn <select> gedeelte geplaatst. zou iemand me kunnen vertellen hoe dat in zijn werk gaat om te verwerken?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<select name='categorie'>
<option disabled='disabled'>kies een categorie</option>-->
<?php
include("dbconnect.php");
$sql = "SELECT categorie_id, naam FROM categorie";
$result = mysql_query($sql);
while ($rij = mysql_fetch_assoc($result)) {
echo "<option value='" . $rij['categorie_id'] ."'> ". $rij['naam'] ."</option>\n";
}
mysql_close($db);
?>
</select>
<option disabled='disabled'>kies een categorie</option>-->
<?php
include("dbconnect.php");
$sql = "SELECT categorie_id, naam FROM categorie";
$result = mysql_query($sql);
while ($rij = mysql_fetch_assoc($result)) {
echo "<option value='" . $rij['categorie_id'] ."'> ". $rij['naam'] ."</option>\n";
}
mysql_close($db);
?>
</select>
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
// kijk of hij gekozen is
if(isset($_POST['categorie']))
{
// of hij niet leeg is (met een 0 oid)
if( !empty($_POST['categorie']))
{
// of de waarde juist is...
if($_POST['categorie'] == 'de juiste waarde')
{
// alles goed
}
else
{
// waarde niet juist
}
}
else
{
// de categorie is leeg (0 of false of '')
}
}
else
{
// de categorie is niet gekozen (= niet verzonden...)
}
?>
// kijk of hij gekozen is
if(isset($_POST['categorie']))
{
// of hij niet leeg is (met een 0 oid)
if( !empty($_POST['categorie']))
{
// of de waarde juist is...
if($_POST['categorie'] == 'de juiste waarde')
{
// alles goed
}
else
{
// waarde niet juist
}
}
else
{
// de categorie is leeg (0 of false of '')
}
}
else
{
// de categorie is niet gekozen (= niet verzonden...)
}
?>
Toevoeging op 04/09/2012 08:53:03:
En waarom voeg je dbconnect() toe bij deze query?
Je maakt toch niet bij elke query verbinding met de database en daarna sluit je hem?
Bovenaan de pagina include (of beter: require) je die connectie eenmalig.
En onderaan de pagina sluit je deze (eventueel).
Verder heeft een select altijd een waarde, er is namelijk altijd een option geselecteerd. Default is dat de eerste. De waarde die mee wordt gegeven is dan weer de value van de geselecteerde option, of, als er geen value is, de text van de option.
ik wil enkel weten wat er bij de select staat wanneer er op de submit geklikt wordt.
ik denk niet dat dit veel moeilijker is maar ik heb enkele dingen al geprobeerd en krijg het niet voor mekaar.
Die waarde zit dus in $_POST['çategorie']
Ger van Steenderen op 04/09/2012 11:11:08:
Die waarde zit dus in $_POST['çategorie']
cool :)
in dit:
Ozzie PHP op 04/09/2012 11:12:15:
cool :)
Ger van Steenderen op 04/09/2012 11:11:08:
Die waarde zit dus in $_POST['çategorie']
cool :)
Oorzaak: correct quoten :-P
.... OR trim($_POST['categorieid'])
Verder zie ik geen echo.
de echo hiervan staat wat verderop.
ondertussen heb ik dit werkende gekregen maar nu heb ik een ander probleem, namelijk dat ik wil controleren ofdat de ingevoegde waarde een getal is en zo niet, dan moet er een foutmelding verschijnen.
hiervoor dacht ik aan het onderstaande maar hoe dan ook werkt dit niet en kan ik steeds gewone tekst intypen die daarna dan als "0" in de database verschijnen
https://www.google.nl/search?client=opera&rls=nl&q=php+check+string+is+numbers+only&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest
Bovenste hit: is_numeric
Eerste van Stack Overflow: http://stackoverflow.com/questions/317916/how-can-i-check-if-form-input-is-numeric-in-php Vooral 2e reactie is mooi:
Maar waarom mag ik een telefoonnummer niet als 0184-633843 invullen?
Filter jij het streepje er maar tussen uit:
Toevoeging op 05/09/2012 10:33:34:
Eventueel als functie:
Geeft:
Zie ook: http://codepad.org/RAg2cH2m
Bovenste hit: is_numeric
Eerste van Stack Overflow: http://stackoverflow.com/questions/317916/how-can-i-check-if-form-input-is-numeric-in-php Vooral 2e reactie is mooi:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
if (
isset($_POST['getal'])
AND !empty($_POST['getal'])
AND intval($_POST['getal']) == $_POST['getal']
AND count(intval($_POST['getal'])) == 10
)
{
// getal is geset
// getal is niet leeg (of 0 of false)
// de intval (dus 1234567890) is gelijk aan de oorsprong: oorsprong is dus goed
// de (gestripte) versie heeft 10 cijfers, zoals een telefoonnummer hoort te hebben
// wat ga je doen?
echo $_POST['getal'];
}
?>
if (
isset($_POST['getal'])
AND !empty($_POST['getal'])
AND intval($_POST['getal']) == $_POST['getal']
AND count(intval($_POST['getal'])) == 10
)
{
// getal is geset
// getal is niet leeg (of 0 of false)
// de intval (dus 1234567890) is gelijk aan de oorsprong: oorsprong is dus goed
// de (gestripte) versie heeft 10 cijfers, zoals een telefoonnummer hoort te hebben
// wat ga je doen?
echo $_POST['getal'];
}
?>
Maar waarom mag ik een telefoonnummer niet als 0184-633843 invullen?
Filter jij het streepje er maar tussen uit:
Code (php)
1
2
3
4
2
3
4
<?php
$getal = preg_replace("/[^0-9]/","", $_POST['getal']);
// en hier nog controle of het 10 cijfers zijn... tenzij het begint met 31....
?>
$getal = preg_replace("/[^0-9]/","", $_POST['getal']);
// en hier nog controle of het 10 cijfers zijn... tenzij het begint met 31....
?>
Toevoeging op 05/09/2012 10:33:34:
Eventueel als functie:
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
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
<?php
function get_telefoonnummer($nummer = false)
{
// als er niets is ingevuld, return false
if($nummer === false)
{
return false;
}
// verwijder alles tussen haakjes als in +31 (0) 123456789
$nummer = trim(preg_replace('/\s*\([^)]*\)/', '', $nummer));
// vervang alles behalve de nummers
$nummer = preg_replace("/[^0-9]/", "", $nummer);
// vervang een 0031 door een 0 en ..31 door 0
if(substr($nummer, 0, 4) == '0031')
{
$nummer = '0'.substr($nummer, 4);
}
// vervang een +31 door een 0... de + is al weggefilterd
if(substr($nummer, 0, 2) == '31')
{
$nummer = '0'.substr($nummer, 2);
}
// controle of cijfer met een 0 begint
if($nummer{0} !== '0')
{
return false;
}
// controle of telefoonnummer 10 cijfers heeft
if(strlen($nummer) !== 10)
{
return false;
}
return $nummer;
}
echo '<pre>';
echo '0184-633843'."\t\t". get_telefoonnummer('0184-633843').PHP_EOL;
echo '+31 (0)184-633843'."\t". get_telefoonnummer('+31 184633843').PHP_EOL;
echo '(0184) 633843'."\t\t". get_telefoonnummer('+31 184633843').PHP_EOL;
echo '+31 184-633843'."\t\t". get_telefoonnummer('+31 184633843').PHP_EOL;
echo '0031 184-633843'."\t\t". get_telefoonnummer('0031 184-633843').PHP_EOL;
echo '018 4 633 843'."\t\t". get_telefoonnummer('018 4 633 843').PHP_EOL;
echo '</pre>';
?>
function get_telefoonnummer($nummer = false)
{
// als er niets is ingevuld, return false
if($nummer === false)
{
return false;
}
// verwijder alles tussen haakjes als in +31 (0) 123456789
$nummer = trim(preg_replace('/\s*\([^)]*\)/', '', $nummer));
// vervang alles behalve de nummers
$nummer = preg_replace("/[^0-9]/", "", $nummer);
// vervang een 0031 door een 0 en ..31 door 0
if(substr($nummer, 0, 4) == '0031')
{
$nummer = '0'.substr($nummer, 4);
}
// vervang een +31 door een 0... de + is al weggefilterd
if(substr($nummer, 0, 2) == '31')
{
$nummer = '0'.substr($nummer, 2);
}
// controle of cijfer met een 0 begint
if($nummer{0} !== '0')
{
return false;
}
// controle of telefoonnummer 10 cijfers heeft
if(strlen($nummer) !== 10)
{
return false;
}
return $nummer;
}
echo '<pre>';
echo '0184-633843'."\t\t". get_telefoonnummer('0184-633843').PHP_EOL;
echo '+31 (0)184-633843'."\t". get_telefoonnummer('+31 184633843').PHP_EOL;
echo '(0184) 633843'."\t\t". get_telefoonnummer('+31 184633843').PHP_EOL;
echo '+31 184-633843'."\t\t". get_telefoonnummer('+31 184633843').PHP_EOL;
echo '0031 184-633843'."\t\t". get_telefoonnummer('0031 184-633843').PHP_EOL;
echo '018 4 633 843'."\t\t". get_telefoonnummer('018 4 633 843').PHP_EOL;
echo '</pre>';
?>
Geeft:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
0184-633843 0184633843
+31 (0)184-633843 0184633843
(0184) 633843 0184633843
+31 184-633843 0184633843
0031 184-633843 0184633843
018 4 633 843 0184633843
+31 (0)184-633843 0184633843
(0184) 633843 0184633843
+31 184-633843 0184633843
0031 184-633843 0184633843
018 4 633 843 0184633843
Zie ook: http://codepad.org/RAg2cH2m