Goede gastenboek code?
Ik wil graag even weten of deze code strict PHP5 is?
En ik wil weten wat er moet veranderen en of hij veilig is?
En of hij in de script-lib kan?
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
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
<?php
## Error reporting ##
error_reporting(E_ALL);
ini_set('display_errors', '1');
## MySQL informatie ##
$mysql_host = "localhost";
$mysql_user = "root";
$mysql_pass = "";
$mysql_database = "gastenboek";
$mysql_tabel = "gastenboek1";
## Mysqli connect maken ##
$mysqli = @mysqli_connect($mysql_host, $mysql_user, $mysql_pass, $mysql_database);
if(mysqli_connect_errno()) {
echo "ERROR: Kan geen verbinding maken met de MySQL Server.<br /><br />\n";
} else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Gastenboek</title>
</head>
<body>
<?php
## Query 1 ##
$sql = "SELECT id, title, message, username FROM " . $mysql_tabel . " LIMIT 50";
$query = mysqli_query($mysqli, $sql);
## Query 1 check + Berichten laten zien ##
if(!$query) {
echo "ERROR: Fout in de MySQL Query.<br /><br />\n";
} else {
$count = (int) mysqli_num_rows( $query );
if($count > 0) {
while($row = mysqli_fetch_assoc($query)) {
if(!$row['username'] == "") {
echo "<b>" . (int) $row['id'] . ":</b> <b>" . $row['title'] . " - By " . $row['username'] . "</b><br />\n";
echo $row['message'] . "\n";
echo "<br /><br />\n\n";
}
}
} else {
echo "Geen gastenboek berichten gevonden.<br /><br />\n";
}
}
?>
<br />
<h3>Nieuwe reactie</h3>
<?php
## Nieuwe Reactie ##
if($_SERVER['REQUEST_METHOD'] == 'POST') {
foreach($_POST as $name => $value) {
## De POST variablen ##
$_POST[$name] = mysqli_real_escape_string($mysqli, sprintf("%s", $value) );
$lenght = (int) strlen( $_POST[$name] );
## Nieuwe Reactie check ##
if(!$_POST[$name] == null) {
if($lenght >= 5) {
$insert = true;
$error = null;
} else {
$insert = false;
$error = "Gelieve alle velden invullen.<br /><br />\n";
}
} else {
$insert = false;
$error = "Gelieve alle velden invullen.<br /><br />\n";
}
}
if(!$error == null) {
echo $error;
} else {
if($insert == true) {
$sql = "INSERT INTO " . $mysql_tabel . " VALUES ('', '" . $_POST['title'] . "', '" . $_POST['message'] . "', '" . $_POST['username'] . "')";
if(mysqli_query($mysqli, $sql)) {
echo "<meta http-equiv=\"REFRESH\" content=\"2; url=./\">\n";
echo "Je bericht is geplaatst.<br />\n";
echo "Even geduld alstublieft...<br /><br />\n";
} else {
echo "Er is een onbekende error opgetreden probeer het opnieuw.<br /><br />\n";
}
} else {
echo "Er is een onbekende error opgetreden probeer het opnieuw.<br /><br />\n";
}
}
}
?>
<form action="./" method="post">
<table>
<tr>
<td valign="top" width="80"><b>Naam:</b></td>
<td valign="top"><input type="text" name="username" id="username" size="39" maxlength="20" /></td>
</tr>
<tr>
<td valign="top" width="80"><b>Title:</b></td>
<td valign="top"><input type="text" name="title" id="title" size="39" maxlength="20" /></td>
</tr>
<tr>
<td valign="top" width="80"><b>Message:</b></td>
<td valign="top"><textarea cols="30" rows="5" name="message" id="message"></textarea></td>
</tr>
<tr>
<td><input type="submit" value="Verstuur" /></td>
</tr>
</table>
</form>
</body>
</html>
<?php
}
## De MySQL verbinding sluiten ##
mysqli_close($mysqli);
?>
## Error reporting ##
error_reporting(E_ALL);
ini_set('display_errors', '1');
## MySQL informatie ##
$mysql_host = "localhost";
$mysql_user = "root";
$mysql_pass = "";
$mysql_database = "gastenboek";
$mysql_tabel = "gastenboek1";
## Mysqli connect maken ##
$mysqli = @mysqli_connect($mysql_host, $mysql_user, $mysql_pass, $mysql_database);
if(mysqli_connect_errno()) {
echo "ERROR: Kan geen verbinding maken met de MySQL Server.<br /><br />\n";
} else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Gastenboek</title>
</head>
<body>
<?php
## Query 1 ##
$sql = "SELECT id, title, message, username FROM " . $mysql_tabel . " LIMIT 50";
$query = mysqli_query($mysqli, $sql);
## Query 1 check + Berichten laten zien ##
if(!$query) {
echo "ERROR: Fout in de MySQL Query.<br /><br />\n";
} else {
$count = (int) mysqli_num_rows( $query );
if($count > 0) {
while($row = mysqli_fetch_assoc($query)) {
if(!$row['username'] == "") {
echo "<b>" . (int) $row['id'] . ":</b> <b>" . $row['title'] . " - By " . $row['username'] . "</b><br />\n";
echo $row['message'] . "\n";
echo "<br /><br />\n\n";
}
}
} else {
echo "Geen gastenboek berichten gevonden.<br /><br />\n";
}
}
?>
<br />
<h3>Nieuwe reactie</h3>
<?php
## Nieuwe Reactie ##
if($_SERVER['REQUEST_METHOD'] == 'POST') {
foreach($_POST as $name => $value) {
## De POST variablen ##
$_POST[$name] = mysqli_real_escape_string($mysqli, sprintf("%s", $value) );
$lenght = (int) strlen( $_POST[$name] );
## Nieuwe Reactie check ##
if(!$_POST[$name] == null) {
if($lenght >= 5) {
$insert = true;
$error = null;
} else {
$insert = false;
$error = "Gelieve alle velden invullen.<br /><br />\n";
}
} else {
$insert = false;
$error = "Gelieve alle velden invullen.<br /><br />\n";
}
}
if(!$error == null) {
echo $error;
} else {
if($insert == true) {
$sql = "INSERT INTO " . $mysql_tabel . " VALUES ('', '" . $_POST['title'] . "', '" . $_POST['message'] . "', '" . $_POST['username'] . "')";
if(mysqli_query($mysqli, $sql)) {
echo "<meta http-equiv=\"REFRESH\" content=\"2; url=./\">\n";
echo "Je bericht is geplaatst.<br />\n";
echo "Even geduld alstublieft...<br /><br />\n";
} else {
echo "Er is een onbekende error opgetreden probeer het opnieuw.<br /><br />\n";
}
} else {
echo "Er is een onbekende error opgetreden probeer het opnieuw.<br /><br />\n";
}
}
}
?>
<form action="./" method="post">
<table>
<tr>
<td valign="top" width="80"><b>Naam:</b></td>
<td valign="top"><input type="text" name="username" id="username" size="39" maxlength="20" /></td>
</tr>
<tr>
<td valign="top" width="80"><b>Title:</b></td>
<td valign="top"><input type="text" name="title" id="title" size="39" maxlength="20" /></td>
</tr>
<tr>
<td valign="top" width="80"><b>Message:</b></td>
<td valign="top"><textarea cols="30" rows="5" name="message" id="message"></textarea></td>
</tr>
<tr>
<td><input type="submit" value="Verstuur" /></td>
</tr>
</table>
</form>
</body>
</html>
<?php
}
## De MySQL verbinding sluiten ##
mysqli_close($mysqli);
?>
Alvast bedankt
Gewijzigd op 28/03/2011 15:49:41 door Maarten PHP
errorfunc.configuration#ini.error-reporting.
Voor de rest:
- Getallen (integers) horen niet tussen quotes (" / ').
- Zet display_errors uit op live website.
- Doe geen foutonderdrukking met @ maar bouw foutafhandeling in met de waarden die je terugkrijgt van de functies.
- Maak een volledige pagina, ook bij fouten.
- Mogen er van jou regels zijn in de database die geen username bevatten?
- Een post waarde zal nooit null zijn, wel empty.
- Waarvor dient $insert?
- Meta refresh hoort niet midden op de pagina.
- Formulieren horen niet in tabellen te zitten.
Of die strict is kan je zien met een bepaalde error reporting level: Voor de rest:
- Getallen (integers) horen niet tussen quotes (" / ').
- Zet display_errors uit op live website.
- Doe geen foutonderdrukking met @ maar bouw foutafhandeling in met de waarden die je terugkrijgt van de functies.
- Maak een volledige pagina, ook bij fouten.
- Mogen er van jou regels zijn in de database die geen username bevatten?
- Een post waarde zal nooit null zijn, wel empty.
- Waarvor dient $insert?
- Meta refresh hoort niet midden op de pagina.
- Formulieren horen niet in tabellen te zitten.
En misschien wat meer commentaar zodat mensen die die code dan willen gebruiken meer weten over wat welke functie doet in de code
Maikel B op 28/03/2011 15:57:32:
En misschien wat meer commentaar zodat mensen die die code dan willen gebruiken meer weten over wat welke functie doet in de code
Dat hoeft niet per se vind ik. Functies die hij gebruikt zitten standaart in php, die kun je dus op php.net opzoeken, zoals bijvoorbeeld: http://php.net/mysqli_connect of mysqli_connect.
Overcommentaren is ook niet goed.
PHP bovenaan de pagina en de HTML onderaan. Alles staat nu door elkaar...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
//connect, foutafh enz.
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
//post waardes ophalen
}
//html enz.
?>
//connect, foutafh enz.
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
//post waardes ophalen
}
//html enz.
?>
Karl Karl op 28/03/2011 15:53:34:
Of die strict is kan je zien met een bepaalde error reporting level: errorfunc.configuration#ini.error-reporting.
Voor de rest:
- Getallen (integers) horen niet tussen quotes (" / ').
- Zet display_errors uit op live website.
- Doe geen foutonderdrukking met @ maar bouw foutafhandeling in met de waarden die je terugkrijgt van de functies.
- Maak een volledige pagina, ook bij fouten.
- Mogen er van jou regels zijn in de database die geen username bevatten?
- Een post waarde zal nooit null zijn, wel empty.
- Waarvor dient $insert?
- Meta refresh hoort niet midden op de pagina.
- Formulieren horen niet in tabellen te zitten.
Voor de rest:
- Getallen (integers) horen niet tussen quotes (" / ').
- Zet display_errors uit op live website.
- Doe geen foutonderdrukking met @ maar bouw foutafhandeling in met de waarden die je terugkrijgt van de functies.
- Maak een volledige pagina, ook bij fouten.
- Mogen er van jou regels zijn in de database die geen username bevatten?
- Een post waarde zal nooit null zijn, wel empty.
- Waarvor dient $insert?
- Meta refresh hoort niet midden op de pagina.
- Formulieren horen niet in tabellen te zitten.
Als jij overal alle punten altijd zegt (Het is goed) maar dan zou ik wel eens jouw versie van deze code willen zien dat weet ik ook precies wat ik moet verbeteren snap je?
En met strict bedoel ik of het niet PHP4 code is en of het goede en moderne code is
Gewijzigd op 28/03/2011 17:44:42 door Maarten PHP
mysqli ipv de "functies" die je nu gebruikt?
Waarom geen gebruik maken van de class Chris Horeweg op 28/03/2011 17:37:53:
Waarom geen gebruik maken van de class mysqli ipv de "functies" die je nu gebruikt?
Dat vind ik NU nog te ingewikkeld.
EDIT:
Het bovenste stukje van mijn code heb ik veranderd in:
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
## Site Mode ##
define("DEBUG", true);
## Error reporting ##
if($_SERVER['SERVER_NAME'] == "localhost") {
$errors = 1;
} else {
$errors = 0;
}
error_reporting(E_ALL);
ini_set('display_errors', $errors);
?>
## Site Mode ##
define("DEBUG", true);
## Error reporting ##
if($_SERVER['SERVER_NAME'] == "localhost") {
$errors = 1;
} else {
$errors = 0;
}
error_reporting(E_ALL);
ini_set('display_errors', $errors);
?>
Gewijzigd op 28/03/2011 17:44:57 door Maarten PHP
Daarnaast wat Bram zegt, HTML en PHP gescheiden houden ..
Even iets heel anders, en zijn al zoveel gastenboek aan de library toegevoegd dat je misschien beter iets anders kan zoeken. Wat maakt jouw gastenboek beter tegenover de andere?
Misschien is het leuk om iets te realiseren wat nog niet bestaat?
Niels Kieviet op 28/03/2011 18:40:48:
je action ./ is een beetje raar? Kan je het beste gewoon leeg laten..
Daarnaast wat Bram zegt, HTML en PHP gescheiden houden ..
Even iets heel anders, en zijn al zoveel gastenboek aan de library toegevoegd dat je misschien beter iets anders kan zoeken. Wat maakt jouw gastenboek beter tegenover de andere?
Misschien is het leuk om iets te realiseren wat nog niet bestaat?
Daarnaast wat Bram zegt, HTML en PHP gescheiden houden ..
Even iets heel anders, en zijn al zoveel gastenboek aan de library toegevoegd dat je misschien beter iets anders kan zoeken. Wat maakt jouw gastenboek beter tegenover de andere?
Misschien is het leuk om iets te realiseren wat nog niet bestaat?
Ik zal hiermee gaan spelen en bedankt voor de informatie wat wel en niet moet.
Alleen ik weet niet wat ik moet maken :(
Gewijzigd op 28/03/2011 20:32:50 door Maarten PHP
Achter de schermen zijn we bezig een plan te bedenken om de script lib op te ruimen waaronder de scripts van net begonnen mensen die niet weten wat ze doen.
Dit is niet bedoeld om negatief te doen maar bespaar jezelf de moeite om je script in de lib te plaatsen. Verder ben je al op de goede weg (ik heb er 3 jaar over gedaan en nog maak ik fouten).
Om te oefenen kun je er misschien nog een admin gedeelte maken dat je de posts kunt verwijderen en bewerken en zo bouw je er steeds een stukje bij.
PHPer PHPer op 28/03/2011 17:35:21:
Als jij overal alle punten altijd zegt (Het is goed) maar dan zou ik wel eens jouw versie van deze code willen zien dat weet ik ook precies wat ik moet verbeteren snap je?
En met strict bedoel ik of het niet PHP4 code is en of het goede en moderne code is
Karl Karl op 28/03/2011 15:53:34:
Of die strict is kan je zien met een bepaalde error reporting level: errorfunc.configuration#ini.error-reporting.
Voor de rest:
- Getallen (integers) horen niet tussen quotes (" / ').
- Zet display_errors uit op live website.
- Doe geen foutonderdrukking met @ maar bouw foutafhandeling in met de waarden die je terugkrijgt van de functies.
- Maak een volledige pagina, ook bij fouten.
- Mogen er van jou regels zijn in de database die geen username bevatten?
- Een post waarde zal nooit null zijn, wel empty.
- Waarvor dient $insert?
- Meta refresh hoort niet midden op de pagina.
- Formulieren horen niet in tabellen te zitten.
Voor de rest:
- Getallen (integers) horen niet tussen quotes (" / ').
- Zet display_errors uit op live website.
- Doe geen foutonderdrukking met @ maar bouw foutafhandeling in met de waarden die je terugkrijgt van de functies.
- Maak een volledige pagina, ook bij fouten.
- Mogen er van jou regels zijn in de database die geen username bevatten?
- Een post waarde zal nooit null zijn, wel empty.
- Waarvor dient $insert?
- Meta refresh hoort niet midden op de pagina.
- Formulieren horen niet in tabellen te zitten.
Als jij overal alle punten altijd zegt (Het is goed) maar dan zou ik wel eens jouw versie van deze code willen zien dat weet ik ook precies wat ik moet verbeteren snap je?
En met strict bedoel ik of het niet PHP4 code is en of het goede en moderne code is
Als je weet dat ik dit bijna overal bij plaats, dan had je dit ook kunnen verwachten en dus op kunnen voorbereiden door deze punten goed te doen ;-)
Ja dat kan maar ik loop met die dingen/opdrachten vaak de fout in