array komt niet aan bij de database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jurgen B

Jurgen B

10/03/2008 10:20:00
Quote Anchor link
Dag mensen,

Ik heb een script opgesteld waarmee ik een portfolio item in de database kan plaatsen. Nu komt het formulier wel aan, maar de array gegevens worden niet verstuurd. In de database komt in die kolom ook te staan 'array'. Hoe kan ik dat goed doen?

Dit zijn de scripts die ik momenteel heb.
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Mijn eerste php formulier!</title>
</head>

<body>
    <form action="verstuur_portfolio.php" method="post">
    <p>
        <label for="titel">Titel:</label>
        <input type="text" name="titel" id="titel" size="50" />
    </p>
    <p>
        <label for="opdrachtgever">Opdrachtgever:</label>
        <input type="text" name="opdrachtgever" id="opdrachtgever" />
    </p>
    <p>
        <label for="website">Website:</label>
        <input type="text" name="website" id="website" />
    </p>
    <p>
        <label for="jaar">Jaar:</label>
        <input type="text" name="jaar" id="jaar" />
    </p>
    <p>
        <input type="checkbox" name="technieken[]" value="pro.cms" />Pro.CMS <br />
        <input type="checkbox" name="technieken[]" value="seo" />SEO <br />
        <input type="checkbox" name="technieken[]" value="webshop" />Webshop <br />
        <input type="checkbox" name="technieken[]" value="clickstream" />Clickstream <br />
        <input type="checkbox" name="technieken[]" value="usability" />Usability    <br />
    </p>
    <p>
        <input type="checkbox" name="categorie[]" value="websites" />websites <br />
        <input type="checkbox" name="categorie[]" value="vindbaarheid" />Vindbaarheid <br />
        <input type="checkbox" name="categorie[]" value="hosting" />Hosting <br />
        <input type="checkbox" name="categorie[]" value="webshop" />Webshop <br />
        <input type="checkbox" name="categorie[]" value="clickstream" />Clicksteam <br />
        <input type="checkbox" name="categorie[]" value="usability" />Usability <br />
        <input type="checkbox" name="categorie[]" value="huisstijlontwerp" />Huisstijlontwerp <br />
        <input type="checkbox" name="categorie[]" value="visitekaarjtes" />Visitekaartjes <br />
        <input type="checkbox" name="categorie[]" value="brochures" />Brochures <br />
        <input type="checkbox" name="categorie[]" value="briefpapier" />Briefpapier <br />        
    </p>
    <p>
        <label for="omschrijving">Omschrijving:</label>
        <textarea name="omschrijving" rows="4" cols="50"></textarea>
    </p>
    <p>
        <input type="submit" value="Verzenden"/>
    </p>
    </form>
</body>
</html>


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
86
87
88
89
90
91
92
93
<?php
include 'db_connect.php';

/**
 * @author Jurgen
 * @copyright 2008
 * @company Prodes
 */

/** Controleerd of een formulier gepost is */

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    /** Array declaren voor opslag van fouten en data*/
    $aErrors = array();
    $aData = array();
    
    /** Velden die in het formulier aanwezig moeten zin */
    $aFormulierVelden = array('titel', 'opdrachtgever', 'website', 'jaar', 'technieken', 'categorie', 'omschrijving');
    
    /** alle formuliervelden doorlopen */
    foreach($aFormulierVelden as $sVeld)
    {

        /** Controleren of er een waarde voor het formulierveld bestaat */
        if(isset($_POST[$sVeld]))
        {

            /** Spaties aan begin en eind weghalen */
            $sValue = trim($_POST[$sVeld]);
            
            /** controleren of een variabele/veld gevuld is */
            if(empty($sValue))
            {

                /** foutmelding toevoegen */
                $aErrors[] = 'Je bent vergeten om je '.$sVeld.' in te vullen';
            }

            
            /** Ingevulde waarden aan data array toevoegen */
            $aData[$sVeld] = $sValue;
        }

        else
        {
            $aErrors[] = 'Het veld '.$sVeld.' kon niet verstuurd worden.';
        }
    }

    /** Controleren of er geen founten zijn opgetreden */
    if(empty($aErrors))
    {

        $sql = "
        INSERT INTO portfolio (
            titel,
            opdrachtgever,
            website,
            jaar,
            technieken,
            categorie,
            omschrijving
            )
        VALUES (
            '"
.$aData['titel']."',
            '"
.$aData['opdrachtgever']."',
            '"
.$aData['website']."',
            '"
.$aData['jaar']."',
            '"
.$aData['technieken']."',
            '"
.$aData['categorie']."',
            '"
.$aData['omschrijving']."'
            )
        "
;

        if(!$res = mysql_query($sql))
        {

            trigger_error(mysql_error(). '<br />In query:' .$sql);
        }

        else
        {
        $id = mysql_insert_id();
        }
    }

    else
    {
        /** Fouten opgetreden: weergeven en terug naar het formulier */
        header('Refresh: 3; url=portfolio_toevoegen.php');
        foreach($aErrors as $sError)
        {

            echo '<p style="color:red">'.$sError.'</p>';
        }
    }
}

else
{
    /** Verwerk.php mag nog niet bezocht worden, terug naar het formulier */
    header('Location: portfolio_toevoegen.php');
}


?>



LET OP: technieken en categorie kunnen meerdere types zijn.
 
PHP hulp

PHP hulp

26/11/2020 20:05:13
 
Gerben Jacobs

Gerben Jacobs

10/03/2008 10:30:00
Quote Anchor link
In welke kolom komt Array te staan?
 
Frank -

Frank -

