Page redirect naar laatst ID in database
Ik heb hier een klanten systeem waarbij er gegevens kunnen worden ingevoerd zoals:
Deze pagina maakt een nieuwe regel in de database en in de database worden deze gegevens gekoppeld aan een ID (Oplopend naar elke nieuwe invoer)
Code (php)
1
2
3
2
3
mysqli_query($con,"insert into klantorder (naam,email,telefoon,status,notitie,imei,toestel,klacht,type,merk) values('$naam','$email','$telefoon','$status','$notitie','$imei','$toestel','$klacht','$type','$merk')");
echo "<script>alert('Data Updated');</script>";
}
echo "<script>alert('Data Updated');</script>";
}
Stel als hij als ID 30 in de database komt te staan dan zou ik willen dat hij naar de echo redirected word naar edit-user.php?id=30
Alleen hoe fetch ik de laatste ID die is aangemaakt in de database ?
Gewijzigd op 31/01/2022 19:00:18 door Ricardo B
Los van dit raad ik wel aan om je query te controleren met een if-else. Nu zeg je op voorhand al dat het gelukt is, terwijl daar geen zekerheid van is.
Gewijzigd op 31/01/2022 19:07:27 door - Ariën -
“fetch last ID die is aangemaakt in de database”
Plakken in Google en je wordt overspoeld met antwoorden.
- Ariën - op 31/01/2022 19:07:15:
mysqli_insert_id() na je INSERT-query.
Los van dit raad ik wel aan om je query te controleren met een if-else. Nu zeg je op voorhand al dat het gelukt is, terwijl daar geen zekerheid van is.
Los van dit raad ik wel aan om je query te controleren met een if-else. Nu zeg je op voorhand al dat het gelukt is, terwijl daar geen zekerheid van is.
Thanks dat werkt idd prima :)
de query word pas uitgevoerd door een if button ik heb er nu een else error aan toegevoegd bedoel je dit ? of nog een extra controlle om de query te controleren ?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if(isset($_POST['submit']))
{
$naam=$_POST['naam'];
$email=$_POST['email'];
$telefoon=$_POST['telefoon'];
$status=$_POST['status'];
$notitie=$_POST['notitie'];
$imei=$_POST['imei'];
$toestel=$_POST['toestel'];
$klacht=$_POST['klacht'];
$type=$_POST['type'];
$merk=$_POST['merk'];
mysqli_query($con,"insert into klantorder (naam,email,telefoon,status,notitie,imei,toestel,klacht,type,merk) values('$naam','$email','$telefoon','$status','$notitie','$imei','$toestel','$klacht','$type','$merk')");
$lastid = mysqli_insert_id($con);
echo "<script>alert('Data Updated');</script>";
header("refresh:1;url=edit-user.php?id=$lastid");
die();
} else {
echo "error";
}
{
$naam=$_POST['naam'];
$email=$_POST['email'];
$telefoon=$_POST['telefoon'];
$status=$_POST['status'];
$notitie=$_POST['notitie'];
$imei=$_POST['imei'];
$toestel=$_POST['toestel'];
$klacht=$_POST['klacht'];
$type=$_POST['type'];
$merk=$_POST['merk'];
mysqli_query($con,"insert into klantorder (naam,email,telefoon,status,notitie,imei,toestel,klacht,type,merk) values('$naam','$email','$telefoon','$status','$notitie','$imei','$toestel','$klacht','$type','$merk')");
$lastid = mysqli_insert_id($con);
echo "<script>alert('Data Updated');</script>";
header("refresh:1;url=edit-user.php?id=$lastid");
die();
} else {
echo "error";
}
Toevoeging op 31/01/2022 21:22:48:
Adoptive Solution op 31/01/2022 19:12:02:
De vraag even aangepast.
“fetch last ID die is aangemaakt in de database”
Plakken in Google en je wordt overspoeld met antwoorden.
“fetch last ID die is aangemaakt in de database”
Plakken in Google en je wordt overspoeld met antwoorden.
Is het doel van een forum niet om elkaar te helpen ? :) voor jou is dit een simpele vraag voor mij helaas niet, uiteraard zoek ik eerst maar ik mag dus niet om een mening vragen of om advies ?
Gewijzigd op 31/01/2022 21:23:07 door Ricardo B
php insert query last id' kom ik al een hoop bruikbare tips tegen.
Om terug te komen op mijn opmerking: Ik doelde op je query. Hier mis foutafhandeling:
Stel dat je query niet werkt om bepaalde redenen, zoals bijv. een databaseprobleem, kapotte query of SQL-injection, dan schotel je de gebruiker direct een alert voor met: Data updated. Maar dat is dus valse informatie. In dat geval loont het dus om met een if-else constructie om je mysqli_query te kijken of deze false is, en in dat geval een foutmelding te tonen, of nog liever op de achtergrond te loggen. Bezoekers hebben geen baat bij een 'syntax error', maar wel baat bij een: 'Er is bij ons een technische storing...'.
Daarnaast mist er escaping in je query, en kan jan-en-alleman de query aanpassen, met kwade gevolgen van dien. Ook jij zelf kan de query laten mislukken met bijv. 's Hertogenbosch als waarde. Dus gebruik daarom altijd mysqli_real_escape_string($con,$_POST['.....'])
Verder kan je een header() NOOIT gebruiken als je al eerder output geplaatst hebt.
En ook raad ik aan om i.p.v. if(isset($_POST['submit'])) te controleren of de POST-methode uitgevoerd is:
Ik weet niet of het veel uitmaakt, maar het is in ieder geval logischer dan dat je staat te controleren of een knop bestaat. Met de &&-operator (AND) kan je beiden ook in één keer controleren.
Het forum is zeker bedoeld om iemand te helpen, en een mening of advies vragen hoort er zeker bij. Maar er wordt wel een zelfred-zaamheid verwacht, wat gelukkig niet geëist wordt. Daarom wordt het altijd wel verwacht dat iemand via Google, DuckDuckGo of wat dan ook eerst even zelf wat opzoekt. Met Engelse termen kom je vaak al een flink eind. Als ik al zoek op 'Om terug te komen op mijn opmerking: Ik doelde op je query. Hier mis foutafhandeling:
Stel dat je query niet werkt om bepaalde redenen, zoals bijv. een databaseprobleem, kapotte query of SQL-injection, dan schotel je de gebruiker direct een alert voor met: Data updated. Maar dat is dus valse informatie. In dat geval loont het dus om met een if-else constructie om je mysqli_query te kijken of deze false is, en in dat geval een foutmelding te tonen, of nog liever op de achtergrond te loggen. Bezoekers hebben geen baat bij een 'syntax error', maar wel baat bij een: 'Er is bij ons een technische storing...'.
Daarnaast mist er escaping in je query, en kan jan-en-alleman de query aanpassen, met kwade gevolgen van dien. Ook jij zelf kan de query laten mislukken met bijv. 's Hertogenbosch als waarde. Dus gebruik daarom altijd mysqli_real_escape_string($con,$_POST['.....'])
Verder kan je een header() NOOIT gebruiken als je al eerder output geplaatst hebt.
En ook raad ik aan om i.p.v. if(isset($_POST['submit'])) te controleren of de POST-methode uitgevoerd is:
Code (php)
1
2
3
4
2
3
4
if($_SERVER['REQUEST_METHOD'] == "POST") {
// Er is een POST-request uitgevoerd
// voer hier alles uit.
}
// Er is een POST-request uitgevoerd
// voer hier alles uit.
}
Ik weet niet of het veel uitmaakt, maar het is in ieder geval logischer dan dat je staat te controleren of een knop bestaat. Met de &&-operator (AND) kan je beiden ook in één keer controleren.
Gewijzigd op 31/01/2022 23:31:47 door - Ariën -
Ik ben momenteel bezig met een factuur systeem, bezig met het zelfde princiepe na de post doorlinken naar bewerkpagina ?id= en dan laatst toegevoegde id alleen werkt het niet (Ander tabel alleen heet het veld geen id maar order_id) wel ook als primaire key.
Wat doe ik fout? kunnen er geen 2 verschillende id's zijn ? moet ik order_id veranderen naar id ?
Ik heb al een hoop verschillende manieren gezocht en getest maar niks werkt ik kom hier niet uit
de code:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
include ("Invoice.php");
$invoice = new Invoice();
if(isset($_POST['submit']))
{
$invoice->saveInvoice($_POST);
header("refresh:1;url=edit_invoice.php?update_id=$lastInsertId");
}
$invoice = new Invoice();
if(isset($_POST['submit']))
{
$invoice->saveInvoice($_POST);
header("refresh:1;url=edit_invoice.php?update_id=$lastInsertId");
}
invoice.php :
Code (php)
1
2
3
4
5
6
2
3
4
5
6
public function saveInvoice($POST) {
$sqlInsert = "
INSERT INTO ".$this->invoiceOrderTable."(user_id, order_receiver_name, order_receiver_address, straatt, telefoonn, emaill, order_total_before_tax, order_total_tax, order_tax_per, order_total_after_tax, order_amount_paid, order_total_amount_due, note)
VALUES ('".$POST['userId']."', '".$POST['companyName']."', '".$POST['address']."', '".$POST['straat']."', '".$POST['telefoon']."', '".$POST['email']."', '" .$POST['subTotal']."', '".$POST['taxAmount']."', '".$POST['taxRate']."', '".$POST['totalAftertax']."', '".$POST['amountPaid']."', '".$POST['amountDue']."', '".$POST['notes']."')";
mysqli_query($this->dbConnect, $sqlInsert);
$lastInsertId = mysqli_insert_id($this->dbConnect);
$sqlInsert = "
INSERT INTO ".$this->invoiceOrderTable."(user_id, order_receiver_name, order_receiver_address, straatt, telefoonn, emaill, order_total_before_tax, order_total_tax, order_tax_per, order_total_after_tax, order_amount_paid, order_total_amount_due, note)
VALUES ('".$POST['userId']."', '".$POST['companyName']."', '".$POST['address']."', '".$POST['straat']."', '".$POST['telefoon']."', '".$POST['email']."', '" .$POST['subTotal']."', '".$POST['taxAmount']."', '".$POST['taxRate']."', '".$POST['totalAftertax']."', '".$POST['amountPaid']."', '".$POST['amountDue']."', '".$POST['notes']."')";
mysqli_query($this->dbConnect, $sqlInsert);
$lastInsertId = mysqli_insert_id($this->dbConnect);
Ricardo B op 02/02/2022 17:16:42:
Duidelijk, inprinciepe word er na de POST doorgelinkt naar de bewerk pagina dan zie ik of het goed gegaan is, dit systeem word enkel door mij alleen gebruikt voor administratie dus het hoeft niet helemaal perfect te zijn, daardoor ook niet bang voor mysql injecties :)
Als je goed leest is dat geen enkele valide reden. Je kan immers ook onwetend je query laten vastlopen zonder dat je merkt.
Voeg maar eens Jeanne d'Arc toe en ervaar!
Verder is het $_POST een geen $POST.
Over je probleem: Je ID veld is wel AutoIncrement en Primairy Key?
Gewijzigd op 02/02/2022 17:53:53 door - Ariën -
Ook weer gelijk dat is wel een puntje dat ik niet de juiste termen overneem excuus.
Yes, ik heb tabel klantorder met een kolom id Primairy key + auto increment dat werkt goed om te koppelen
alleen kolom invoice_order met order_id Primairy key + auto increment werkt niet.
Ik heb een button die verwijst naar create_invoice.php?id=5 (Dat id is lastid) database waardes worden opgehaald op basis van lastid, en op die zelfde pagina heb ik een knop om de factuur te maken en dat is dan de $_POST waarde die dan weer verwijst naar invoice.php
het zou zo mogelijk moeten zijn lijkt mij
Wat zegt een var_dump op $lastInsertId?
Als het niet werkt, heb je een SQL-dumpje van je structuur?
Gewijzigd op 02/02/2022 21:30:44 door - Ariën -
ik heb de var_dump zo toegevoegd dat is prima lijkt mij:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
if(isset($_POST['submit']))
{
$invoice->saveInvoice($_POST);
header("refresh:1;url=edit_invoice.php?update_id=$lastInsertId");
}
echo '<pre>';
var_dump($lastInsertId);
echo '</pre>';
?>
{
$invoice->saveInvoice($_POST);
header("refresh:1;url=edit_invoice.php?update_id=$lastInsertId");
}
echo '<pre>';
var_dump($lastInsertId);
echo '</pre>';
?>
Hierbij de SQL dump (Adressen en namen zijn fictief aantal erin laten staan)
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
-- phpMyAdmin SQL Dump
-- version 4.9.5
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Gegenereerd op: 02 feb 2022 om 21:43
-- Serverversie: 10.3.24-MariaDB-cll-lve
-- PHP-versie: 5.5.38
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `u84600p79297_crm`
--
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `admin`
--
CREATE TABLE `admin` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL DEFAULT '',
`password` varchar(255) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Gegevens worden gexporteerd voor tabel `admin`
--
INSERT INTO `admin` (`id`, `name`, `password`) VALUES
(1, 'admin', 'admin');
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `invoice_order`
--
CREATE TABLE `invoice_order` (
`order_id` int(11) NOT NULL,
`order_date` date NOT NULL DEFAULT current_timestamp(),
`order_receiver_name` varchar(250) NOT NULL,
`straatt` varchar(255) CHARACTER SET swe7 NOT NULL,
`order_receiver_address` text NOT NULL,
`telefoonn` varchar(255) CHARACTER SET swe7 NOT NULL,
`emaill` varchar(255) NOT NULL,
`order_total_before_tax` decimal(10,2) NOT NULL,
`order_total_tax` decimal(10,2) NOT NULL,
`order_tax_per` varchar(250) NOT NULL,
`order_total_after_tax` double(10,2) NOT NULL,
`order_amount_paid` decimal(10,2) NOT NULL,
`order_total_amount_due` decimal(10,2) NOT NULL,
`note` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Gegevens worden gexporteerd voor tabel `invoice_order`
--
INSERT INTO `invoice_order` (`order_id`, `order_date`, `order_receiver_name`, `straatt`, `order_receiver_address`, `telefoonn`, `emaill`, `order_total_before_tax`, `order_total_tax`, `order_tax_per`, `order_total_after_tax`, `order_amount_paid`, `order_total_amount_due`, `note`) VALUES
(740, '2022-02-02', 'Piet Post', '', 'Grachtensingel 80, 8472 DD Utrecht', '064644646', '[email protected]', '0.00', '0.00', '', 0.00, '0.00', '0.00', 'gsdfg'),
(741, '2022-02-02', 'Karel Vries', '', 'Karel Klapstraat, 98, 3829 DD Amsterdam', '064578854121', '[email protected]', '0.00', '0.00', '', 0.00, '0.00', '0.00', 'dfgh');
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `invoice_order_item`
--
CREATE TABLE `invoice_order_item` (
`order_item_id` int(11) NOT NULL,
`order_id` int(11) NOT NULL,
`item_code` varchar(250) NOT NULL,
`item_name` varchar(250) NOT NULL,
`order_item_quantity` decimal(10,2) NOT NULL,
`order_item_price` decimal(10,2) NOT NULL,
`order_item_final_amount` decimal(10,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Gegevens worden gexporteerd voor tabel `invoice_order_item`
--
INSERT INTO `invoice_order_item` (`order_item_id`, `order_id`, `item_code`, `item_name`, `order_item_quantity`, `order_item_price`, `order_item_final_amount`) VALUES
(4378, 2, '13555', 'Face Mask', '1.00', '41.00', '41.00'),
(4379, 2, '34', 'mobile', '1.00', '41.00', '41.00'),
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `invoice_user`
--
CREATE TABLE `invoice_user` (
`id` int(11) NOT NULL,
`email` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`first_name` varchar(100) NOT NULL,
`last_name` varchar(100) NOT NULL,
`mobile` bigint(20) NOT NULL,
`address` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Gegevens worden gexporteerd voor tabel `invoice_user`
--
INSERT INTO `invoice_user` (`id`, `email`, `password`, `first_name`, `last_name`, `mobile`, `address`) VALUES
(123456, '[email protected]', '1223345', 'aaaaadddmiiiin', '', 12345678912, 'New Delhi 110096 India.');
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `klantorder`
--
CREATE TABLE `klantorder` (
`id` int(11) NOT NULL,
`type` varchar(255) CHARACTER SET swe7 DEFAULT NULL,
`naam` varchar(255) DEFAULT NULL,
`straat` varchar(255) CHARACTER SET swe7 NOT NULL,
`adres` varchar(255) CHARACTER SET swe7 DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`telefoon` varchar(255) DEFAULT NULL,
`status` varchar(255) DEFAULT NULL,
`notitie` varchar(500) DEFAULT NULL,
`imei` varchar(255) DEFAULT NULL,
`merk` varchar(255) CHARACTER SET swe7 NOT NULL,
`toestel` varchar(255) DEFAULT NULL,
`datum` date DEFAULT current_timestamp(),
`klacht` varchar(255) DEFAULT NULL,
`image_url` varchar(255) DEFAULT NULL,
`image_url2` varchar(255) DEFAULT NULL,
`image_url3` varchar(255) DEFAULT NULL,
`image_url4` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Gegevens worden gexporteerd voor tabel `klantorder`
--
INSERT INTO `klantorder` (`id`, `type`, `naam`, `straat`, `adres`, `email`, `telefoon`, `status`, `notitie`, `imei`, `merk`, `toestel`, `datum`, `klacht`, `image_url`, `image_url2`, `image_url3`, `image_url4`) VALUES
(1, 'Reparatie', 'Karel Kachel', '', 'Karel Klapstraat, 98, 3829 DD Amsterdam', '[email protected]', '064578854121', 'Gerepareerd', 'Scherm vervangen', '1561615165156', 'Apple', 'Iphone X', '2022-01-27', 'Scherm gebarsten', 'IMG-61f7ff3e2c7807.64653209.png', 'IMG-61fa7d2aa32de6.85503414.png', 'IMG-61f4a07b19b7f5.71220965.jpg', 'IMG-61f4a089091ed0.91107611.jpg'),
--
-- Indexen voor gexporteerde tabellen
--
--
-- Indexen voor tabel `admin`
--
ALTER TABLE `admin`
ADD PRIMARY KEY (`id`);
--
-- Indexen voor tabel `invoice_order`
--
ALTER TABLE `invoice_order`
ADD PRIMARY KEY (`order_id`);
--
-- Indexen voor tabel `invoice_order_item`
--
ALTER TABLE `invoice_order_item`
ADD PRIMARY KEY (`order_item_id`);
--
-- Indexen voor tabel `invoice_user`
--
ALTER TABLE `invoice_user`
ADD PRIMARY KEY (`id`);
--
-- Indexen voor tabel `klantorder`
--
ALTER TABLE `klantorder`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT voor gexporteerde tabellen
--
--
-- AUTO_INCREMENT voor een tabel `admin`
--
ALTER TABLE `admin`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT voor een tabel `invoice_order`
--
ALTER TABLE `invoice_order`
MODIFY `order_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=742;
--
-- AUTO_INCREMENT voor een tabel `invoice_order_item`
--
ALTER TABLE `invoice_order_item`
MODIFY `order_item_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4484;
--
-- AUTO_INCREMENT voor een tabel `invoice_user`
--
ALTER TABLE `invoice_user`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=123457;
--
-- AUTO_INCREMENT voor een tabel `klantorder`
--
ALTER TABLE `klantorder`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=38;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
-- version 4.9.5
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Gegenereerd op: 02 feb 2022 om 21:43
-- Serverversie: 10.3.24-MariaDB-cll-lve
-- PHP-versie: 5.5.38
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `u84600p79297_crm`
--
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `admin`
--
CREATE TABLE `admin` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL DEFAULT '',
`password` varchar(255) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Gegevens worden gexporteerd voor tabel `admin`
--
INSERT INTO `admin` (`id`, `name`, `password`) VALUES
(1, 'admin', 'admin');
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `invoice_order`
--
CREATE TABLE `invoice_order` (
`order_id` int(11) NOT NULL,
`order_date` date NOT NULL DEFAULT current_timestamp(),
`order_receiver_name` varchar(250) NOT NULL,
`straatt` varchar(255) CHARACTER SET swe7 NOT NULL,
`order_receiver_address` text NOT NULL,
`telefoonn` varchar(255) CHARACTER SET swe7 NOT NULL,
`emaill` varchar(255) NOT NULL,
`order_total_before_tax` decimal(10,2) NOT NULL,
`order_total_tax` decimal(10,2) NOT NULL,
`order_tax_per` varchar(250) NOT NULL,
`order_total_after_tax` double(10,2) NOT NULL,
`order_amount_paid` decimal(10,2) NOT NULL,
`order_total_amount_due` decimal(10,2) NOT NULL,
`note` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Gegevens worden gexporteerd voor tabel `invoice_order`
--
INSERT INTO `invoice_order` (`order_id`, `order_date`, `order_receiver_name`, `straatt`, `order_receiver_address`, `telefoonn`, `emaill`, `order_total_before_tax`, `order_total_tax`, `order_tax_per`, `order_total_after_tax`, `order_amount_paid`, `order_total_amount_due`, `note`) VALUES
(740, '2022-02-02', 'Piet Post', '', 'Grachtensingel 80, 8472 DD Utrecht', '064644646', '[email protected]', '0.00', '0.00', '', 0.00, '0.00', '0.00', 'gsdfg'),
(741, '2022-02-02', 'Karel Vries', '', 'Karel Klapstraat, 98, 3829 DD Amsterdam', '064578854121', '[email protected]', '0.00', '0.00', '', 0.00, '0.00', '0.00', 'dfgh');
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `invoice_order_item`
--
CREATE TABLE `invoice_order_item` (
`order_item_id` int(11) NOT NULL,
`order_id` int(11) NOT NULL,
`item_code` varchar(250) NOT NULL,
`item_name` varchar(250) NOT NULL,
`order_item_quantity` decimal(10,2) NOT NULL,
`order_item_price` decimal(10,2) NOT NULL,
`order_item_final_amount` decimal(10,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Gegevens worden gexporteerd voor tabel `invoice_order_item`
--
INSERT INTO `invoice_order_item` (`order_item_id`, `order_id`, `item_code`, `item_name`, `order_item_quantity`, `order_item_price`, `order_item_final_amount`) VALUES
(4378, 2, '13555', 'Face Mask', '1.00', '41.00', '41.00'),
(4379, 2, '34', 'mobile', '1.00', '41.00', '41.00'),
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `invoice_user`
--
CREATE TABLE `invoice_user` (
`id` int(11) NOT NULL,
`email` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`first_name` varchar(100) NOT NULL,
`last_name` varchar(100) NOT NULL,
`mobile` bigint(20) NOT NULL,
`address` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Gegevens worden gexporteerd voor tabel `invoice_user`
--
INSERT INTO `invoice_user` (`id`, `email`, `password`, `first_name`, `last_name`, `mobile`, `address`) VALUES
(123456, '[email protected]', '1223345', 'aaaaadddmiiiin', '', 12345678912, 'New Delhi 110096 India.');
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `klantorder`
--
CREATE TABLE `klantorder` (
`id` int(11) NOT NULL,
`type` varchar(255) CHARACTER SET swe7 DEFAULT NULL,
`naam` varchar(255) DEFAULT NULL,
`straat` varchar(255) CHARACTER SET swe7 NOT NULL,
`adres` varchar(255) CHARACTER SET swe7 DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`telefoon` varchar(255) DEFAULT NULL,
`status` varchar(255) DEFAULT NULL,
`notitie` varchar(500) DEFAULT NULL,
`imei` varchar(255) DEFAULT NULL,
`merk` varchar(255) CHARACTER SET swe7 NOT NULL,
`toestel` varchar(255) DEFAULT NULL,
`datum` date DEFAULT current_timestamp(),
`klacht` varchar(255) DEFAULT NULL,
`image_url` varchar(255) DEFAULT NULL,
`image_url2` varchar(255) DEFAULT NULL,
`image_url3` varchar(255) DEFAULT NULL,
`image_url4` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Gegevens worden gexporteerd voor tabel `klantorder`
--
INSERT INTO `klantorder` (`id`, `type`, `naam`, `straat`, `adres`, `email`, `telefoon`, `status`, `notitie`, `imei`, `merk`, `toestel`, `datum`, `klacht`, `image_url`, `image_url2`, `image_url3`, `image_url4`) VALUES
(1, 'Reparatie', 'Karel Kachel', '', 'Karel Klapstraat, 98, 3829 DD Amsterdam', '[email protected]', '064578854121', 'Gerepareerd', 'Scherm vervangen', '1561615165156', 'Apple', 'Iphone X', '2022-01-27', 'Scherm gebarsten', 'IMG-61f7ff3e2c7807.64653209.png', 'IMG-61fa7d2aa32de6.85503414.png', 'IMG-61f4a07b19b7f5.71220965.jpg', 'IMG-61f4a089091ed0.91107611.jpg'),
--
-- Indexen voor gexporteerde tabellen
--
--
-- Indexen voor tabel `admin`
--
ALTER TABLE `admin`
ADD PRIMARY KEY (`id`);
--
-- Indexen voor tabel `invoice_order`
--
ALTER TABLE `invoice_order`
ADD PRIMARY KEY (`order_id`);
--
-- Indexen voor tabel `invoice_order_item`
--
ALTER TABLE `invoice_order_item`
ADD PRIMARY KEY (`order_item_id`);
--
-- Indexen voor tabel `invoice_user`
--
ALTER TABLE `invoice_user`
ADD PRIMARY KEY (`id`);
--
-- Indexen voor tabel `klantorder`
--
ALTER TABLE `klantorder`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT voor gexporteerde tabellen
--
--
-- AUTO_INCREMENT voor een tabel `admin`
--
ALTER TABLE `admin`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT voor een tabel `invoice_order`
--
ALTER TABLE `invoice_order`
MODIFY `order_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=742;
--
-- AUTO_INCREMENT voor een tabel `invoice_order_item`
--
ALTER TABLE `invoice_order_item`
MODIFY `order_item_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4484;
--
-- AUTO_INCREMENT voor een tabel `invoice_user`
--
ALTER TABLE `invoice_user`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=123457;
--
-- AUTO_INCREMENT voor een tabel `klantorder`
--
ALTER TABLE `klantorder`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=38;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Toevoeging op 02/02/2022 23:00:07:
Ik heb net even beter gekeken dit is iets meer code
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
public function saveInvoice($POST) {
$sqlInsert = "
INSERT INTO ".$this->invoiceOrderTable."(user_id, order_receiver_name, order_receiver_address, straatt, telefoonn, emaill, order_total_before_tax, order_total_tax, order_tax_per, order_total_after_tax, order_amount_paid, order_total_amount_due, note)
VALUES ('".$POST['userId']."', '".$POST['companyName']."', '".$POST['address']."', '".$POST['straat']."', '".$POST['telefoon']."', '".$POST['email']."', '" .$POST['subTotal']."', '".$POST['taxAmount']."', '".$POST['taxRate']."', '".$POST['totalAftertax']."', '".$POST['amountPaid']."', '".$POST['amountDue']."', '".$POST['notes']."')";
mysqli_query($this->dbConnect, $sqlInsert);
$lastInsertId = mysqli_insert_id($this->dbConnect);
for ($i = 0; $i < count($POST['productCode']); $i++) {
$sqlInsertItem = "
INSERT INTO ".$this->invoiceOrderItemTable."(order_id, item_code, item_name, order_item_quantity, order_item_price, order_item_final_amount)
VALUES ('".$lastInsertId."', '".$POST['productCode'][$i]."', '".$POST['productName'][$i]."', '".$POST['quantity'][$i]."', '".$POST['price'][$i]."', '".$POST['total'][$i]."')";
mysqli_query($this->dbConnect, $sqlInsertItem);
}
}
$sqlInsert = "
INSERT INTO ".$this->invoiceOrderTable."(user_id, order_receiver_name, order_receiver_address, straatt, telefoonn, emaill, order_total_before_tax, order_total_tax, order_tax_per, order_total_after_tax, order_amount_paid, order_total_amount_due, note)
VALUES ('".$POST['userId']."', '".$POST['companyName']."', '".$POST['address']."', '".$POST['straat']."', '".$POST['telefoon']."', '".$POST['email']."', '" .$POST['subTotal']."', '".$POST['taxAmount']."', '".$POST['taxRate']."', '".$POST['totalAftertax']."', '".$POST['amountPaid']."', '".$POST['amountDue']."', '".$POST['notes']."')";
mysqli_query($this->dbConnect, $sqlInsert);
$lastInsertId = mysqli_insert_id($this->dbConnect);
for ($i = 0; $i < count($POST['productCode']); $i++) {
$sqlInsertItem = "
INSERT INTO ".$this->invoiceOrderItemTable."(order_id, item_code, item_name, order_item_quantity, order_item_price, order_item_final_amount)
VALUES ('".$lastInsertId."', '".$POST['productCode'][$i]."', '".$POST['productName'][$i]."', '".$POST['quantity'][$i]."', '".$POST['price'][$i]."', '".$POST['total'][$i]."')";
mysqli_query($this->dbConnect, $sqlInsertItem);
}
}
In invoice.php word de id waard die in invoice_order tabel gegenereerd word "gecloond" naar invoice_order_item tabel
de
werkt dus wel volledig in invoice.php maar niet als invoice.php geinclude word op create_invoice
de functie zelf werkt dus wel volledig zonder problemen
Ricardo B op 02/02/2022 17:16:42:
Ik ben momenteel bezig met een factuur systeem, bezig met het zelfde princiepe na de post doorlinken naar bewerkpagina ?id= en dan laatst toegevoegde id alleen werkt het niet (Ander tabel alleen heet het veld geen id maar order_id) wel ook als primaire key.
Hoe heb je de orders, facturen en klanten precies gekoppeld?
De primaire sleutel in een tabel wordt niet automatisch gebruikt in andere, afhankelijke tabellen die naar die ID verwijzen. Of anders gezegd: AUTO in AUTO_INCREMENT verwijst naar het automatisch verhogen van de teller in één tabel, niet naar het automatisch koppelen van tabellen.
Als jouw `id` en `order_id` hetzelfde volgnummer moeten krijgen, moet je de automatisch gegenereerde ID uit de hoofdtabel overnemen en zelf invoegen in de afhankelijke tabel. In stappen:
1. Voeg een rij toe in de hoofdtabel.
2. Haal de last_insert_id() van de nieuwe rij op.
3. Voeg een nieuwe rij met die ID toe in de afhankelijke tabel.
In tabel "klantorder" "id" primaire AI (Klanten)
in tabel "invoice_order" "order_id" primaire AI (Facturen)
in tabel "invoice_order_item" "order_item_id" primaire AI (Invoer velden op de facturering)
Ik heb een pagina waarin alle klanten geladen worden in een lijst met een factuur knop -> create_invoice?id=(id klantorder)
Op deze factuur create pagina worden de klant gegevens geladen, en kan ik regels toevoegen en de prijs zoals hier onder
Als de factuur word opgeslagen krijgt deze een eigen "order_id" in "invoice_order" deze zelfde id waarde word ook ook opgeslagen in "invoice_order_item" "order_item_id" om de invoer tabellen + bedragen in op te slaan.
Alles werkt tot nu toe volledig zonder problemen, maar zoals Ariën al aangaf moeten er nog wel een aantal dingen gebeuren zoals query checks toevoegen om het systeem beter te maken.
Ik moet ook even gaan denken hoe ik op de klant pagina zelf een lijst kan invoegen met de facturen die op die naam staan, ik denk dat ik de klant id laat mee sturen naar de "invoice_order" en "invoice_order_item" in een aparte tabel en zo de facturen te voorschijn laat komen op de klant pagina (Dit is nu nog een factuur lijst)
Gewijzigd op 03/02/2022 11:08:06 door Ricardo B
Gewijzigd op 03/02/2022 11:14:55 door - Ariën -
1 order_id die dan PK en AI zal hebben (create invoice maakt dan nieuwe regels aan)
2 user_id zonder PK of AI (Waarde van de klant ID zal "gekopieerd" worden en hier in geplaats worden)
Op deze manier krijgt elke factuur automatisch een oplopend getal maar word er bij elke factuur regel in de DB ook het klant id bijgeplaatst zodat ik die weer kan ophalen als ik een klant bekijk.
Dan zou het wel moeten werken.
ik heb hier snel wat in elkaar gezet maar ik denk niet dat dit de juiste manier is
het moet dus niet 1 button worden maar 1 button per "match"
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
$userid=$_GET['id'];
$id1 = "SELECT id FROM klantorder WHERE id = $userid";
$id2 = "SELECT order_id FROM Invoice_order";
$result = ($id1 == $id2)
?>
<?php $ret=mysqli_query($con,$result);
$cnt=1;
while($row=mysqli_fetch_array($ret))
{?>
<tr>
<td> <a href="edit-invoice.php?id=<?php echo $row['id'];?>" class="btn btn-primary btn-xs btn-mini">Factuur</a> </td>
<td>
</tr>
$userid=$_GET['id'];
$id1 = "SELECT id FROM klantorder WHERE id = $userid";
$id2 = "SELECT order_id FROM Invoice_order";
$result = ($id1 == $id2)
?>
<?php $ret=mysqli_query($con,$result);
$cnt=1;
while($row=mysqli_fetch_array($ret))
{?>
<tr>
<td> <a href="edit-invoice.php?id=<?php echo $row['id'];?>" class="btn btn-primary btn-xs btn-mini">Factuur</a> </td>
<td>
</tr>
Toevoeging op 03/02/2022 17:47:41:
Opgelost!
met:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
public function getInvoiceCustomer(){
$userid=$_GET['id'];
$sqlQuery = "
SELECT * FROM ".$this->invoiceOrderTable."
WHERE user_id = '$userid'";
return $this->getData($sqlQuery);
}
$userid=$_GET['id'];
$sqlQuery = "
SELECT * FROM ".$this->invoiceOrderTable."
WHERE user_id = '$userid'";
return $this->getData($sqlQuery);
}
Toevoeging op 03/02/2022 18:34:15:
Inmiddels ook
toegevoegd aan het eind van de query je had idd gelijk Ariën met Jeanne d'Arc waarom pakt hij dit eigenlijk niet ? ik neem aan door de ' ?
En moet ik mij zorgen maken om SQL injection aangezien het systeem enkel door mij gebruikt gaat worden ? en het systeem "verborgen" is achter een inlog systeem ?
Toevoeging op 04/02/2022 00:08:04:
Ik ben toch maar aan de slag gegaan om sql injectie tegen te gaan.
Is dit de juiste manier ? ook kwa error handling ?
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
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
<?php
if(isset($_POST['update']))
{
$naam=$_POST['naam'];
$straat=$_POST['straat'];
$adres=$_POST['adres'];
$email=$_POST['email'];
$telefoon=$_POST['telefoon'];
$notitie=$_POST['notitie'];
$userid=$_GET['id'];
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$stmt = $con->prepare('update klantorder set naam = ?, straat = ?, adres = ?, email = ?, telefoon = ?, notitie = ? where id = ? ');
$stmt->bind_param('ssssssi', $naam, $straat, $adres, $email, $telefoon, $notitie, $userid);
$stmt->execute();
if($stmt)
{
echo "<script>alert('Data Updated');</script>";
}
}
?>
if(isset($_POST['update']))
{
$naam=$_POST['naam'];
$straat=$_POST['straat'];
$adres=$_POST['adres'];
$email=$_POST['email'];
$telefoon=$_POST['telefoon'];
$notitie=$_POST['notitie'];
$userid=$_GET['id'];
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$stmt = $con->prepare('update klantorder set naam = ?, straat = ?, adres = ?, email = ?, telefoon = ?, notitie = ? where id = ? ');
$stmt->bind_param('ssssssi', $naam, $straat, $adres, $email, $telefoon, $notitie, $userid);
$stmt->execute();
if($stmt)
{
echo "<script>alert('Data Updated');</script>";
}
}
?>
Gewijzigd op 04/02/2022 00:08:55 door Ricardo B