Koppeltyabel raadplegen probleem
ik heb een produktpagina. (tabel machine)
Ik wil een lijstje maken met een aantal opties (tabel opties)
vervolgens wil ik een lijst met alle opties maken met ee checkbox en per optie kijken of deze optie bestaat voor dit produkt (in de koppeltabel) om vervolgens bij elke checkbox t ekijken of hij aan of uit is.
Bedankt voor de mededeling mijn toestemming heb je :)
Maar volgens mij moet je het nog even wat duidelijker uitleggen, denk ik.
maar ik ben al wat op weg...
ik wil een lijst genereren, van opties, elk met een id,
en vervolgens bij elke optie checken of er in een koppeltabel een record bestaat met hetzelfde id, vervolgens zet ik een checkbox aan of uit.
ik dacht t zo op te lossen
//// OPTIES
$sql = "select * from opties";
$result = mysql_query($sql);
$sql2 = "select * from machine_opties";
$result2 = mysql_query($sql2);
while ($data = mysql_fetch_array($result)) {
// de variabelen
$data2 = mysql_fetch_array($result2);
$search_array = $data2;
$key = $data['id'];
if (array_key_exists($key, $search_array)) {
$check = 'id bestaat';
}
else {
$check = 'id bestaat niet';
}
echo $check;
}
dit is de output, echter nog wel met een error:
id bestaat
Warning: array_key_exists(): The second argument should be either an array or an object in
Gewijzigd op 01/01/1970 01:00:00 door JP
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$data2 = mysql_fetch_array($result2);
$search_array = $data2;
(...)
if (array_key_exists($key, $search_array))
?>
$data2 = mysql_fetch_array($result2);
$search_array = $data2;
(...)
if (array_key_exists($key, $search_array))
?>
Allereerst, waarom hernoem je $data2 naar $search_array. Beetje overbodig in dit geval. Daarnaast bevat $search_array alleen de laatste rij van je resultset. En ik neem aan dat je alle rijen in die array wilt hebben.
Wat ik ook niet snap is dat je bij beide queries die je uitvoert alle resultaten uit een tabel ophaalt. Er is nu totaal geen relatie tussen deze twee result set en je gaat ze wel met elkaar gebruiken.
Ik zou zoiets doen:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
SELECT
opties.id,
machine_opties.id
FROM
opties
LEFT JOIN
machine_opties
ON
opties.id = machine_opties.optieID
opties.id,
machine_opties.id
FROM
opties
LEFT JOIN
machine_opties
ON
opties.id = machine_opties.optieID
machine_opties.optieID moet je even de juiste naam geven. Dit is de foreign key in de tabel machine_opties die naar de tabel opties verwijst.
Vervolgens krijg je een resultaat-set terug met alle id's uit de optie tabel. Als er een overeenkomstig id in de koppeltabel gevonden is, wordt dat ook teruggegeven. Zo niet, dat wordt er op die plaats 'null' terug gegeven.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
include 'includes/config.php';
$sql = "
SELECT
opties.id,
machine_opties.id <---- in koppeltabel gebruik ik machine_id en optie_id
FROM
opties
LEFT JOIN
machine_opties
ON
opties.id = machine_opties.optie_id";
while($r=mysql_fetch_array($sql)){
doe iets...
}
?>
include 'includes/config.php';
$sql = "
SELECT
opties.id,
machine_opties.id <---- in koppeltabel gebruik ik machine_id en optie_id
FROM
opties
LEFT JOIN
machine_opties
ON
opties.id = machine_opties.optie_id";
while($r=mysql_fetch_array($sql)){
doe iets...
}
?>
Je voert je query ook nergens uit?
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
<?
include 'includes/config.php';
$sql = "
SELECT
opties.id,
machine_opties.id
FROM
opties
LEFT JOIN
machine_opties
ON
opties.id = machine_opties.optie_id";
$res=mysql_query($sql);
if(mysql_num_rows($res) > 0)
// er is resulaat
{
while($r=mysql_fetch_array($sql))
{
echo "doe iets...";
}
else
{
echo "er zijn geen resultataen";
}
}
?>
include 'includes/config.php';
$sql = "
SELECT
opties.id,
machine_opties.id
FROM
opties
LEFT JOIN
machine_opties
ON
opties.id = machine_opties.optie_id";
$res=mysql_query($sql);
if(mysql_num_rows($res) > 0)
// er is resulaat
{
while($r=mysql_fetch_array($sql))
{
echo "doe iets...";
}
else
{
echo "er zijn geen resultataen";
}
}
?>
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
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
<?php
include 'includes/config.php';
$sql = "
SELECT
opties.id,
machine_opties.id
FROM
opties
LEFT JOIN
machine_opties
ON
opties.id = machine_opties.optie_id
";
if(!$res=mysql_query($sql))
{
trigger_error(mysql_errno().': '.mysql_error());
}
else
{
if(mysql_num_rows($res) > 0)
// er is resulaat
{
while($r=mysql_fetch_array($sql))
{
echo "doe iets...";
}
}
else
{
echo "er zijn geen resultataen";
}
}
?>
include 'includes/config.php';
$sql = "
SELECT
opties.id,
machine_opties.id
FROM
opties
LEFT JOIN
machine_opties
ON
opties.id = machine_opties.optie_id
";
if(!$res=mysql_query($sql))
{
trigger_error(mysql_errno().': '.mysql_error());
}
else
{
if(mysql_num_rows($res) > 0)
// er is resulaat
{
while($r=mysql_fetch_array($sql))
{
echo "doe iets...";
}
}
else
{
echo "er zijn geen resultataen";
}
}
?>
@Blanche je hebt helemaal gelijk
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
//// OPTIES
$sql=mysql_query("SELECT
o.id AS optie_id,
o.naam AS optie_naam,
IF
(x.machine_id=$id,'checked=\"true\"','') AS checked
FROM
opties AS o
LEFT JOIN
machine_opties AS x
ON (x.optie_id=o.id AND x.machine_id=$id)
");
echo mysql_error();
while($r=mysql_fetch_array($sql)){
?>
//// OPTIES
$sql=mysql_query("SELECT
o.id AS optie_id,
o.naam AS optie_naam,
IF
(x.machine_id=$id,'checked=\"true\"','') AS checked
FROM
opties AS o
LEFT JOIN
machine_opties AS x
ON (x.optie_id=o.id AND x.machine_id=$id)
");
echo mysql_error();
while($r=mysql_fetch_array($sql)){
?>
<input type="checkbox" name="optie[]" value="" /> <br />
Deze wil je toch alleen tonen als je mysql query mislukt? Daarnaast is de keuzen van je variabelen ook niet helemaal slim. $sql is geen query, maar een result-set. $res of $result ligt dus meer voor de hand.
Ook klopt je query niet. Het stukje 'x.machine_id = $id' hoort gewoon in een WHERE clause te staan. En wat je met je IF in je query wilt bereiken volg ik ook niet helemaal....