HTML checkboxes en PHP
Momenteel ben ik bezig met het maken van een website om beter PHP te leren kennen.
Achter deze website ben ik momenteel een CMS-je aan het bouwen. De bedoeling is dat ik projecten kan toevoegen. Deze projecten kunnen vervolgens categorieën toe verwezen worden. Dit doe ik momenteel op de volgende manier:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<label>
<span id="span_cat" class="label">Category: </span><br><br>
<input id="box_1" class="css-checkbox" type="checkbox" name="category[]" value="design" />
<label for="box_1" class="css-label" >Design</label>
<input id="box_2" class="css-checkbox" type="checkbox" name="category[]" value="development"/>
<label for="box_2" class="css-label">Development</label>
<input id="box_3" class="css-checkbox" type="checkbox" name="category[]" value="cms" />
<label for="box_3" class="css-label">Content Management System</label>
</label>
<span id="span_cat" class="label">Category: </span><br><br>
<input id="box_1" class="css-checkbox" type="checkbox" name="category[]" value="design" />
<label for="box_1" class="css-label" >Design</label>
<input id="box_2" class="css-checkbox" type="checkbox" name="category[]" value="development"/>
<label for="box_2" class="css-label">Development</label>
<input id="box_3" class="css-checkbox" type="checkbox" name="category[]" value="cms" />
<label for="box_3" class="css-label">Content Management System</label>
</label>
De categorie word dus in een array geplaatst. Maar momenteel lukt het me nog niet echt deze array in de database te plaatsen. Omdat ik straks deze projecten wil kunnen sorteren op categorie zal m'n table er volgens mij als volgens uit zien:
projectCategory
id projectId Category
1 1 design
2 1 CMS
3 2 design
Dit probeer ik momenteel te bereiken door de volgende query:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$projectInfo="INSERT INTO projects (title, img, description) VALUES('$_POST[projectname]','$_POST[image]','$_POST[content]')";
$projectId = mysql_insert_id();
$category = $_POST['category'];
if(empty($category)){
echo("Je hebt geen categorie geselecteerd.");
}else{
$n = count($category);
for($i=0; $i < $n; $i++){
echo($category[$i]. " ");
}
}
$projectCategory="INSERT INTO projectcategory (id, projectCategory) VALUES($projectId, $category)";
if(!mysql_query($projectCategory)){
die('Error: ' . mysql_error());
}
?>
$projectInfo="INSERT INTO projects (title, img, description) VALUES('$_POST[projectname]','$_POST[image]','$_POST[content]')";
$projectId = mysql_insert_id();
$category = $_POST['category'];
if(empty($category)){
echo("Je hebt geen categorie geselecteerd.");
}else{
$n = count($category);
for($i=0; $i < $n; $i++){
echo($category[$i]. " ");
}
}
$projectCategory="INSERT INTO projectcategory (id, projectCategory) VALUES($projectId, $category)";
if(!mysql_query($projectCategory)){
die('Error: ' . mysql_error());
}
?>
Het lukt mij momenteel nog niet om een bepaalde om per waarden uit de array in een nieuwe row van mijn projectCategory table te plaatsen. Deze moet vervolgens wel de juiste ProjectId krijgen.
Graag volgende keren bij alle codes de [code]-tags gebruiken.[/modedit]
Toevoeging op 25/06/2013 09:59:11:
@Nick, ik zal er aan denken :)
Gewijzigd op 25/06/2013 09:31:04 door Nick Dijkstra
Kun jij me vertellen waarom niet :-)
Nicolai, een duidelijke vraag, wat wel lukt wat niet, fout melding, en evt. waar je denkt dat er, nog, iets, niet klopt......
dat verhoogt de kans op een reactie, op een oplossing aanzienlijk !!
Notice: Array to string conversion in C:\xampp\htdocs\nicolaisattler.nl\insert.php on line 38
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1
Het lukt mij wel om 1 waarden in de tabel in te voeren. Maar zodra ik meerdere categorieën selecteer is het resultaat "Array". Dit is natuurlijk niet de bedoeling. Ik wil dat deze twee waardens beide een eigen rij krijgen. Ben al de hele ochtend bezig om dit uit te vogelen, maar nog geen resultaat.
Ik denk dat er een loop nodig is die van elke waarde uit de array een INSERT query uitvoert, dit weet ik dus niet zeker. Excuses voor het feit dat ik wellicht wat onduidelijk ben, ik ben namelijk nog een beginnen in het programmeren dus ik weet zeker de juiste manier is.
wat je eigenlijk gewoon altijd moet doen (bij new stukje code)
is:
echo $projectCategory;
goede gewoonte echo de query
hoevaak zie je niet in 1 oog opslag de fout.
.... en zie het nog niet dan kun die query hier even laten zien !!
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
$Insert_Info="INSERT INTO projects (Title, Img, Description) VALUES('$_POST[projectname]','$_POST[image]','$_POST[content]')";
$PROJECT_ID = mysql_insert_id();
$Project_Category = $_POST['category'];
echo $Project_Category;
if(empty($Project_Category)){
echo("Je hebt geen categorie geselecteerd.");
}else{
$n = count($Project_Category);
for($i=0; $i < $n; $i++){
echo($Project_Category[$i]. " ");
}
}
$Insert_Category="INSERT INTO projectcategory (Project_Category) VALUES('$_POST[category]')";
echo $Insert_Category;
if(!mysql_query($Insert_Info || $Insert_Category)){
die('Error: ' . mysql_error());
}
//sluit connectie met database
mysql_close($db);
if($Insert_Info){
header("location:index_cms.php");
}
$PROJECT_ID = mysql_insert_id();
$Project_Category = $_POST['category'];
echo $Project_Category;
if(empty($Project_Category)){
echo("Je hebt geen categorie geselecteerd.");
}else{
$n = count($Project_Category);
for($i=0; $i < $n; $i++){
echo($Project_Category[$i]. " ");
}
}
$Insert_Category="INSERT INTO projectcategory (Project_Category) VALUES('$_POST[category]')";
echo $Insert_Category;
if(!mysql_query($Insert_Info || $Insert_Category)){
die('Error: ' . mysql_error());
}
//sluit connectie met database
mysql_close($db);
if($Insert_Info){
header("location:index_cms.php");
}
Als ik dan even een aantal dingen echo resulteert dit in het volgende:
------
design development cms
Notice: Array to string conversion in C:\xampp\htdocs\nicolaisattler.nl\insert.php on line 38
INSERT INTO projectcategory (Project_Category) VALUES('Array')
Notice: Array to string conversion in C:\xampp\htdocs\nicolaisattler.nl\insert.php on line 4
------
De Array word dus wel gevuld, maar deze word momenteel nog niet goed uitgelezen? Ik weet niet helemaal wat ik hier fout doe
Maar je doet wel dit:
$n = count($category);
for($i=0; $i < $n; $i++){
Om alle resultaten te ZIEN
dus (afhankelijk van je dB moet miscchine ook een lus maken en met meerdere query al die waarden te Inserten ! ?
Ik ben alweer wat verder gekomen, het heeft even geduurd maar ik denk dat ik er bijna ben.
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<html>
<div id="wrapper_content">
<form id="upload_form" action="project.php" method="POST" enctype="multipart/form-data">
<label>
<span class="label">Upload Image: </span><br>
<input type="file" name="fileup" id="fileup" />
<button class="button" type="submit" id="upload">Upload</button>
</label>
</form>
<?php
/*Door in een foreach te inserten, loop door de array heen en insert elke keer als je 'n value tegen komt
Op die manier zul je dus 2 inserts krijgen. Development en CMS Als strings(Varchars in je DB)*/
$Insert_Info="INSERT INTO projects (Title, Img, Description) VALUES('$_POST[projectname]','$_POST[image]','$_POST[content]')";
//check of de checkboxes aangevinkt zijn.
function IsChecked($chkname,$value)
{
if(!empty($_POST[$chkname]))
{
foreach($_POST[$chkname] as $chkval)
{
if($chkval == $value)
{
return true;
}
}
}
return false;
}
$Project_Id = mysql_insert_id();
$Category_Id = $_POST['category'];
$categories = '';
$categories = rtrim($categories, ',');
if(isset($_POST['category'])){
foreach($Category_Id as &$category){
$categories .="('$Project_Id','$category')";
}
}
function Insert_Category(){
//Het benaderen van een variable buiten de functie
global $categories;
mysql_query( "INSERT INTO category_by_project(PROJECT_ID, CATEGORY_ID) VALUES $categories");
}
//Als het formulier gesubmit word, dan word Insert_Category uitgevoerd.
if(isset($_POST['submit'])) {
Insert_Category();
}
if(!mysql_query($Insert_Info)){
die('Error: ' . mysql_error());
}
?>
<form id="content_form" action="project.php" method="post">
<label>
<span class="label">Projectname: </span>
<input class="style_input" type="text" name="projectname" id="projectname" />
</label>
<label>
<span class="label">Description: </span><br>
<textarea name="content" id="content" ></textarea>
</label>
<label>
<span class="label">Image: </span><br>
<input class="style_input" type="text" name="image" id="image" value="<?php echo $upload_path ?>" />
</label>
<span id="span_cat" class="label">Category: </span><br><br>
<?php
$sql = "SELECT * FROM category";
$resultaat = mysql_query($sql);
while ($rij = mysql_fetch_array($resultaat, MYSQL_ASSOC)) {
echo"<input id='". $rij["Name"] . "' class='css-checkbox' type='checkbox' name='category[]' value='". $rij["CATEGORY_ID"] . "'>";
echo"<label for='". $rij["Name"] . "' class='css-label'>". $rij["Name"] ."</label>";
}
?>
<button type="submit" class="button" name="submit">Submit</button>
</form>
</div>
</body>
</html>
<div id="wrapper_content">
<form id="upload_form" action="project.php" method="POST" enctype="multipart/form-data">
<label>
<span class="label">Upload Image: </span><br>
<input type="file" name="fileup" id="fileup" />
<button class="button" type="submit" id="upload">Upload</button>
</label>
</form>
<?php
/*Door in een foreach te inserten, loop door de array heen en insert elke keer als je 'n value tegen komt
Op die manier zul je dus 2 inserts krijgen. Development en CMS Als strings(Varchars in je DB)*/
$Insert_Info="INSERT INTO projects (Title, Img, Description) VALUES('$_POST[projectname]','$_POST[image]','$_POST[content]')";
//check of de checkboxes aangevinkt zijn.
function IsChecked($chkname,$value)
{
if(!empty($_POST[$chkname]))
{
foreach($_POST[$chkname] as $chkval)
{
if($chkval == $value)
{
return true;
}
}
}
return false;
}
$Project_Id = mysql_insert_id();
$Category_Id = $_POST['category'];
$categories = '';
$categories = rtrim($categories, ',');
if(isset($_POST['category'])){
foreach($Category_Id as &$category){
$categories .="('$Project_Id','$category')";
}
}
function Insert_Category(){
//Het benaderen van een variable buiten de functie
global $categories;
mysql_query( "INSERT INTO category_by_project(PROJECT_ID, CATEGORY_ID) VALUES $categories");
}
//Als het formulier gesubmit word, dan word Insert_Category uitgevoerd.
if(isset($_POST['submit'])) {
Insert_Category();
}
if(!mysql_query($Insert_Info)){
die('Error: ' . mysql_error());
}
?>
<form id="content_form" action="project.php" method="post">
<label>
<span class="label">Projectname: </span>
<input class="style_input" type="text" name="projectname" id="projectname" />
</label>
<label>
<span class="label">Description: </span><br>
<textarea name="content" id="content" ></textarea>
</label>
<label>
<span class="label">Image: </span><br>
<input class="style_input" type="text" name="image" id="image" value="<?php echo $upload_path ?>" />
</label>
<span id="span_cat" class="label">Category: </span><br><br>
<?php
$sql = "SELECT * FROM category";
$resultaat = mysql_query($sql);
while ($rij = mysql_fetch_array($resultaat, MYSQL_ASSOC)) {
echo"<input id='". $rij["Name"] . "' class='css-checkbox' type='checkbox' name='category[]' value='". $rij["CATEGORY_ID"] . "'>";
echo"<label for='". $rij["Name"] . "' class='css-label'>". $rij["Name"] ."</label>";
}
?>
<button type="submit" class="button" name="submit">Submit</button>
</form>
</div>
</body>
</html>
Momenteel kan ik in zowel de tabel Project als in de tabel Category_By_Id data invoegen. De bedoeling van die foreach loop is dat hij voor elke ingevoerde waardes van mij checkbox array een regel toevoegt aan Category_By_Id met die specifieke waardes.
Er gaat nu dus iets mis bij het kijken of er meerder checkboxes geselecteerd zijn. Ik ben er alleen nog niet achter hoe ik dit precies aan moet pakken.