Waardes uit form halen en in database plaatsen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marijke Hakvoort

Marijke Hakvoort

30/01/2012 09:46:40
Quote Anchor link
Hallo,

Ik heb een functie waarna ik een aantal waardes wil weergeven op een andere pagina, en vervolgens in de database wil plaatsen. Nu loop ik even vast hoe ik dit in dit geval moet aanpakken.

Mijn functie:

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
<?php
function getDiscount($client){
    $dbid = "SELECT
                tbl_customers.id as id
            FROM
                tbl_customers
            WHERE
                tbl_customers.name LIKE \"%$client%\"
                "
;
    $resultat = mysql_query($dbid) or die ( mysql_error());
        while ($line = mysql_fetch_array($resultat)){  
            $id = $line['id'];
        }

        
    
    $query = "SELECT tbl_customers.name as client,
                    tbl_administrations.id as idadmin,
                    tbl_administrations.name as admin
                    FROM tbl_customers,
                    tbl_administrations
                    WHERE
                    tbl_customers.id = "
. (int)$id . " AND
            tbl_administrations.id_customer = "
. (int)$id;
    $result = mysql_query($query);

    if(false === $result) {
      trigger_error('query fout: ' . mysql_error(), E_USER_ERROR);
    }


    
    
    if(mysql_num_rows($result) > 0) {
        echo "<table>";
        echo "<form action=handler.php method=post>";
        while ($row = mysql_fetch_array($result)){
            $_SESSION['client'] =  $row['client'];
            $idadmin[] =  $row['idadmin'] ."<br>";
            
            echo"        <tr>
                        <td colspan=2>"
;
            echo "<b>".$row['admin'] ."</b>";
            echo "</td>
                    <tr>"
;
            echo "<td><i>Module</i></td><td><i>Korting</i></td>";
            
            echo "</tr>";
            
            $modules = "SELECT
            tbl_kortingen.titel as titel,
            tbl_kortingen.bedrag as prijs,
            tbl_kortingen.id_module as kortingid
            FROM
            tbl_kortingen
            WHERE tbl_kortingen.id_administration IN('"
. implode("','", $idadmin) . "')
            GROUP BY tbl_kortingen.titel"
;
            
            
            
            
            
        $results = mysql_query($modules);
            while ($rows = mysql_fetch_array($results)){
                $_SESSION['kortingid[]'] = $row['kortingid'];
                
                
                    echo "<tr><td>".$rows['titel'] ."</td><td> <input type=text name=idmodule[] id=".$rows['kortingid']." value=".$rows['kortingid']."></td></tr>";
                    
            }
            
            
        }

        echo "<tr><td colspan=2><input type=submit name=submit value=submit></form></td></tr></table>";
        
        
     }


?>


Nu wil ik graag de modules in een andere tabel plaatsen gesorteerd op admin. Dit kan met implode dacht ik, alleen krijg ik dan eenmaal de admin, eenmaal de client en vervolgens lege records bij de overige modules.

Toevoeging op 30/01/2012 11:30:53:

Ondertussen alweer wat verder:

Nu heb ik dus meerdere arrays, en deze wil ik in de database plaatsen, maar hij gooit alle resultaten in 1 record, iemand een idee hoe ik dit kan aanpassen?
 
PHP hulp

PHP hulp

25/12/2024 05:24:21
 
Reshad F

Reshad F

30/01/2012 12:10:52
Quote Anchor link
als je een stukje code plaatst van de arrays etc .. dan is het misschien duidelijker wat je doet :)
 
Jaron T

Jaron T

30/01/2012 12:15:30
Quote Anchor link
je moet door de array heen lopen, dit kan je doen met: nl.php.net/foreach
 
Marijke Hakvoort

Marijke Hakvoort

30/01/2012 12:27:10
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$idmodule
= $_POST['idmodule'];
     print_r($idmodule);
    

foreach ($idmodule as $key => $value){
    $query =  "INSERT INTO
                tbl_kortingen (id_module)
            VALUES ($value)"
or die (mysql_error());
            $putin = mysql_query($query);
echo "Dingen toegevoegd!";

?>


Dus dan doe ik het via deze manier nu goed?
Ik heb meerdere arrays met verschillende dingen, is het mogelijk om dit binnen 1 foreach te doen of zou ik dit met meerdere foreach moeten doen?
 
Reshad F

Reshad F

30/01/2012 12:36:04
Quote Anchor link
ten eerste zou ik geen or die gebruiken maar een correcte afhandeling, en ten tweede kan je voor de meerdere arrays
array_merge gebruiken dan combineer je alle arrays in een enkele array en dan kan je die door de foreach halen
 
Erwin H

Erwin H

30/01/2012 13:52:03
Quote Anchor link
Je kan met een insert statement meerdere records tegelijk invoegen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
INSERT INTO
  tabelnaam (veld1, veld2, veld3)
VALUES
  ('veld1_waarde1', 'veld2_waarde1', 'veld3_waarde1'),
  ('veld1_waarde2', 'veld2_waarde2', 'veld3_waarde2'),
  ('veld1_waarde3', 'veld2_waarde3', 'veld3_waarde3'),
  ('veld1_waarde4', 'veld2_waarde4', 'veld3_waarde4');

Scheelt je een aantal queries.
 
Marijke Hakvoort

Marijke Hakvoort

30/01/2012 14:09:03
Quote Anchor link
OK, maar ik heb een array met ID's , een array met modules, en een array met administraties.

Dan zou ik dus zoiets krijgen?

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
<?php
$idmodule
= $_POST['idmodule'];
$client = $_POST['client'];
$afrekening = $_POST['afrekening'];
$adminid = $_POST['idadmin'];

foreach ($array as $key => $value){
    $query =  "INSERT INTO
                tbl_kortingen (id_module, id_customer, id_administration, betaling)
            VALUES ($idmodule, $client, $adminid, $afrekening)"
;
            $putin = mysql_query($query);
echo "Dingen toegevoegd!";

?>


Of denk ik nu verkeerd?
 
Pieter Jansen

Pieter Jansen

30/01/2012 14:16:28
Quote Anchor link
Ik snap helaas niet wat je precies wil bereiken met je laatste post Marijke. Je lust nu door je $array heen maar je gebruikt hier verder niets uit je rijen in je array. Het enige wat je nu doet is N keren door je $array loopen, een insert doen en verder niets.

Daarnaast wil ik je wijzen op de $putin = mysql_query($query); Zoals aangegeven was de or die(); niet netjes, maar nu weet je nog steeds niet of er ook daadwerkelijk een rij in je database wordt toegevoegd. De meest simpele methode die ik gebruik is kijken of zowel $putin true is en mysql_insert_id(); groter is dan 0. Oftewel:

if($putin and mysql_insert_id() > 0) { /* doe de rest */ }

Kom ik toch even terug op je oorspronkelijke vraag, wat wil je precies bereiken? Heb je anders meer code?
 
Marijke Hakvoort

Marijke Hakvoort

30/01/2012 14:23:08
Quote Anchor link
De informatie komt uit een form voor kortingen.
Je kunt aangeven welke administraties korting krijgen. Bij submit worden de gegevens in de database gezet. Dat is zo'n beetje de bedoeling..
 
- SanThe -

- SanThe -

30/01/2012 14:48:51
Quote Anchor link
En hoe weet jij welke gegevens bij elkaar horen in het formulier?
 
Marijke Hakvoort

Marijke Hakvoort

30/01/2012 14:59:37
Quote Anchor link
Hoe bedoel je precies?

Toevoeging op 30/01/2012 15:00:35:

Hij genereert alles zelf, alleen het bedrag kan gewijzigd worden,
daarna moet alle informatie overgeschreven worden naar een andere tabel.
 
- SanThe -

- SanThe -

30/01/2012 15:01:55
Quote Anchor link
Nou, welke administratie hoort bij welke korting?
 
- Mark -

- Mark -

30/01/2012 15:13:21
Quote Anchor link
Er zijn verschillende $_POST vars die uit de lucht komen vallen voor zover ik kan zien. Maar laten we er even van uitgaan dat ze er wel zijn.

LET OP! Onderstaande is zonder formulier afhandeling en dergelijke het dient alleen maar als voorbeeld.

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
<?php

    #| Sleutels ophalen.
    
        $form_keys = array_keys(array_intersect_key(
                                                    
                                                    $_POST['idmodule'],
                                                    $_POST['client'],
                                                    $_POST['idadmin'],
                                                    $_POST['afrekening']
                                                    
                                                    ));

        
        
    #| Controleren of we wel wat gevonden hebben.
    
        if(count($form_keys) > 0){
    
        /*---- INFO: Ja, we hebben gegevens die opgeslagen moeten worden. ----*/

        #| Set array $values voor het opslaan van alle rijen met informatie.

        
            $values = array();
    
    
        #| Alle sleutels 1 voor 1 aflopen.
        
            foreach($form_keys as $key){
            
            #| Gegevens per rij samenvoegen.
            
                $values[] = "(
                              
                              "
.$_POST['idmodule'][$key].",
                              "
.$_POST['client'][$key].",
                              "
.$_POST['idadmin'][$key].",
                              "
.$_POST['afrekening'][$key]."
                              
                              )"
;
                
            }

    
    
        #| De gehele handel samenstellen.
        
            $query = "INSERT INTO tbl_kortingen (id_module, id_customer, id_administration, betaling) VALUES ".implode(',', $values)."";
    
    
        // Hier de rest van je script.
                
        }
        else{
            
            // Er is iets fout gegaan, $form_keys bevat geen sleutels.
        }

?>
 
Reshad F

Reshad F

30/01/2012 16:04:15
Quote Anchor link
als alles al bestaat hoezo in een nieuw tabel voegen? je kan toch beter de bestaande updaten met UPDATE ? lijkt me wel beter anders heb je na een tijdje oneindig veel nieuwe tabellen :p maarja zo zie ik het
 



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.