pdo select box
ik wil een selectbox maken die bedrijfsnaamen weergeeft maar die het id van het bedrijfsnaam doorgeeft die je selecteert aan een value. Nu ben ik nog met de beginselen bezig. ik heb tot nu toe de query die ik wil gaan gebruiken en al wat geprobeert met script. maar als ik dit uitvoer krijg ik alleen 1 bedrijfsnaam hoe kan ik hier alle bedrijfsnamen onder elkaar krijgen om daarna een selectbox er van te maken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
error_reporting(-1);
ini_set('display_errors', 1);
include '/verbinding.php';
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT id, bedrijfsnaam FROM relaties order by bedrijfsnaam";
foreach ($db->query($sql) as $row);
print $row['bedrijfsnaam'];
?>
error_reporting(-1);
ini_set('display_errors', 1);
include '/verbinding.php';
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT id, bedrijfsnaam FROM relaties order by bedrijfsnaam";
foreach ($db->query($sql) as $row);
print $row['bedrijfsnaam'];
?>
De puntkomma op regel 10 hoort daar niet.
En gebruik { en } bij de foreach().
En gebruik { en } bij de foreach().
Dit komt volgens mij omdat je loop verkeerd is.
Probeer eens:
foreach ($db->query($sql) as $row) {
print $row['bedrijfsnaam'];
}
Toevoeging op 11/04/2012 10:26:13:
SanThe je was mij net voor :)
Probeer eens:
foreach ($db->query($sql) as $row) {
print $row['bedrijfsnaam'];
}
Toevoeging op 11/04/2012 10:26:13:
SanThe je was mij net voor :)
dit werkt maar zet het naast elkaar neer en dan kan ik er denk ik geen selectbox van maken of wel ?
Gewijzigd op 11/04/2012 10:28:23 door gerhard timmerman
Kwestie van de juiste html in de echo zetten.
ik heb het nu in een html gemaak maar krijg het resultaat nog niet in de select box
Gewijzigd op 11/04/2012 10:38:15 door gerhard timmerman
Misschien nog even naar de manual van PDO kijken.
De query method in een PDO object execute een query en geeft dan een PDOStatement object terug. Op dat object moet je dan nog een fetch doen zodat je alle records uit kan lezen. Het fetchen kan op verschillende manieren, de handigste (vind ik) is fetch_all waarbij je alle records in een keer uitleest en in een array stopt. Voorbeeld:
De constante PDO::FETCH_ASSOC zorgt ervoor dat de array die je terugkrijgt een associatieve array is. Default geeft de method namelijk zowel associatieve keys terug, als numerieke keys, wat betekent dat je de data dubbel in je resultset krijgt.
En nog even voor de duidelijkheid. Je kan ook de hele resultset dus in een array terugkrijgen als je dit doet:
$dataset heeft dus nu alle rijen die je query heeft geselecteerd.
http://www.php.net/manual/en/pdo.query.php
http://www.php.net/manual/en/pdostatement.fetchall.php
De query method in een PDO object execute een query en geeft dan een PDOStatement object terug. Op dat object moet je dan nog een fetch doen zodat je alle records uit kan lezen. Het fetchen kan op verschillende manieren, de handigste (vind ik) is fetch_all waarbij je alle records in een keer uitleest en in een array stopt. Voorbeeld:
Code (php)
De constante PDO::FETCH_ASSOC zorgt ervoor dat de array die je terugkrijgt een associatieve array is. Default geeft de method namelijk zowel associatieve keys terug, als numerieke keys, wat betekent dat je de data dubbel in je resultset krijgt.
En nog even voor de duidelijkheid. Je kan ook de hele resultset dus in een array terugkrijgen als je dit doet:
$dataset heeft dus nu alle rijen die je query heeft geselecteerd.
http://www.php.net/manual/en/pdo.query.php
http://www.php.net/manual/en/pdostatement.fetchall.php
als ik het op jou manier doe krijg ik direct een 500 error
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html>
<form>
<select name="relatieid">
<?php
error_reporting(-1);
ini_set('display_errors', 1);
include '/verbinding.php';
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT id, bedrijfsnaam FROM relaties order by bedrijfsnaam";
$st = $db->query($sql);
$dataset = $st->fetch_all(PDO::FETCH_ASSOC);
print "$dataset";
?>
</select>
</form>
<form>
<select name="relatieid">
<?php
error_reporting(-1);
ini_set('display_errors', 1);
include '/verbinding.php';
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT id, bedrijfsnaam FROM relaties order by bedrijfsnaam";
$st = $db->query($sql);
$dataset = $st->fetch_all(PDO::FETCH_ASSOC);
print "$dataset";
?>
</select>
</form>
Mitchell, waarom niet meteen printf?
dat werkt kun jij mij ook even uitleggen wat sprintf en %d en %s inhoud
Dat is een functie waarbij je HTML en PHP gescheiden houd. De %d staat voor een getal en de %s voor een string (stuk tekst).
De parameters die na de eerste parameter staat worden toegevoegd aan de string daarvoor. Dus:
Hierbij wordt de %s vervangen door $name en dus wordt het 'Hello Gerhard'.
Als je meerdere paremeters hebt kun je meerdere waardes opslaan:
Hierbij wordt de %s de eerste paremeter, $name dus, en de %d wordt de 2e parameter, $age. Het wordt dus 'Jan is 25'.
Meer uitleg: sprintf
De parameters die na de eerste parameter staat worden toegevoegd aan de string daarvoor. Dus:
Code (php)
1
2
3
4
2
3
4
<?php
$name = 'Gerhard';
printf('Hello %s', $name); // printf is hetzelfde als echo sprintf
?>
$name = 'Gerhard';
printf('Hello %s', $name); // printf is hetzelfde als echo sprintf
?>
Hierbij wordt de %s vervangen door $name en dus wordt het 'Hello Gerhard'.
Als je meerdere paremeters hebt kun je meerdere waardes opslaan:
Hierbij wordt de %s de eerste paremeter, $name dus, en de %d wordt de 2e parameter, $age. Het wordt dus 'Jan is 25'.
Meer uitleg: sprintf
met sprintf kan je een string opbouwen. %d en %s zijn placeholders die je later vervangt met de data achter de comma. %d is voor integer en %s voor string. Het gaat ook in volgorde, dus eerste de integer en daarna de string.
Voor meer info kan je kijken op www.php.net/sprintf
Voor meer info kan je kijken op www.php.net/sprintf
Gerhard timmerman op 11/04/2012 10:42:09:
als ik het op jou manier doe krijg ik direct een 500 error
Een beetje mosterd na de maaltijd, maar die error is niet zo gek natuurlijk. $dataset bevat nu de gehele resultset, is dus een multidimensionale array (wat ik volgens mij ook had uitgelegd) en die kan je niet 1-2-3 naar het scherm printen.
dus wouter daar word zeg maar al zegt id neer zetten met de naam van bedrijf zeg maar
Ja klopt.
ha op die manier top bedankt voor de hulp