10/03/2008 10:37:00
Quote Anchor link
Quote:
In de database komt in die kolom ook te staan 'array'. Hoe kan ik dat goed doen?
De array's technieken en categorie zul je met een aparte foreach-lus moeten uitlezen, dat sla je nu in zijn geheel over.

Daarnaast zul je deze gegevens in een aparte (koppel-) tabel moeten opslaan, dit wil je echt niet in dezelfde tabel hebben als de andere gegevens. Je zult dus meerdere INSERT-queries moeten uitvoeren, voor iedere categorie en voor iedere techniek een aparte query.
 
Jurgen B

Jurgen B

10/03/2008 12:47:00
Quote Anchor link
@Gerben Jacobs: In de kolom technieken & categorie
 
Frank -

Frank -

10/03/2008 13:22:00
Quote Anchor link
Jurgen B schreef op 10.03.2008 12:47:
@Gerben Jacobs: In de kolom technieken & categorie
Die kolommen kun je verwijderen, dat scheelt weer.

Zoals reeds gezegd, schrijf de data weg in een aparte (koppel-) tabel.
 
Jurgen B

Jurgen B

10/03/2008 15:02:00
Quote Anchor link
Dag pgFrank,

Ik heb al wel een tabel categorie en die kan ik ook wel koppelen doormiddel van een foreign key, maar ik heb net mn tutorial klaar en weet dus nog niet hoe ik 2 foreign keys aan een tabel kan hangen. Ik krijg dan namelijk een foutmelding en ik zou ook echt (nog) niet weten hoe ik data naar meerdere tabellen moet sturen! En hoe de uitkomst van een array te versturen naar een database is me ook nog een raadsel om heel eerlijk te zijn :$
 
Frank -

Frank -

10/03/2008 15:06:00
Quote Anchor link
Quote:
een foutmelding

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
  *
FROM
  glazen_bol
WHERE
  username = 'Jurgen B'
AND
  subject = 'foreign key'
AND
  foutmelding = 'een foutmelding'

...
 
Jurgen B

Jurgen B

10/03/2008 15:18:00
Quote Anchor link
Maar dat is voor de select.

Niet voor de insert into. Ik zou zeggen:

$sql = "
INSERT INTO (
p.titel,
p.opdrachtgever,
p.website,
p.jaar,
t.technieken,
c.categorie,
p.omschrijving
FROM
portfolio AS p
INNER JOIN
categorie AS c
ON c.id = p.categorie_id
INNER JOIN
techniek AS t
ON t.id = p.techniek_id
)
VALUES (
'".$aData['p.titel']."',
'".$aData['p.opdrachtgever']."',
'".$aData['p.website']."',
'".$aData['p.jaar']."',
'".$aData['t.technieken']."',
'".$aData['c.categorie']."',
'".$aData['p.omschrijving']."'
)
";

Klopt dat?
Gewijzigd op 01/01/1970 01:00:00 door Jurgen B
 
Michael Voeten

Michael Voeten

10/03/2008 15:21:00
Quote Anchor link
heb je al eens geprobeerd zonder de aliasen ?

dus $aData['title'] ip $aData['p.title'] ?
 
Frank -

Frank -

10/03/2008 15:41:00
Quote Anchor link
Nee, dit klopt van geen kanten. Een INSERT INTO met een FROM en een JOIN? Dan zul je al met een SELECT aan de slag moeten, maar die is nergens te vinden.

Daarnaast zul je de array's in $aData['technieken'] en $aData['categorie'] nog apart moeten uitlezen met bv. een foreach, dat doe je hier helemaal nergens. Er klopt echt maar weinig van je huidige opzet.

Je hebt 3 tabellen: portfolio, categorie en techniek. Dat duidt op een meer-op-meer relaties, 1 portfolio kan meerdere technieken bevatten en meerdere technieken kunnen bij meerdere portfolios horen. Idem voor de categorieen. Daar missen dus 2 tabellen, je hebt dan 2 koppeltabellen nodig:
portfolio_categorie en portfolio_techniek. En dat zijn de tabellen waarin je de gekozen categorieen en gekozen technieken in weg moet schrijven. Aparte tabellen, dus ook aparte queries!

Om een idee te geven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
INSERT INTO portfolio() VALUES();
INSERT INTO portfolio_categorie() VALUES();
INSERT INTO portfolio_categorie() VALUES();
INSERT INTO portfolio_categorie() VALUES();
INSERT INTO portfolio_techniek() VALUES();
INSERT INTO portfolio_techniek() VALUES();

Nu maak je 1 portfolio aan met 3 categorieen en 2 technieken. De details mag je verder zelf even uitvogelen, maar je hebt nog wel wat meer SQL nodig om e.e.a. veilig uit te kunnen voeren. Het gebruik van een transaction ligt ook voor de hand, er kan namelijk een hoop fout gaan. Maar om dan direct met een corrupte database opgescheept te zitten, dat is ook weer wat overdreven, een transaction beschermt je daartegen.
 
Jurgen B

Jurgen B

10/03/2008 15:46:00
Quote Anchor link
hmm .. ik vrees dat ik er er dus niet uit ga komen. Dit is waarschijnlijk te hoog gegrepen voor mij.

Heeft iemand een uitleg over hoe de uitkomst van een array naar de database verstuurd kan worden?
 
Frank -

Frank -

10/03/2008 15:49:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$array
= array('aap', 'noot', 'mies');

foreach ($array AS $value){
    $query = "INSERT INTO tabel(kolomnaam) VALUES('".$value."');";
    //uitvoeren query, etc. etc.
    echo $query.PHP_EOL;
}

?>
 



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.