Niet verwijderen, status factuur = .....
dit is het script tot dusver:
---------------------------------
Ik heb een pagina waar de projecten kunnen worden verwijdert, dat heb ik met het volgende script: Nu wil ik alleen dat als er een factuur niet betaald is het project niet verwijdert kan worden... weet jij hoe dat kan... dit is eht scriptje:
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
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
<?php
include("inc_connect.php")
?>
<!-- CONTENT -->
<style type="text/css">
<!--
#Layer1 {
position:absolute;
left:445px;
top:5px;
width:432px;
height:53px;
z-index:1;
}
#Layer2 {
position:absolute;
left:435px;
top:100px;
width:458px;
height:199px;
z-index:1;
}
#Layer3 {
position:absolute;
left:10px;
top:535px;
width:86px;
height:28px;
z-index:4;
}
#Layer4 {
position:absolute;
left:10px;
top:131px;
width:86px;
height:28px;
z-index:5;
}
#Layer5 {
position:absolute;
left:10px;
top:165px;
width:86px;
height:28px;
z-index:4;
}
#Layer6 {
position:absolute;
left:10px;
top:199px;
width:86px;
height:28px;
z-index:5;
}
.style1 {color: #FFFFFF}
-->
</style>
<body background="../images/achtergrond.JPG">
<div id="Layer1"><h1 class="style1">Delete Project</h1></div>
<div id="Layer3"><a href="../Logout.php"><img src="../images/log_out.png" width="118" height="26" border="0"></a></div>
<div id="Layer4"><a href="Development.php"><img src="../images/home.jpg" width="118" height="26" border="0"></a></div>
<div id="Layer5"><a href="open_projects.php"><img src="../images/open_prj.jpg" width="118" height="26" border="0"></a></div>
<div id="Layer6"><a href="new_projects.php"><img src="../images/new_prj.jpg" width="118" height="26" border="0"></a></div>
<div id="Layer2"><table border="0" cellpadding="0" cellspacing="0" background="../images/adminpanel/bg_content.jpg" width="500" height="481">
<tr>
<td colspan="3" height="4"><!-- leeg laten --></td>
</tr>
<tr>
<td width="4"><!-- leeg laten --></td>
<td valign="top" align="center">
<table border="0" cellpadding="0" cellspacing="0" width="492" height="20">
<tr>
<td colspan="2" height="10"></td>
</tr>
<tr>
<td colspan="2" height="20"></td>
</tr>
<tr>
<td align="left"><font class="tekst_italic_pad">Would you like to delete this project?</font></td>
<td align="right"></td>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="492" >
<tr>
<td colspan="4" height="15"><!-- leeg laten --></td>
</tr>
<tr>
<td width="10"></td>
<?php
if (isset($_POST["bevestiging"])){
$query="DELETE FROM project WHERE project_id='" .$_POST["id"] . "'";
$result = mysql_query($query) or die ("FOUT: " . mysql_error());
if ($result){
echo ("<td colspan=\"2\"><font class=\"tekst_bold\">Record nummer " .$_POST["id"] . " is verwijderd<br></font>\n");
}
}else{
$query="SELECT project_id, Date, applications, hardware, software, appointment, int_cnt_prs FROM project WHERE project_id='" .$_GET["ID"] . "'";
$result = mysql_query($query) or die ("FOUT: " .mysql_error());
$result = mysql_query("SELECT project_id, Date, applications, hardware, software, appointment, int_cnt_prs FROM project WHERE project_id='" .$_GET["ID"] . "'");
while ($row = mysql_fetch_array($result)){
$ID = $row["project_id"];
$Date = $row["Date"];
$applications = $row["applications"];
$hardware = $row["hardware"];
$software = $row["software"];
$appointment = $row["appointment"];
$int_cnt_prs = $row["int_cnt_prs"];
echo("
<td width=\"150\"><font class=\"tekst_bold\"><b>Date:</b></font></td>
<td ><font class=\"tekst\">$Date</font></td>
</tr>
<tr>
<td width=\"10\"></td>
<td width=\"150\"><font class=\"tekst_bold\"><b>Applications:</b></font></td>
<td><font class=\"tekst\">$applications</font></td>
</tr>
<tr>
<td width=\"10\"></td>
<td width=\"150\"><font class=\"tekst_bold\"><b>Hardware:</b></font></td>
<td><font class=\"tekst\">$hardware</font></td>
</tr>
<tr>
<td width=\"10\"></td>
<td width=\"150\"><font class=\"tekst_bold\"><b>Software:</b></font></td>
<td><font class=\"tekst\">$software</font></td>
</tr>
<tr>
<td width=\"10\"></td>
<td width=\"150\"><font class=\"tekst_bold\"><b>Appointment:</b></font></td>
<td><font class=\"tekst\">$appointment</font></td>
</tr>
<tr>
<td width=\"10\"></td>
<td width=\"150\"><font class=\"tekst_bold\"><b>Internal Contact Person:</b></font></td>
<td><font class=\"tekst\">$int_cnt_prs</font></td>
</tr>
");
}
?>
<tr>
<td colspan="3" height="10"><!-- leeg laten --></td>
</tr>
<tr>
<form action="<?php echo($_SERVER["PHP_SELF"]);?>" method="post">
<input type="hidden" name="bevestiging" value="1"><input type="hidden" name="id" value="<?php echo($_GET["ID"])?>">
<td width="10"></td>
<td width="90"></td>
<td><input class="button2" type="Submit" value="Delete"></td>
</form>
</tr>
</table>
<?php
}
?>
</td>
<td width="4"><!-- leeg laten --></td>
</tr>
<tr>
<td colspan="3" height="4"><!-- leeg laten --></td>
</tr>
</table>
<!-- EINDE CONTENT -->
</div>
</body>
</html>
include("inc_connect.php")
?>
<!-- CONTENT -->
<style type="text/css">
<!--
#Layer1 {
position:absolute;
left:445px;
top:5px;
width:432px;
height:53px;
z-index:1;
}
#Layer2 {
position:absolute;
left:435px;
top:100px;
width:458px;
height:199px;
z-index:1;
}
#Layer3 {
position:absolute;
left:10px;
top:535px;
width:86px;
height:28px;
z-index:4;
}
#Layer4 {
position:absolute;
left:10px;
top:131px;
width:86px;
height:28px;
z-index:5;
}
#Layer5 {
position:absolute;
left:10px;
top:165px;
width:86px;
height:28px;
z-index:4;
}
#Layer6 {
position:absolute;
left:10px;
top:199px;
width:86px;
height:28px;
z-index:5;
}
.style1 {color: #FFFFFF}
-->
</style>
<body background="../images/achtergrond.JPG">
<div id="Layer1"><h1 class="style1">Delete Project</h1></div>
<div id="Layer3"><a href="../Logout.php"><img src="../images/log_out.png" width="118" height="26" border="0"></a></div>
<div id="Layer4"><a href="Development.php"><img src="../images/home.jpg" width="118" height="26" border="0"></a></div>
<div id="Layer5"><a href="open_projects.php"><img src="../images/open_prj.jpg" width="118" height="26" border="0"></a></div>
<div id="Layer6"><a href="new_projects.php"><img src="../images/new_prj.jpg" width="118" height="26" border="0"></a></div>
<div id="Layer2"><table border="0" cellpadding="0" cellspacing="0" background="../images/adminpanel/bg_content.jpg" width="500" height="481">
<tr>
<td colspan="3" height="4"><!-- leeg laten --></td>
</tr>
<tr>
<td width="4"><!-- leeg laten --></td>
<td valign="top" align="center">
<table border="0" cellpadding="0" cellspacing="0" width="492" height="20">
<tr>
<td colspan="2" height="10"></td>
</tr>
<tr>
<td colspan="2" height="20"></td>
</tr>
<tr>
<td align="left"><font class="tekst_italic_pad">Would you like to delete this project?</font></td>
<td align="right"></td>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="492" >
<tr>
<td colspan="4" height="15"><!-- leeg laten --></td>
</tr>
<tr>
<td width="10"></td>
<?php
if (isset($_POST["bevestiging"])){
$query="DELETE FROM project WHERE project_id='" .$_POST["id"] . "'";
$result = mysql_query($query) or die ("FOUT: " . mysql_error());
if ($result){
echo ("<td colspan=\"2\"><font class=\"tekst_bold\">Record nummer " .$_POST["id"] . " is verwijderd<br></font>\n");
}
}else{
$query="SELECT project_id, Date, applications, hardware, software, appointment, int_cnt_prs FROM project WHERE project_id='" .$_GET["ID"] . "'";
$result = mysql_query($query) or die ("FOUT: " .mysql_error());
$result = mysql_query("SELECT project_id, Date, applications, hardware, software, appointment, int_cnt_prs FROM project WHERE project_id='" .$_GET["ID"] . "'");
while ($row = mysql_fetch_array($result)){
$ID = $row["project_id"];
$Date = $row["Date"];
$applications = $row["applications"];
$hardware = $row["hardware"];
$software = $row["software"];
$appointment = $row["appointment"];
$int_cnt_prs = $row["int_cnt_prs"];
echo("
<td width=\"150\"><font class=\"tekst_bold\"><b>Date:</b></font></td>
<td ><font class=\"tekst\">$Date</font></td>
</tr>
<tr>
<td width=\"10\"></td>
<td width=\"150\"><font class=\"tekst_bold\"><b>Applications:</b></font></td>
<td><font class=\"tekst\">$applications</font></td>
</tr>
<tr>
<td width=\"10\"></td>
<td width=\"150\"><font class=\"tekst_bold\"><b>Hardware:</b></font></td>
<td><font class=\"tekst\">$hardware</font></td>
</tr>
<tr>
<td width=\"10\"></td>
<td width=\"150\"><font class=\"tekst_bold\"><b>Software:</b></font></td>
<td><font class=\"tekst\">$software</font></td>
</tr>
<tr>
<td width=\"10\"></td>
<td width=\"150\"><font class=\"tekst_bold\"><b>Appointment:</b></font></td>
<td><font class=\"tekst\">$appointment</font></td>
</tr>
<tr>
<td width=\"10\"></td>
<td width=\"150\"><font class=\"tekst_bold\"><b>Internal Contact Person:</b></font></td>
<td><font class=\"tekst\">$int_cnt_prs</font></td>
</tr>
");
}
?>
<tr>
<td colspan="3" height="10"><!-- leeg laten --></td>
</tr>
<tr>
<form action="<?php echo($_SERVER["PHP_SELF"]);?>" method="post">
<input type="hidden" name="bevestiging" value="1"><input type="hidden" name="id" value="<?php echo($_GET["ID"])?>">
<td width="10"></td>
<td width="90"></td>
<td><input class="button2" type="Submit" value="Delete"></td>
</form>
</tr>
</table>
<?php
}
?>
</td>
<td width="4"><!-- leeg laten --></td>
</tr>
<tr>
<td colspan="3" height="4"><!-- leeg laten --></td>
</tr>
</table>
<!-- EINDE CONTENT -->
</div>
</body>
</html>
Gewijzigd op 01/01/1970 01:00:00 door Guido Piket
Gebruik postgre SQL, maak een FK aan die de relatie tussen factuur.project_id en project.id vast legt, en hang daar een RESTRICT aan. Dan kun je het project pas verwijderen wanneer er geen facturen meer aanhangen..
Gewijzigd op 01/01/1970 01:00:00 door Guido Piket
Als je niet "de balen verstand" van PHP hebt zou ik eerst met iets simpelers beginnen.
heb het nodig voor een project van school
Edit:
We helpen mensen bij scripts die ze zelf gemaakt hebben en we geven ze dus duwtjes in de goede richting.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Gewijzigd op 01/01/1970 01:00:00 door Guido Piket
Daaraan voorafgaand zou je eerst een query moeten uitvoeren waarin je checkt hoeveel hoeveel facturen er zijn met dat project_id
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql = "
SELECT COUNT(id) AS aantal
FROM facturen
WHERE project_id = " . $_POST['id'];
if ($res = mysql_query ($sql)) {
if (mysql_num_rows ($res) == 0) {
// nu kun je je delete query uitvoeren
}
}
?>
$sql = "
SELECT COUNT(id) AS aantal
FROM facturen
WHERE project_id = " . $_POST['id'];
if ($res = mysql_query ($sql)) {
if (mysql_num_rows ($res) == 0) {
// nu kun je je delete query uitvoeren
}
}
?>
Zorg dat je je database goed inricht. Leg de juiste relaties tussen je tabel met projecten en je tabel met facturen.
Vervolgens kun je bij het verwijderen van een project eerst de status van alle facturen horend bij dat project controleren en als er 1 niet betaald is, gaat het verwijderen dus niet door. Kwestie van een SELECT query uitvoeren een if/else constructie gebruiken om de voorwaarde te controleren...
ps. @Jan: het gaat om niet betaalde facturen. Ervan uitgaande dat je betaalde facturen gewoon in de database bewaart, werkt jouw scriptje niet. Er zal echt op status van een factuur gecontroleerd moeten worden.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Oke dank je wel, maar het gaat er niet om of er facturen zijn, maar ze mogen niet de status Invoice sent, Invoice reminder sent of Invoice not paid hebben, hebben ze deze wel dan moet er (als het kan in rode letters) een waarschuwing komen dat niet alle facturen zijn betaalt en dat het niet mogelijk is om dit project te verwijderen
Code (php)
1
2
3
4
2
3
4
SELECT COUNT(*) AS aantal
FROM facturen
WHERE status <> 'Invoice paid'
AND project_id = 1
FROM facturen
WHERE status <> 'Invoice paid'
AND project_id = 1
Die 1 vervang je natuurlijk door een variabele. Vervolgens dit resultaat even fetchen en kijken wat de waarde van 'aantal' is. Als dat > 0 is, zijn er dus nog openstaande facturen en kan het project niet verwijderd worden.
en dat laatste stuk van je snap ik niet echt :
Die 1 vervang je natuurlijk door een variabele. Vervolgens dit resultaat even fetchen en kijken wat de waarde van 'aantal' is. Als dat > 0 is, zijn er dus nog openstaande facturen en kan het project niet verwijderd worden
@ Blanche: klopt, die controle op status is belangrijk. Die SELECT COUNT(*) die jij gebruikt is een speciale constructie binnen MySQL die alleen sneller werkt als je geen WHERE condition hebt.
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
<?php
$sql = "
SELECT COUNT(id) AS aantal
FROM facturen
WHERE status <> 'Invoice paid'
AND project_id = 1
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error());
}
else
{
$row = mysql_fetch_assoc($res);
if($row['aantal'] > 0)
{
// Project kan niet verwijderd worden!
}
}
?>
$sql = "
SELECT COUNT(id) AS aantal
FROM facturen
WHERE status <> 'Invoice paid'
AND project_id = 1
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error());
}
else
{
$row = mysql_fetch_assoc($res);
if($row['aantal'] > 0)
{
// Project kan niet verwijderd worden!
}
}
?>
edit:
Quote:
Ik lees het hier ook in de handleiding. In dat geval dus toch liever een kolomnaam opgeven...SELECT COUNT(*) die jij gebruikt is een speciale constructie binnen MySQL die alleen sneller werkt als je geen WHERE condition hebt.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Ik vind dit topic een typisch geval van een simpele foreign key instellen en klaar. Geen SELECT-onzin, gewoon DELETE FROM en kijken of je een error terug krijgt. Scheelt je code en een SQL query. Eigenlijk zoals PHP Newbie zei.
Mocht je minder code willen, dan zou je hier natuurlijk een stored procedure voor kunnen schrijven die de controle voor je uitvoert. In dat geval hoef je alleen nog de SP aan te roepen in je script.
Voorbeeldje:
Code (php)
1
2
2
DELETE FROM films USING producers
WHERE producer_id = producers.id AND producers.name = 'foo';
WHERE producer_id = producers.id AND producers.name = 'foo';
Dit werkt zowel in MySQL als PostgreSQL.
Edit: Een stored procedure is dus niet nodig.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Mooie oplossing inderdaad, helemaal niet aan gedacht :)
En nog een tip van een leek. Zet statusen in een aparte table en ga met status id's werken :)