Waardes uit form halen en in database plaatsen
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)
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
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>";
}
?>
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?
als je een stukje code plaatst van de arrays etc .. dan is het misschien duidelijker wat je doet :)
je moet door de array heen lopen, dit kan je doen met: nl.php.net/foreach
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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!";
?>
$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?
array_merge gebruiken dan combineer je alle arrays in een enkele array en dan kan je die door de foreach halen
Code (php)
1
2
3
4
5
6
7
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');
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.
Dan zou ik dus zoiets krijgen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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!";
?>
$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?
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?
Je kunt aangeven welke administraties korting krijgen. Bij submit worden de gegevens in de database gezet. Dat is zo'n beetje de bedoeling..
En hoe weet jij welke gegevens bij elkaar horen in het formulier?
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.
Nou, welke administratie hoort bij welke korting?
LET OP! Onderstaande is zonder formulier afhandeling en dergelijke het dient alleen maar als voorbeeld.
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
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.
}
?>
#| 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.
}
?>
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