Array printen
Ik zit met het volgende 'probleem'. Ik heb een pagina gemaakt waar ik nieuwe items toevoeg. Deze items zijn in te delen naar meerdere categorieën. Hier het deel van het form (dat bij action naar nieuw_add.php gaat) :
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
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
nieuw.php
<form method="post" action="nieuw_add">
<table>
<tr>
<td width="100">Website</td>
<td><input name="url" type="text" id="url"></td>
</tr>
<tr>
<td width="100">E-mail</td>
<td><input name="email" type="text" id="email"></td>
</tr>
</table>
<?php
$query=mysqli_query($conn, "select * from category")or die(mysqli_error($conn));
while($row=mysqli_fetch_array($query)){
$category_id=$row['id'];
?>
<table>
<tr>
<td width="115"></td>
<td width="20" style="padding-bottom: 4px"><input name="selector[]" type="checkbox" value="<?php echo $category_id; ?>"></td>
<td width="100" style="padding-top:3px; padding-bottom: 1px"><?php echo $row['type'] ?></td>
<td width="265" style="padding-top:3px; padding-bottom: 1px"><?php echo $row['name'] ?></td>
</tr>
</table>
<input name="save" type="submit" id="save" class="btn btn-success" value="Voeg toe">
</form>
<?php
}
?>
<form method="post" action="nieuw_add">
<table>
<tr>
<td width="100">Website</td>
<td><input name="url" type="text" id="url"></td>
</tr>
<tr>
<td width="100">E-mail</td>
<td><input name="email" type="text" id="email"></td>
</tr>
</table>
<?php
$query=mysqli_query($conn, "select * from category")or die(mysqli_error($conn));
while($row=mysqli_fetch_array($query)){
$category_id=$row['id'];
?>
<table>
<tr>
<td width="115"></td>
<td width="20" style="padding-bottom: 4px"><input name="selector[]" type="checkbox" value="<?php echo $category_id; ?>"></td>
<td width="100" style="padding-top:3px; padding-bottom: 1px"><?php echo $row['type'] ?></td>
<td width="265" style="padding-top:3px; padding-bottom: 1px"><?php echo $row['name'] ?></td>
</tr>
</table>
<input name="save" type="submit" id="save" class="btn btn-success" value="Voeg toe">
</form>
<?php
}
?>
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
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
nieuw_add.php
<?php
$url = check($_POST['url']);
$email = check($_POST['email']);
$id=$_POST['selector'];
$N = count($id);
for($i=0; $i < $N; $i++)
{
$result = mysqli_query($conn, "SELECT * FROM category where id='$id[$i]'");
while($row = mysqli_fetch_array($result))
{
}
}
$sql = "INSERT INTO test(id, url, email, category_id)
VALUES (NULL, '{$url}', '{$email}', '{$category_id}');";
$retval = mysqli_query($conn, $sql);
if(! $retval )
{
die('Could not enter data: ' . mysqli_error($conn));
}
?>
<?php
$url = check($_POST['url']);
$email = check($_POST['email']);
$id=$_POST['selector'];
$N = count($id);
for($i=0; $i < $N; $i++)
{
$result = mysqli_query($conn, "SELECT * FROM category where id='$id[$i]'");
while($row = mysqli_fetch_array($result))
{
}
}
$sql = "INSERT INTO test(id, url, email, category_id)
VALUES (NULL, '{$url}', '{$email}', '{$category_id}');";
$retval = mysqli_query($conn, $sql);
if(! $retval )
{
die('Could not enter data: ' . mysqli_error($conn));
}
?>
Ik wil de met checkboxen geselecteerde categorieën toevoegen aan de database test, zodat deze de volgende keer daaruit gehaald kunnen worden, echter lukt mij dit niet.
Misschien iemand enig idee?
Alvast bedankt!!
Gewijzigd op 12/03/2014 22:04:04 door Jan Tje
items:
-id
-url
categories:
-id
-naam
item_category
-item_id
-category_id
je gaat dan items aan categorieën toevoegen door een record aan de koppeltabel toe tevoegen
voorbeeld
items:
1 - http://www.test.nl - [email protected]
2 - http://www.info.nl - [email protected]
categorieën:
1 - programmeren
2 - reizen
3 - auto's
item_category:
1 - 2 (http://www.test.nl ==> reizen)
2 - 2 (http://www.info.nl ==> reizen)
2 - 3 (http://www.info.nl ==> auto's)
zoals je ziet kun je zo meerdere items aan een category toekennen maar ook andersom namelijk meerdere categorieën aan een item.
Dit noemen ze een many-to-many relation.
Wat betreft de checkboxen hou er rekening mee dat alleen de waarde <name>=On wordt gepost als de checkbox aangevinkt is. Is de checkbox niet aangevinkt dan wordt er niets! gepost.
Bedankt voor je hulp. Daar ga ik zeker mee aan de slag. Misschien wil je mij in de tussentijd ook even helpen door mijn code werkend te krijgen? Ik mis iets maar kom er maar niet achter wat helaas. Vriendelijk dank.
Dit klinkt erg vaag. Waarom denk je dat wat mist. Werkt iets niet, krijg je een foutmelding?
Daarnaast mis je in ieder geval een foutafhandeling die jou vertelt wanneer de query fout gaat. Die while { } heeft op die manier weinig zin. En die() moet je gewoon afleren om te gebruiken. Jij gaat toch ook niet dood als je iets fout doet? Toon gewoon een foutmelding.
Die 2 pagina's zouden ook in 1 pagina kunnen.
En getallen zet je niet tussen quotes (id='$id[$i]' '{$category_id}')
Gewijzigd op 13/03/2014 08:22:05 door Michael -
Ik heb eens even gekeken naar de many-to-many relation, maar dit lijkt mij niet voor mij van toepassing? Wanneer ik in de tabel test in kolom 'category_id' de ID's van de tabel category zet, kom ik er toch ook? Is dat dan geen extra werk? Of mis ik iets.
Dit stukje code zet op je website neer wat er met de POST wordt meegestuurd...
Hoop dat je er wat aan hebt!
Jan Tje op 12/03/2014 22:01:17:
Ik wil de met checkboxen geselecteerde categorieën toevoegen aan de database test, zodat deze de volgende keer daaruit gehaald kunnen worden, echter lukt mij dit niet.
Hieruit zullen de meesten opmaken dat je aan een item meerdere categorieën kan toekennen, en andersom zal een categorie ook meerdere items kunnen bevatten.
Met als gevolg een n-n relatie, en dan heb je een linktabel nodig.
category_id
test_id
Wat ik nu wil is dat ik via nieuw.php een nieuw item aan kan maken in de tabel test en bij de aanmaak van dit item tegelijk de categorieën kan selecteren waaronder deze valt. Die categorieën wil ik dan opslaan in de many-to-many relations tabel. Is dat mogelijk?
Ik krijg dan de situatie dat ik een nieuw item aanmaak en categorieën selecteer en PHP kijkt welk ID is aangemaakt voor het nieuwe item in de tabel test én deze opslaat in de tabel link_category_test in kolom test_id en de geselecteerde categorieën opslaat in de kolom category_id.
Is dat mogelijk en zo ja, kan iemand mij wellicht een aanzet geven of duidelijke uitleg / tutorial?
Alvast vriendelijk dank!
Inmiddels heb ik een opzetje gemaakt, echter kom ik er niet helemaal uit. Bij deze opzet ben ik even uitgegaan van het bewerken van 1 item, dus nog niet het daadwerkelijk toevoegen. Waarom? Omdat als ik het EDIT gedeelte onder de knie heb de rest een piece of cake is. De tabel die ik heb gemaakt is de volgende :
Quote:
link_category_test
kolom "category_id"
kolom "test_id"
kolom "category_id"
kolom "test_id"
Nu wil ik een overzicht krijgen van alle categorieën uit de tabel category, waarbij er per category een checkbox aangevinkt is als deze voorkomt bij een test-item. Komt deze niet voor, dan wordt de checkbox ook niet aangevinkt :
Quote:
<div class="control-group">
<label class="control-label" for="inputEmail">Categorie</label>
<div class="controls">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="20" style="padding-bottom: 4px"><input name="selector[]" type="checkbox" value=" "></td>
<td width="100" style="padding-top:3px; padding-bottom: 1px"></td>
<td width="265" style="padding-top:3px; padding-bottom: 1px"></td>
</tr>
</table>
</div>
</div>
</div>
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
$id=$_POST['selector'];
$N = count($id);
for($i=0; $i < $N; $i++)
{
$result = mysqli_query($conn, "SELECT * FROM test where id='$id[$i]'");
while($row = mysqli_fetch_array($result))
{
?>
$N = count($id);
for($i=0; $i < $N; $i++)
{
$result = mysqli_query($conn, "SELECT * FROM test where id='$id[$i]'");
while($row = mysqli_fetch_array($result))
{
?>
<div class="control-group">
<label class="control-label" for="inputEmail">Categorie</label>
<div class="controls">
<table cellpadding="0" cellspacing="0" border="0">
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$query3=mysqli_query($conn, "SELECT category.id, category.name, category.type, test.id, test.name,
CASE WHEN link_category_test.test_id IS NULL THEN 'F' ELSE 'T' END AS selected
FROM category
CROSS JOIN test
LEFT JOIN link_category_testON (link_category_test.category_id = category.id AND link_category_test.test_id = test.id)
WHERE test.id='$id[$i]'");
while($row=mysqli_fetch_array($query3)){
$category_id=$row['id'];
?>
$query3=mysqli_query($conn, "SELECT category.id, category.name, category.type, test.id, test.name,
CASE WHEN link_category_test.test_id IS NULL THEN 'F' ELSE 'T' END AS selected
FROM category
CROSS JOIN test
LEFT JOIN link_category_testON (link_category_test.category_id = category.id AND link_category_test.test_id = test.id)
WHERE test.id='$id[$i]'");
while($row=mysqli_fetch_array($query3)){
$category_id=$row['id'];
?>
<tr>
<td width="20" style="padding-bottom: 4px"><input name="selector[]" type="checkbox" value=" "></td>
<td width="100" style="padding-top:3px; padding-bottom: 1px"></td>
<td width="265" style="padding-top:3px; padding-bottom: 1px"></td>
</tr>
</table>
</div>
</div>
</div>
Helaas werkt het nog niet! Wat doe ik verkeerd?
Alle hulp is natuurlijk van harte welkom :)
Gewijzigd op 22/03/2014 14:26:09 door Jan Tje