Select array
Code (php)
1
2
3
4
5
2
3
4
5
<select id="category" name="category[]" multiple="multiple" >
<?php while( $row = mysqli_fetch_assoc($result_sql_get_categories)):?>
<option value="<?php echo htmlspecialchars($row['category_id']);?>"<?php if(isset($_POST['category'])&&($_POST['category'] == $row['category_id'])){echo 'selected="selected"';}?> ><?php echo htmlspecialchars($row['category_descr']);?></option>
<?php endwhile?>
</select>
<?php while( $row = mysqli_fetch_assoc($result_sql_get_categories)):?>
<option value="<?php echo htmlspecialchars($row['category_id']);?>"<?php if(isset($_POST['category'])&&($_POST['category'] == $row['category_id'])){echo 'selected="selected"';}?> ><?php echo htmlspecialchars($row['category_descr']);?></option>
<?php endwhile?>
</select>
De bedoeling is dat de gekozen waarde wordt onthouden na een form submit. Volgens mij lukt het nu niet omdat ik een variabele vergelijk met een array. Hoe kan ik de juiste waarde binnen de array vergelijken met de waarde uit de database? Mocht iemand tips hebben om dit trouwens mooier te schrijven is dat ook welkom..;-)
Gewijzigd op 22/07/2013 15:56:42 door N K
Als je de value attribute niet gebruikt krijg je als waarde de inhoud van het option element terug. Als je hem wel gebruikt krijg je altijd de waarde van de value attribute terug.
je moet je altijd afvragen wat je nodig hebt nadat een gebruiker een keuze heeft gemaakt. Indien je meer nodig hebt dan de waarde die in de value attribute is opgegeven dan kun je het beste de primary key van de database-record meegeven. met dat id kun je dan weer alle gegevens van een record opvragen met
htmlspecialchars kan hier weg. je haalt data uit de database. Deze data is schoon en behoeft niet bewerkt te worden.
Probeer jezelf aan te leren om PHP logica Bovenin je script te houden en HTML onderin.
In de HTML is dit wel goed:
maar allerlei if-statements kun je beter zo veel mogelijk vermijden.
Gewijzigd op 22/07/2013 16:18:23 door Frank Nietbelangrijk
Ik zie daarnaast niet zo snel hoe ik jouw antwoord kan matchen met mijn vraag.
Ik wil de geselecteerde opties tonen nadat ik het form gesubmit heb. Dan zal ik toch selected="selected" voor die regels moeten toevoegen?
Toevoeging op 22/07/2013 16:25:50:
M.b.t. htmlspecialchars:
Ik heb geleerd om htmlspecialchars te gebruiken vlak voor je output om XSS te voorkomen.
Waarom is dit niet goed?
N K op 22/07/2013 15:56:26:
Mocht iemand tips hebben om dit trouwens mooier te schrijven is dat ook welkom..;-)
Indenteren. Niet alles op 1 lijntje schrijven; zo kunnen we de code in 1 oogopslag zien.
---
Edit ... die notatie, waarbij je <?php in en uit gaat, maakt het niet gemakkelijk om leesbare code te krijgen. Zeker gezien daar nog if's staan, beveiliging, ...
Gewijzigd op 22/07/2013 16:37:37 door Kris Peeters
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
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
<?php
function getCategoryOptions($link)
{
// return '<option value="1">pannekoeken</option>' . '<option value="2">patat</option>' . "\n"; // testje zonder database!
$out = '';
$result = mysqli_query($link, "SELECT `category_id`,`category` FROM category");
while($row = mysqli_fetch_assoc($result))
{
$out .= '<option value="' . $row['category_id'] . '">' . $row['category'] . '</option>' . "\n";
}
return $out;
}
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// dump deze array om te zien hoe die is opgebouwd
print_r($_POST);
// nu de nette manier:
if(isset($_POST['category'])) // als er niets uit de lijst gekozen wordt bestaat deze variabele helemaal niet!
{
echo '<br/><br/>U heeft de volgende category id\'s gekozen:<br/>';
foreach($_POST['category'] as $value)
{
echo $value . '<br/>';
}
echo '<br/>';
}
}
?>
<form action="" method="post">
<select id="category" name="category[]" multiple="multiple" >
<?php echo getCategoryOptions($link); ?>
</select>
<button type="submit">Go!</button>
</form>
function getCategoryOptions($link)
{
// return '<option value="1">pannekoeken</option>' . '<option value="2">patat</option>' . "\n"; // testje zonder database!
$out = '';
$result = mysqli_query($link, "SELECT `category_id`,`category` FROM category");
while($row = mysqli_fetch_assoc($result))
{
$out .= '<option value="' . $row['category_id'] . '">' . $row['category'] . '</option>' . "\n";
}
return $out;
}
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// dump deze array om te zien hoe die is opgebouwd
print_r($_POST);
// nu de nette manier:
if(isset($_POST['category'])) // als er niets uit de lijst gekozen wordt bestaat deze variabele helemaal niet!
{
echo '<br/><br/>U heeft de volgende category id\'s gekozen:<br/>';
foreach($_POST['category'] as $value)
{
echo $value . '<br/>';
}
echo '<br/>';
}
}
?>
<form action="" method="post">
<select id="category" name="category[]" multiple="multiple" >
<?php echo getCategoryOptions($link); ?>
</select>
<button type="submit">Go!</button>
</form>
Toevoeging op 22/07/2013 16:50:30:
$link = de connectie naar je database
Gewijzigd op 22/07/2013 16:49:27 door Frank Nietbelangrijk
@Frank, zo is het inderdaad wat mooier gescheiden. Heb nog bijna geen functies gemaakt eigenlijk maar zie nu wel het nut ervan. Dank!
die indruk had ik al en je bent niet de enigste maar je doet er heel goed aan om dat op te pakken.
Ik moet echt gebruik maken van selected = "selected".
Ik wil geen tekst laten zien maar buttons die oplichten (Ik gebruik een jquery multiselect variant..)
Weet jij zo hoe ik dit kan implementeren in deze code?
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
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
<?php
function getCategoryOptions($link, $selected = false)
{
$out = '';
$result = mysqli_query($link, "SELECT `category_id`,`category` FROM category");
while($row = mysqli_fetch_assoc($result))
{
$sel = '';
if( in_array($row['category_id'], $selected))
{
$sel = 'selected="selected"';
}
$out .= '<option value="' . $row['category_id'] . '"' . $sel . '>' . $row['category'] . '</option>' . "\n";
}
return $out;
}
$link = mysqli_connect('localhost', 'root', '', 'test');
$gekozen = false;
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// dump deze array om te zien hoe die is opgebouwd
print_r($_POST);
// nu de nette manier:
if(isset($_POST['category'])) // als er niets uit de lijst gekozen wordt bestaat deze variabele helemaal niet!
{
echo '<br/><br/>U heeft de volgende category id\'s gekozen:<br/>';
foreach($_POST['category'] as $value)
{
echo $value . '<br/>';
}
echo '<br/>';
// overschrijf $gekozen nu naar een array met de gekozen opties
$gekozen = $_POST['category'];
}
}
?>
<form action="" method="post">
<select id="category" name="category[]" multiple="multiple" >
<?php echo getCategoryOptions($link, $gekozen); ?>
</select>
<button type="submit">Go!</button>
</form>
function getCategoryOptions($link, $selected = false)
{
$out = '';
$result = mysqli_query($link, "SELECT `category_id`,`category` FROM category");
while($row = mysqli_fetch_assoc($result))
{
$sel = '';
if( in_array($row['category_id'], $selected))
{
$sel = 'selected="selected"';
}
$out .= '<option value="' . $row['category_id'] . '"' . $sel . '>' . $row['category'] . '</option>' . "\n";
}
return $out;
}
$link = mysqli_connect('localhost', 'root', '', 'test');
$gekozen = false;
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// dump deze array om te zien hoe die is opgebouwd
print_r($_POST);
// nu de nette manier:
if(isset($_POST['category'])) // als er niets uit de lijst gekozen wordt bestaat deze variabele helemaal niet!
{
echo '<br/><br/>U heeft de volgende category id\'s gekozen:<br/>';
foreach($_POST['category'] as $value)
{
echo $value . '<br/>';
}
echo '<br/>';
// overschrijf $gekozen nu naar een array met de gekozen opties
$gekozen = $_POST['category'];
}
}
?>
<form action="" method="post">
<select id="category" name="category[]" multiple="multiple" >
<?php echo getCategoryOptions($link, $gekozen); ?>
</select>
<button type="submit">Go!</button>
</form>
Toevoeging op 22/07/2013 19:35:22:
je mag jquery en javascript gewoon door elkaar gebruiken.
Dank!!