Script review
Kortom gaarne wat opmerkingen tips over de opbouw:
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
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
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
$host = 'localhost';
$databaseUsername = 'xxxx';
$databasePassword = 'xxxx';
$database = 'vaarweginfo';
$connection = new mysqli($host, $databaseUsername, $databasePassword, $database);
if ($connection->connect_errno > 0) {
die ('Unable to connect to database [' . $connection->connect_error . ']');
}
$sql = "SELECT DATE_FORMAT(datetime, '%d-%m-%Y') AS datetime
FROM vaarweginfo
LIMIT 1";
if (!$result = $connection->query($sql)) {
die ('There was an error running query[' . $connection->error . ']');
}
$row = $result->fetch_array();
$datetime = $row['datetime'];
$sql = "SELECT notice
,vaarweg
,trajectbeperking
,beperking
,onderwerp
,reden
,DATE_FORMAT(periode_van, '%d-%m-%Y') AS periode_chr
,extra_informatie
,datetime
FROM vaarweginfo
WHERE gebied = 'Nord-Est'
ORDER by land, periode_van, vaarweg";
if (!$result = $connection->query($sql)) {
die ('There was an error running query[' . $connection->error . ']');
}
?>
<style type="text/css">
p.sansserif {
font-family: Arial, Helvetica, sans-serif;
font-size:80%;
}
p.vfont {
font-family: verdana,arial,sans-serif ;
font-size:75%;
}
table.table-style-one {
font-family: verdana,arial,sans-serif;
font-size:11px;
color:#333333;
border-width: 1px;
border-color: #3A3A3A;
border-collapse: collapse;
}
table.table-style-one th {
border-width: 1px;
padding: 8px;
border-style: solid;
border-color: #3A3A3A;
background-color: #B3B3B3;
}
table.table-style-one td {
border-width: 1px;
padding: 8px;
border-style: solid;
border-color: #3A3A3A;
background-color: #ffffff;
}
</style>
<!-- Table goes in the document BODY -->
<br>
<p class="vfont">Je ziet nu Frankrijk, VNF district: <b>Nord-Est </b> (d.d. <?php echo $datetime; ?>)</p>
<br>
<br>
<table class="table-style-one">
<thead>
<tr>
<th>Bericht</th>
<th>Vaarweg</th>
<th>Trajectbeperking</th>
<th>Beperking</th>
<th>Onderwerp</th>
<th>Startdatum</th>
<th>Reden</th>
<th>Extra Informatie</th>
</tr>
</thead>
<tbody>
<?php
while ($row = $result->fetch_array()) {
echo "<tr>";
echo "<td>" . $row['notice'] . "</td>";
echo "<td>" . $row['vaarweg'] . "</td>";
echo "<td>" . $row['trajectbeperking'] . "</td>";
echo "<td>" . $row['beperking'] . "</td>";
echo "<td>" . $row['onderwerp'] . "</td>";
echo "<td>" . $row['reden'] . "</td>";
echo "<td>" . $row['periode_chr'] . "</td>";
echo "<td>" . $row['extra_informatie'] . "</td>";
echo "</tr>";
}
?>
</tbody>
</table>
error_reporting(E_ALL);
ini_set('display_errors', '1');
$host = 'localhost';
$databaseUsername = 'xxxx';
$databasePassword = 'xxxx';
$database = 'vaarweginfo';
$connection = new mysqli($host, $databaseUsername, $databasePassword, $database);
if ($connection->connect_errno > 0) {
die ('Unable to connect to database [' . $connection->connect_error . ']');
}
$sql = "SELECT DATE_FORMAT(datetime, '%d-%m-%Y') AS datetime
FROM vaarweginfo
LIMIT 1";
if (!$result = $connection->query($sql)) {
die ('There was an error running query[' . $connection->error . ']');
}
$row = $result->fetch_array();
$datetime = $row['datetime'];
$sql = "SELECT notice
,vaarweg
,trajectbeperking
,beperking
,onderwerp
,reden
,DATE_FORMAT(periode_van, '%d-%m-%Y') AS periode_chr
,extra_informatie
,datetime
FROM vaarweginfo
WHERE gebied = 'Nord-Est'
ORDER by land, periode_van, vaarweg";
if (!$result = $connection->query($sql)) {
die ('There was an error running query[' . $connection->error . ']');
}
?>
<style type="text/css">
p.sansserif {
font-family: Arial, Helvetica, sans-serif;
font-size:80%;
}
p.vfont {
font-family: verdana,arial,sans-serif ;
font-size:75%;
}
table.table-style-one {
font-family: verdana,arial,sans-serif;
font-size:11px;
color:#333333;
border-width: 1px;
border-color: #3A3A3A;
border-collapse: collapse;
}
table.table-style-one th {
border-width: 1px;
padding: 8px;
border-style: solid;
border-color: #3A3A3A;
background-color: #B3B3B3;
}
table.table-style-one td {
border-width: 1px;
padding: 8px;
border-style: solid;
border-color: #3A3A3A;
background-color: #ffffff;
}
</style>
<!-- Table goes in the document BODY -->
<br>
<p class="vfont">Je ziet nu Frankrijk, VNF district: <b>Nord-Est </b> (d.d. <?php echo $datetime; ?>)</p>
<br>
<br>
<table class="table-style-one">
<thead>
<tr>
<th>Bericht</th>
<th>Vaarweg</th>
<th>Trajectbeperking</th>
<th>Beperking</th>
<th>Onderwerp</th>
<th>Startdatum</th>
<th>Reden</th>
<th>Extra Informatie</th>
</tr>
</thead>
<tbody>
<?php
while ($row = $result->fetch_array()) {
echo "<tr>";
echo "<td>" . $row['notice'] . "</td>";
echo "<td>" . $row['vaarweg'] . "</td>";
echo "<td>" . $row['trajectbeperking'] . "</td>";
echo "<td>" . $row['beperking'] . "</td>";
echo "<td>" . $row['onderwerp'] . "</td>";
echo "<td>" . $row['reden'] . "</td>";
echo "<td>" . $row['periode_chr'] . "</td>";
echo "<td>" . $row['extra_informatie'] . "</td>";
echo "</tr>";
}
?>
</tbody>
</table>
lees over exceptions en ga ze gebruiken, want dat maakt het leven een stuk makkelijker.
- Ga een template-eningine gebruiken, om de HTML te scheiden van het script. Als je de logica (de code) los houdt van de presentatie dan wordt het een stuk makkelijker om te beheren. Je kunt in principe ook aparte PHP scripts gebruiken in plaats van templates, maar dan moet je wel sterk zijn in discipline om niet ook code in de templates te gaan zetten.
- zaken als display-error en error-reporting mogen wel aan staan tijdens het ontwikkelen, maar moeten echt uit als het scipt ergens online komt te staan. In die meldingen staat veel gevoelige informatie die hackers kunnen gebruiken.
Je kunt ook meteen alvast beginnen met functies te maken die taken kunnen bevatten die je waarschijnlijk meerdere keren nodig gaat hebben, zodat je een bibliotheek van veelgebruikte routines kunt aanleggen. Idealiter zet je dat in classes, maar dat gaat weer een stap verder.
op regel 16 haal je 1 datum op uit de tabel. Welke is een verrassing. Waarschijnlijk de eerst ingevoerde?
wil je daar niet een order by bij hebben? Bijvoorbeeld om de laatste datum op te halen?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$sql = "SELECT DATE_FORMAT(datetime, '%d-%m-%Y') AS mijndatum
FROM vaarweginfo
ORDER BY datetime DESC
LIMIT 1";
?>
$sql = "SELECT DATE_FORMAT(datetime, '%d-%m-%Y') AS mijndatum
FROM vaarweginfo
ORDER BY datetime DESC
LIMIT 1";
?>
NB: zie dat ik voor de alias niet weer datetime heb gekozen, maar mijndatum
verderop op regel 24 dus ook $row['mijndatum'] gebruiken.
NB2: "datetime" is niet de handigste naam voor een kolom, aangezien die term ook in SQL al een betekenis heeft
Vervolgens doe je nog een query op dezelfde tabel
Hier haal je alle records op voor alle datums.
Is dat wel je bedoeling? Wil je niet een bepaalde datum hebben?
@Vincent: Ik ga aan de slag met het vermijden van die(). Een template engine?? Geen idee wat je hiermee precies bedoelt. Hoe kan mij dat helpen?
@Ivo: Wellicht vaag maar "datetime" is voor alle records hetzelfde, het gaat hier om de verversingsdatum. Elke nacht om om 00:15 wordt de gehele tabel opnieuw gevuld. Het gaat hier om +/- 2000 records. Wordt middels een linux shell script opgehaald en met IMPORT LOAD DATA INFILE in de tabel geladen.
Ik heb voor de periode_van alias inderdaad niet weer periode_van gekozen omdat anders bij de ORDER BY verkeerd ge-orderd wordt (op deze dan zijnde een ascii gevormde alias).
Het ophalen van een kleine set van +/- 100 records vindt plaats op: WHERE gebied= (momenteel voor test nog hard gecodeerd). Hiermee worden alle records voor een bepaald gebied getoond. Misschien bouw ik nog een filter op vaarweg, naast gebied.
Gewijzigd op 22/10/2016 23:21:00 door Aad B
Gewijzigd op 22/10/2016 23:25:10 door - Ariën -
Quote:
Hoe kan mij dat helpen?
Met een template engine krijg je feitelijk twee bestanden; een PHP bestant dat zich alleen bezig houdt met welke data er van de browser binnenkwam en welke data er weer terug moet naar de browser, en een template die niets anders doet dan de data die terug moet naar de brower in een HTML vorm gieten.
Het script dat je postte is vanaf regel 44 feitelijk een template. Alles tot regel 44 verwerkt inkomende data en bereidt data voor om terug te worden gestuurd naar de browser, en vanaf regel 44 wordt die data in HTML vorm gegoten.
Met een template systeem kun b.v. ook alles tussen regels 44 - 80, en vanaf 122 (ik neem aan dat er nog meer HTML onder staa) in een aparte template zetten zodat je de layout van je pagina kunt hergebruiken op alle pagina's. Je krijgt dan sub-templates vor het tonen van deze tabel, en voor alle andere taken die je op je website doet. Wil je dan de vormgeving van je site iets aanpassen, dan hoef je alleen de hoof template aan te passen, in plaats van elk script afzonderlijk.
En doordat je de data verwerking niet meer in je template hebt staan kun je die ook hergebruiken voor andere pagina's, door botweg de juiste functie aan te roepen en de uitkomst door te geven aan een andere template.
Maar dit is best tricky dus als je het niet direct "ziet" dan is er niets mis met jou, je moet er gewoon even mee spelen.
Gewijzigd op 23/10/2016 10:57:57 door Aad B