php 2d array waarden naar mysql database
Ik ben nieuw op dit forum en vrij nieuw op gebied van php en mysql. Dit is mijn eerste post!
Voor een economiespel (Kapi-Regnum) probeer ik spelers te helpen door een website op te zetten die de statistieken over tijd weergeeft in grafieken.
Ik heb met code vanaf diverse fora het voor elkaar gekregen dat ik nu via een html textarea form field een hele tabel (gekopieerd van de site) in een 2d array kan zetten. Ik moet de code nog aanpassen naar actuele velden maar de array ziet er ongeveer zo uit:
Array
(
[0] => Array
(
[product] => test
[verkocht] => test
[etc...
)
[1] => Array
(
[product] => test1
[verkocht] => test1
[etc...
)
)
Wat ik nu probeer te doen is het volgende:
Elk product heeft zijn eigen tabel in de database.
elke rij daarvan bevat de gegevens van dat product op een bepaalde datum.
Nu wil ik van elk product de waarden uit de array naar de verschillende tabellen kopieren. Ik heb al tig verschillende methoden gezien op vele fora en zie eigenlijk door het bos de bomen niet meer.
Vraag is of iemand mij op weg kan helpen met hoe ik dit zou moeten doen en hoe de structuur van de code er dan uit zou moeten zien?
alvast bedankt,
Ook namens vele spelers van Kapi Regnum :-)
Beter is om een tabel product aan te maken met alle producten en een tabel productgegevens aan te maken die voor de combinatie van een bepaald product en een datum productgegevens heeft. Dus dat je bijvoorbeeld een rij toevoegt voor product "test1" met datum "16/06/2011". Als je het goed wil doen maak je in de tabel "product" de productnaam de primary key en in de tabel "productgegevens" de combinatie van de productnaam en de datum de primary key maakt. Koppel met een foreign key de productnaam in de tabel "productgegevens" aan de productnaam in de tabel "product". Op die manier kan je in "productgegevens" dus niet een product toevoegen die niet in de "product" tabel staat.
Je kan dan met een loopje door de array gaan en dan in de tabel "productgegevens" elke keer een product toevoegen.
Als je "productgegevens" tabel er zo uit ziet:
Dan kan je gewoon op de volgende manier de array doorlopen:
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
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
<?php
//Transactie hoeft niet maar zorgt ervoor dat als 1 van de queries mislukt ze allemaal ongedaan gemaakt worden.
mysql_query("START TRANSACTION");
//Alleen nodig met transactie.
$insertproblem = false;
//Loop door alle producten.
foreach($producten as $product) {
$result = mysql_query("INSERT INTO productgegevens (productnaam, datum, verkocht) VALUES ('" . mysql_real_escape_string($product['productnaam'] . "', NOW(), '" . mysql_real_escape_string($product['verkocht'] . "');"
if(!$result) {
//Er is iets fout gegaan.
//Geef de fout weer (niet doen in productie omgeving).
echo "Er is iets fout gegaan. Waarschijnlijk bestaat je product niet. De foutmelding is " . mysql_error();
//Zorg dat er zostraks geen COMMIT gedaan wordt.
$insertproblem = true;
//Stop met de inserts.
break;
}
}
if($insertproblem) {
//Er is een query fout gegaan. Rol alles terug.
//Maak alle inserts ongedaan.
mysql_query("ROLLBACK");
} else {
//Alles is goed gegaan.
$mysql_query("COMMIT");
}
?>
//Transactie hoeft niet maar zorgt ervoor dat als 1 van de queries mislukt ze allemaal ongedaan gemaakt worden.
mysql_query("START TRANSACTION");
//Alleen nodig met transactie.
$insertproblem = false;
//Loop door alle producten.
foreach($producten as $product) {
$result = mysql_query("INSERT INTO productgegevens (productnaam, datum, verkocht) VALUES ('" . mysql_real_escape_string($product['productnaam'] . "', NOW(), '" . mysql_real_escape_string($product['verkocht'] . "');"
if(!$result) {
//Er is iets fout gegaan.
//Geef de fout weer (niet doen in productie omgeving).
echo "Er is iets fout gegaan. Waarschijnlijk bestaat je product niet. De foutmelding is " . mysql_error();
//Zorg dat er zostraks geen COMMIT gedaan wordt.
$insertproblem = true;
//Stop met de inserts.
break;
}
}
if($insertproblem) {
//Er is een query fout gegaan. Rol alles terug.
//Maak alle inserts ongedaan.
mysql_query("ROLLBACK");
} else {
//Alles is goed gegaan.
$mysql_query("COMMIT");
}
?>
En klaar is Mark!
Mag ik ten eerst vragen, heb je zelf dat spel gemaakt of is het van iemand anders? (Ik heb er nog nooit van gehoord dus excuus als het wellicht een stomme vraag is). Deze vraag stel ik niet omdat ik je niet wil helpen of zo, maar als elk product een eigen tabel heeft dan is de opzet verre van flexibel en maak je het jezelf alleen maar moeilijker.
Meer logischer zou een opzet als dit zijn:
Tabel Product
- productID
- productnaam
Tabel ProductInstantie
- instantieID
- productID
- verkocht
Maargoed, in een poging je toch te helpen:
Als je met een foreach loop door de array heen loopt, krijg je voor elke keer dat je door de array heen loopt een 'object' als array. In die array staan de gegevens van het object.
Code (php)
In die foreach-lus zul je een check moeten doen welk soort product het is (want elk product ging in een andere tabel zei je?) en vervolgens in de goede tabel inserten met een query. Misschien snap je nu wel dat de opzet van de tabel verre van logisch is. Ook is het heel erg inefficient, want het zou betekenen dat je 100 query's moet uitvoeren als je 100 producten hebt. Als alles in 1 tabel komt, kun je meerdere inserts in 1 query gooien:
Edit: Ik zie dat The Force me net voor is.
Gewijzigd op 16/06/2011 14:05:30 door Erik van de Locht
Super bedankt voor de snelle reactie. Ik heb het idee dat ik met aanpassen en interpreteren het wel ga redden nu. Ook bedankt voor je gedetaileerde script, The Force. Je hebt direct het invoegen van de huidige datum en foutafhandeling makkelijk voor me gemaakt, want dat waren nog zaken waarin ik me moest gaan verdiepen.
Erik, het spel is van iemand anders.
Ik ga later vandaag het verhaal aan het draaien proberen te krijgen, ik laat dan even weten of het gelukt is.
Nogmaals: Bedankt!
@Erik. Je INSERT query is fout en het heeft echt geen voordeel om je database vol met id's te stoppen. Dat maakt je database minder beschrijvend, kost je extra queries en in een aantal gevallen ook extra joins. Daarnaast is het onnodige data en moet je extra constraints maken als je wil dat bijvoorbeeld de productnaam uniek is (wat me vrij logisch lijkt!). Kijk wat in een rij uniek moet zijn en maak dat de primary key. Alleen als je echt geen unieke identificatie hebt (wat vrij uitzonderlijk is) moet je gebruik maken van een id!
Ik ben inmiddels een stuk verder gekomen. Ik heb de array weten uit te breiden zodat alle kolommen er in passen. ziet er nu zo uit:
[4] => Array
(
[product] => Doek
[verkocht] => 1.045.448
[prijs] => 634,92
[nietnodig] => ¢?
[kwaliteit] => 33,27
)
[5] => Array
(
[product] => Dons
[verkocht] => beddengoed
[prijs] => 24.922
[nietnodig] => 1.538,46
[kwaliteit] => ¢?
)
Toch gaat er iets fout zoals je kunt zien en ik weet waarom. Ik deel de rijen nu op adhv spaties. Maar even over het hoofd gezien dat er ook waarden tussen zitten die spaties in zich hebben. het zijn echter altijd spaties tussen (mede)klinkers.
Is er een mogelijkheid om de waarden zo te scheiden dat de productnamen niet van elkaar gescheiden worden, maar de waarden onderling wel?
(ga nu de database aanmaken, Hopelijk gaat het scriptje van The Force dan zijn werk doen. :-) )
Groet,
Mark.
Toevoeging op 17/06/2011 22:21:21:
Goed,
Inmiddels dacht ik klaar te zijn. Helaas...
Ik heb de database opgezet met de structuur en keys zoals The Force dat voorstelde.
Ik heb heel het script klaar en toch gaat er iets fout:
Parse error: syntax error, unexpected T_IF in /www/submitform.php on line 49
Ga nu proberen de code erin te zetten:
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
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
<?php
session_start();
$db = mysql_connect("localhost", "db", "pass") or die("Could not connect.");
if(!$db)
die("no db");
if(!mysql_select_db("db",$db))
die("No database selected.");
if (isset($_POST['text'])) {
// get rid of whitespace...also, since not all OS use \r
// but everyone has \n in it, let's get rid of the \r
$text = str_replace("\r", '', trim($_POST['text']));
// now that you have your raw text
// we need an array to store the data
$data = array();
// split line by line
$lines = explode("\n", $text);
foreach ($lines as $line) {
// split the data by a colon
$parts = explode(' ', $line);
// set all data into one two dimensional array
$data[] = array('product' => $parts[0], 'verkocht' => $parts[1], 'prijs' => $parts[2], 'nietnodig' => $parts[3], 'kwaliteit' => $parts[4]);
}
//echo '<pre>';
//print_r($data);
//echo '</pre>';
//exit;
//}
//Transactie hoeft niet maar zorgt ervoor dat als 1 van de queries mislukt ze allemaal ongedaan gemaakt worden.
mysql_query("START TRANSACTION");
//Alleen nodig met transactie.
$insertproblem = false;
//Loop door alle producten.
foreach($producten as $product) {
$result = mysql_query("INSERT INTO kap_productgegevens (datum, product, verkocht, prijs, kwaliteit) VALUES (NOW(), '" . mysql_real_escape_string($product['product'] . "', '" . mysql_real_escape_string($product['verkocht'] . "', '" . mysql_real_escape_string($product['prijs'] . "', '" . mysql_real_escape_string($product['kwaliteit'] . "');"
if(!$result) {
//Er is iets fout gegaan.
//Geef de fout weer (niet doen in productie omgeving).
echo "Er is iets fout gegaan. Waarschijnlijk bestaat je product niet. De foutmelding is " . mysql_error();
//Zorg dat er zostraks geen COMMIT gedaan wordt.
$insertproblem = true;
//Stop met de inserts.
break;
}
}
if($insertproblem) {
//Er is een query fout gegaan. Rol alles terug.
//Maak alle inserts ongedaan.
mysql_query("ROLLBACK");
} else {
//Alles is goed gegaan.
$mysql_query("COMMIT");
}
mysql_close($db);
?>
<html>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<input type="submit" value="Submit" /><br>
<textarea cols="75" rows="61" name="text"></textarea><br />
</form>
</body>
</html>
session_start();
$db = mysql_connect("localhost", "db", "pass") or die("Could not connect.");
if(!$db)
die("no db");
if(!mysql_select_db("db",$db))
die("No database selected.");
if (isset($_POST['text'])) {
// get rid of whitespace...also, since not all OS use \r
// but everyone has \n in it, let's get rid of the \r
$text = str_replace("\r", '', trim($_POST['text']));
// now that you have your raw text
// we need an array to store the data
$data = array();
// split line by line
$lines = explode("\n", $text);
foreach ($lines as $line) {
// split the data by a colon
$parts = explode(' ', $line);
// set all data into one two dimensional array
$data[] = array('product' => $parts[0], 'verkocht' => $parts[1], 'prijs' => $parts[2], 'nietnodig' => $parts[3], 'kwaliteit' => $parts[4]);
}
//echo '<pre>';
//print_r($data);
//echo '</pre>';
//exit;
//}
//Transactie hoeft niet maar zorgt ervoor dat als 1 van de queries mislukt ze allemaal ongedaan gemaakt worden.
mysql_query("START TRANSACTION");
//Alleen nodig met transactie.
$insertproblem = false;
//Loop door alle producten.
foreach($producten as $product) {
$result = mysql_query("INSERT INTO kap_productgegevens (datum, product, verkocht, prijs, kwaliteit) VALUES (NOW(), '" . mysql_real_escape_string($product['product'] . "', '" . mysql_real_escape_string($product['verkocht'] . "', '" . mysql_real_escape_string($product['prijs'] . "', '" . mysql_real_escape_string($product['kwaliteit'] . "');"
if(!$result) {
//Er is iets fout gegaan.
//Geef de fout weer (niet doen in productie omgeving).
echo "Er is iets fout gegaan. Waarschijnlijk bestaat je product niet. De foutmelding is " . mysql_error();
//Zorg dat er zostraks geen COMMIT gedaan wordt.
$insertproblem = true;
//Stop met de inserts.
break;
}
}
if($insertproblem) {
//Er is een query fout gegaan. Rol alles terug.
//Maak alle inserts ongedaan.
mysql_query("ROLLBACK");
} else {
//Alles is goed gegaan.
$mysql_query("COMMIT");
}
mysql_close($db);
?>
<html>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<input type="submit" value="Submit" /><br>
<textarea cols="75" rows="61" name="text"></textarea><br />
</form>
</body>
</html>
Ik heb de code al een paar keer na gelopen en zover ik er verstand van heeft lijkt het te kloppen. Wat gaat er fout? zou iemand daar naar willen kijken?
Gewijzigd op 17/06/2011 22:25:41 door Mark van Dijk
Parse error: parse error, unexpected T_IF
Als iemand daar naar wil kijken ben ik eruit.
lijn 47 ga je de mist in op het eind de ; valt binnen je accolades
krijg nu foutcode:
Parse error: syntax error, unexpected T_IF on line 36
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
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
<?php
if (isset($_POST['text'])) {
// get rid of whitespace...also, since not all OS use \r
// but everyone has \n in it, let's get rid of the \r
$text = str_replace("\r", '', trim($_POST['text']));
// now that you have your raw text
// we need an array to store the data
$data = array();
// split line by line
$lines = explode("\n", $text);
foreach ($lines as $line) {
// split the data by a colon
$parts = explode("\t", $line);
$valuta = explode(' ', $parts[2]);
// set all data into one two dimensional array
$data[] = array('product' => $parts[0], 'verkocht' => $parts[1], 'prijs' => $valuta[0], 'kwaliteit' => $parts[3]);
}
//MySQL Database Connect
include 'connect.php';
//Transactie hoeft niet maar zorgt ervoor dat als 1 van de queries mislukt ze allemaal ongedaan gemaakt worden.
mysql_query("START TRANSACTION");
//Alleen nodig met transactie.
$insertproblem = false;
//Loop door alle producten.
foreach($producten as $product) {
$result = mysql_query("INSERT INTO kap_productgegevens (datum, product, verkocht, prijs, kwaliteit) VALUES (NOW(), '" . mysql_real_escape_string($product['product'] . "', '" . mysql_real_escape_string($product['verkocht'] . "', '" . mysql_real_escape_string($product['prijs'] . "', '" . mysql_real_escape_string($product['kwaliteit'] . "')")
if (!$result) {
//Er is iets fout gegaan.
//Geef de fout weer (niet doen in productie omgeving).
echo "Er is iets fout gegaan. Waarschijnlijk bestaat je product niet. De foutmelding is " . mysql_error();
//Zorg dat er zostraks geen COMMIT gedaan wordt.
$insertproblem = true;
//Stop met de inserts.
break;
}
if($insertproblem) {
//Er is een query fout gegaan. Rol alles terug.
//Maak alle inserts ongedaan.
mysql_query("ROLLBACK");
} else {
//Alles is goed gegaan.
$mysql_query("COMMIT");
}
mysql_close($db);
//echo '<pre>';
//print_r($data);
//echo '</pre>';
//exit;
}
?>
if (isset($_POST['text'])) {
// get rid of whitespace...also, since not all OS use \r
// but everyone has \n in it, let's get rid of the \r
$text = str_replace("\r", '', trim($_POST['text']));
// now that you have your raw text
// we need an array to store the data
$data = array();
// split line by line
$lines = explode("\n", $text);
foreach ($lines as $line) {
// split the data by a colon
$parts = explode("\t", $line);
$valuta = explode(' ', $parts[2]);
// set all data into one two dimensional array
$data[] = array('product' => $parts[0], 'verkocht' => $parts[1], 'prijs' => $valuta[0], 'kwaliteit' => $parts[3]);
}
//MySQL Database Connect
include 'connect.php';
//Transactie hoeft niet maar zorgt ervoor dat als 1 van de queries mislukt ze allemaal ongedaan gemaakt worden.
mysql_query("START TRANSACTION");
//Alleen nodig met transactie.
$insertproblem = false;
//Loop door alle producten.
foreach($producten as $product) {
$result = mysql_query("INSERT INTO kap_productgegevens (datum, product, verkocht, prijs, kwaliteit) VALUES (NOW(), '" . mysql_real_escape_string($product['product'] . "', '" . mysql_real_escape_string($product['verkocht'] . "', '" . mysql_real_escape_string($product['prijs'] . "', '" . mysql_real_escape_string($product['kwaliteit'] . "')")
if (!$result) {
//Er is iets fout gegaan.
//Geef de fout weer (niet doen in productie omgeving).
echo "Er is iets fout gegaan. Waarschijnlijk bestaat je product niet. De foutmelding is " . mysql_error();
//Zorg dat er zostraks geen COMMIT gedaan wordt.
$insertproblem = true;
//Stop met de inserts.
break;
}
if($insertproblem) {
//Er is een query fout gegaan. Rol alles terug.
//Maak alle inserts ongedaan.
mysql_query("ROLLBACK");
} else {
//Alles is goed gegaan.
$mysql_query("COMMIT");
}
mysql_close($db);
//echo '<pre>';
//print_r($data);
//echo '</pre>';
//exit;
}
?>
Gewijzigd op 19/06/2011 20:20:38 door Mark van Dijk
Code (php)
1
2
3
2
3
<?php
$result = mysql_query("INSERT INTO kap_productgegevens (datum, product, verkocht, prijs, kwaliteit) VALUES (NOW(), '" . mysql_real_escape_string($product['product']). "', '" . mysql_real_escape_string($product['verkocht'] ). "', '" . mysql_real_escape_string($product['prijs']) . "', '" . mysql_real_escape_string($product['kwaliteit']) . "'");
?>
$result = mysql_query("INSERT INTO kap_productgegevens (datum, product, verkocht, prijs, kwaliteit) VALUES (NOW(), '" . mysql_real_escape_string($product['product']). "', '" . mysql_real_escape_string($product['verkocht'] ). "', '" . mysql_real_escape_string($product['prijs']) . "', '" . mysql_real_escape_string($product['kwaliteit']) . "'");
?>
Maar ik weet niet wat jij op sommige plekken ooit wil doen..
Gewijzigd op 19/06/2011 20:25:22 door gerhard l
Parse error: syntax error, unexpected $end on line 79
Lijkt erop dat ik iets vergeten ben?
Toevoeging op 19/06/2011 20:58:24:
Problem solved. :-)
Alleen staan er na het draaien van het script geen gegevens in de tabel.
Toevoeging op 19/06/2011 21:14:50:
Gerhard l op 19/06/2011 20:23:52:
Maar ik weet niet wat jij op sommige plekken ooit wil doen..
Maar ik weet niet wat jij op sommige plekken ooit wil doen..
Een tabel, gekopieerd van een internet pagina met 1 druk op de knop inserten in een database via een html formulier.
Ik krijg nu dus geen foutmeldingen, maar er staat ook niets in de database. :-(
Toevoeging op 20/06/2011 11:58:30:
Hallo allemaal,
Het script werkt en ik heb em nog wat uitgebreidt. Problem solved!
Iedereen super bedankt voor alle hulp!
Het uiteindelijke script wil ik nog even delen:
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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
94
95
96
97
98
99
100
101
102
103
<?php
//maak connectie met de database
session_start();
$db = mysql_connect("localhost", "user", "pass") or die("Could not connect.");
if(!$db)
die("no db");
if(!mysql_select_db("db",$db))
die("No database selected.");
if (isset($_POST['text'])) {
// get rid of whitespace...also, since not all OS use \r
// but everyone has \n in it, let's get rid of the \r
$text = str_replace("\r", '', trim($_POST['text']));
// maak een array aan
$data = array();
// splits regel voor regel
$lines = explode("\n", $text);
foreach ($lines as $line) {
// splits de regel bij de Tab
$parts = explode("\t", $line);
//splits het bedrag van het valuta teken
$valuta = explode(' ', $parts[2]);
//haal het duizendtal scheidingsteken uit de aantallen
$verkocht = str_replace('.', '', $parts[1]);
//haal het duizendtal scheidingsteken uit de prijzen
$prijskomma = str_replace('.', '', $valuta[0]);
// verander de komma's voor de decimalen in punten bij de prijzen
$prijs = str_replace(',', '.', $prijskomma);
// verander de komma's voor de decimalen in punten bij de kwaliteit
$kwaliteit = str_replace(',', '.', $parts[3]);
// zet alle data in een 2demensionale array
$data[] = array('product' => $parts[0], 'verkocht' => $verkocht, 'prijs' => $prijs, 'kwaliteit' => $kwaliteit);
}
// haal de //'s weg om de array te zien te krijgen op je pagina. Upload naar database werkt dan niet
//echo '<pre>';
//print_r($data);
//echo '</pre>';
//exit;
//Transactie hoeft niet maar zorgt ervoor dat als 1 van de queries mislukt ze allemaal ongedaan gemaakt worden.
mysql_query("START TRANSACTION");
//Alleen nodig met transactie.
$insertproblem = false;
//Loop door alle producten.
foreach($data as $product) {
$result = mysql_query("INSERT INTO kap_productgegevens (datum, product, verkocht, prijs, kwaliteit) VALUES (NOW(), '" . mysql_real_escape_string($product['product']). "', '" . mysql_real_escape_string($product['verkocht'] ). "', '" . mysql_real_escape_string($product['prijs']) . "', '" . mysql_real_escape_string($product['kwaliteit']) . "')");
if (!$result) {
//Er is iets fout gegaan.
//Geef de fout weer (niet doen in productie omgeving).
echo "Er is vandaag al geupload!";
//Zorg dat er zostraks geen COMMIT gedaan wordt.
$insertproblem = true;
//Stop met de inserts.
break;
}
if($insertproblem) {
//Er is een query fout gegaan. Rol alles terug.
//Maak alle inserts ongedaan.
mysql_query("ROLLBACK");
} else {
//Alles is goed gegaan.
mysql_query("COMMIT");
}
}
//sluit de connectie met de database
mysql_close($db);
}
?>
<html>
<head>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<input type="submit" value="Submit" /><br>
<textarea cols="65" rows="61" name="text"></textarea><br />
</form>
</body>
</html>
//maak connectie met de database
session_start();
$db = mysql_connect("localhost", "user", "pass") or die("Could not connect.");
if(!$db)
die("no db");
if(!mysql_select_db("db",$db))
die("No database selected.");
if (isset($_POST['text'])) {
// get rid of whitespace...also, since not all OS use \r
// but everyone has \n in it, let's get rid of the \r
$text = str_replace("\r", '', trim($_POST['text']));
// maak een array aan
$data = array();
// splits regel voor regel
$lines = explode("\n", $text);
foreach ($lines as $line) {
// splits de regel bij de Tab
$parts = explode("\t", $line);
//splits het bedrag van het valuta teken
$valuta = explode(' ', $parts[2]);
//haal het duizendtal scheidingsteken uit de aantallen
$verkocht = str_replace('.', '', $parts[1]);
//haal het duizendtal scheidingsteken uit de prijzen
$prijskomma = str_replace('.', '', $valuta[0]);
// verander de komma's voor de decimalen in punten bij de prijzen
$prijs = str_replace(',', '.', $prijskomma);
// verander de komma's voor de decimalen in punten bij de kwaliteit
$kwaliteit = str_replace(',', '.', $parts[3]);
// zet alle data in een 2demensionale array
$data[] = array('product' => $parts[0], 'verkocht' => $verkocht, 'prijs' => $prijs, 'kwaliteit' => $kwaliteit);
}
// haal de //'s weg om de array te zien te krijgen op je pagina. Upload naar database werkt dan niet
//echo '<pre>';
//print_r($data);
//echo '</pre>';
//exit;
//Transactie hoeft niet maar zorgt ervoor dat als 1 van de queries mislukt ze allemaal ongedaan gemaakt worden.
mysql_query("START TRANSACTION");
//Alleen nodig met transactie.
$insertproblem = false;
//Loop door alle producten.
foreach($data as $product) {
$result = mysql_query("INSERT INTO kap_productgegevens (datum, product, verkocht, prijs, kwaliteit) VALUES (NOW(), '" . mysql_real_escape_string($product['product']). "', '" . mysql_real_escape_string($product['verkocht'] ). "', '" . mysql_real_escape_string($product['prijs']) . "', '" . mysql_real_escape_string($product['kwaliteit']) . "')");
if (!$result) {
//Er is iets fout gegaan.
//Geef de fout weer (niet doen in productie omgeving).
echo "Er is vandaag al geupload!";
//Zorg dat er zostraks geen COMMIT gedaan wordt.
$insertproblem = true;
//Stop met de inserts.
break;
}
if($insertproblem) {
//Er is een query fout gegaan. Rol alles terug.
//Maak alle inserts ongedaan.
mysql_query("ROLLBACK");
} else {
//Alles is goed gegaan.
mysql_query("COMMIT");
}
}
//sluit de connectie met de database
mysql_close($db);
}
?>
<html>
<head>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<input type="submit" value="Submit" /><br>
<textarea cols="65" rows="61" name="text"></textarea><br />
</form>
</body>
</html>
Gewijzigd op 20/06/2011 12:00:17 door Mark van Dijk