HTML checkboxes en PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nicolai Sattler

Nicolai Sattler

25/06/2013 08:05:35
Quote Anchor link
Goede morgen allemaal,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>

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)
PHP script in nieuw venster Selecteer het PHP script
1
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());
}

?>

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
 
PHP hulp

PHP hulp

26/04/2024 09:45:30
 
- Roland -

- Roland -

25/06/2013 10:37:55
Quote Anchor link
Het lukt mij niet om auto te rijden !

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 !!
 
Nicolai Sattler

Nicolai Sattler

25/06/2013 11:15:11
Quote Anchor link
Inderdaad, wat stom van me dat ik de errormessage niet toe gevoegd heb. Bij deze:

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.
 
- Roland -

- Roland -

25/06/2013 12:03:26
Quote Anchor link
Ok,

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 !!
 
Nicolai Sattler

Nicolai Sattler

25/06/2013 12:21:55
Quote Anchor link
Dit is in principe m'n query om die projecten toe te voegen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
$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");
}


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
 
- Roland -

- Roland -

25/06/2013 12:31:38
Quote Anchor link
ik zie geen regel 38

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 ! ?
 
Nicolai Sattler

Nicolai Sattler

26/06/2013 13:43:48
Quote Anchor link
Bedankt voor je advies Roland :)

Ik ben alweer wat verder gekomen, het heeft even geduurd maar ik denk dat ik er bijna ben.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.