Veiligheids vragen
Zou iemand eens naar deze stuk code willen kijken?
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
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
<?php
include "includes/mysql.inc.php";
$ErrorMessage = 'Er is een fout opgetreden, neem a.u.b. contact op met de <a href="mailto:">webmaster</a>';
$objResult = mysql_query("SELECT * FROM ConfigValues", $connection);
if ( !empty ( $objResult ) )
{
while ( $objRow = mysql_fetch_object ( $objResult ) )
{
$SiteName = $objRow->SiteName;
$SiteSlogan = $objRow->SiteSlogan;
$SiteClosed = $objRow->SiteClosed;
$SiteClosedMessage = $objRow->SiteClosedMessage;
if ( $SiteClosed == 1 )
{
echo $SiteClosedMessage;
exit;
}
}
}
else
{
echo $ErrorMessage;
exit;
}
function ShowAllCategories()
{
$objResult = mysql_query("SELECT * FROM AllCategories", $connection);
if ( !empty ( $objResult ) )
{
while ( $objRow = mysql_fetch_object ( $objResult ) )
{
$CategorieID = $objRow->CategorieID;
$CategorieName = $objRow->CategorieName;
$CategorieLink = $objRow->CategorieLink;
$CategorieActive = $objRow->CategorieActive;
}
}
else
{
echo $ErrorMessage;
exit;
}
}
function ShowCategorieProducts()
{
$objResult = mysql_query("SELECT * FROM AllProducts", $connection);
if ( !empty ( $objResult ) )
{
while ( $objRow = mysql_fetch_object ( $objResult ) )
{
$ProductID = $objRow->ProductID;
$ProductName = $objRow->ProductName;
$ProductCategorie = $objRow->ProductCategorie;
$ProductContent = $objRow->ProductContent;
$ProductPrice = $objRow->ProductPrice;
$ProductActive = $objRow->ProductActive;
}
}
else
{
echo $ErrorMessage;
exit;
}
}
?>
include "includes/mysql.inc.php";
$ErrorMessage = 'Er is een fout opgetreden, neem a.u.b. contact op met de <a href="mailto:">webmaster</a>';
$objResult = mysql_query("SELECT * FROM ConfigValues", $connection);
if ( !empty ( $objResult ) )
{
while ( $objRow = mysql_fetch_object ( $objResult ) )
{
$SiteName = $objRow->SiteName;
$SiteSlogan = $objRow->SiteSlogan;
$SiteClosed = $objRow->SiteClosed;
$SiteClosedMessage = $objRow->SiteClosedMessage;
if ( $SiteClosed == 1 )
{
echo $SiteClosedMessage;
exit;
}
}
}
else
{
echo $ErrorMessage;
exit;
}
function ShowAllCategories()
{
$objResult = mysql_query("SELECT * FROM AllCategories", $connection);
if ( !empty ( $objResult ) )
{
while ( $objRow = mysql_fetch_object ( $objResult ) )
{
$CategorieID = $objRow->CategorieID;
$CategorieName = $objRow->CategorieName;
$CategorieLink = $objRow->CategorieLink;
$CategorieActive = $objRow->CategorieActive;
}
}
else
{
echo $ErrorMessage;
exit;
}
}
function ShowCategorieProducts()
{
$objResult = mysql_query("SELECT * FROM AllProducts", $connection);
if ( !empty ( $objResult ) )
{
while ( $objRow = mysql_fetch_object ( $objResult ) )
{
$ProductID = $objRow->ProductID;
$ProductName = $objRow->ProductName;
$ProductCategorie = $objRow->ProductCategorie;
$ProductContent = $objRow->ProductContent;
$ProductPrice = $objRow->ProductPrice;
$ProductActive = $objRow->ProductActive;
}
}
else
{
echo $ErrorMessage;
exit;
}
}
?>
Ben benieuwd wat jullie aan- of opmerkingen zijn ;)
Gewijzigd op 31/07/2010 12:45:11 door PHP Scripter
Stel, je database is onbereikbaar, ligt plat, en je wilt je site uit schakelen. Dan is het toch handiger om een als 'pref' in te stellen in de config :P?
Verder is mysql_fetch_objecterg traag. Gebruik liever mysql_fetch_assoc.
Aar anoniem op 31/07/2010 08:17:43:
Wel tof dat je uit de database het gegeven haalt dat je site gesloten is. Maar waarom haal je dat uit MySQL.
Stel, je database is onbereikbaar, ligt plat, en je wilt je site uit schakelen. Dan is het toch handiger om een als 'pref' in te stellen in de config :P?
Verder is mysql_fetch_objecterg traag. Gebruik liever mysql_fetch_assoc.
Stel, je database is onbereikbaar, ligt plat, en je wilt je site uit schakelen. Dan is het toch handiger om een als 'pref' in te stellen in de config :P?
Verder is mysql_fetch_objecterg traag. Gebruik liever mysql_fetch_assoc.
Bedankt voor jouw reactie Aar. Waarom ik dat uit de database haal? Dat is meer voor onderhoud en/of grote aanpassingen, maar we gaan er vanuit dat dat niet gebruikt zal worden.
Normaal check je hier op true/false
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
while ( $objRow = mysql_fetch_object ( $objResult ) )
{
$SiteName = $objRow->SiteName;
......
}
?>
while ( $objRow = mysql_fetch_object ( $objResult ) )
{
$SiteName = $objRow->SiteName;
......
}
?>
Wat is het nut om de $vars ongewijzigd te kopïeren?
En dat net zo vaak als de while() loopt.
Je vangt uiteraard alleen de laatste.
Kan dat niet netter?
$connection en $ErrorMessage zijn onbekend in de function.
Verder moet ik zeggen dat het zeer overzichtelijk is gescript.
Gewijzigd op 31/07/2010 12:33:41 door - SanThe -
- De functie !empty kan toch prima werken? Of moet ik dat oplossen met mysql_num_rows?
- Het is toch veel makkelijker om overal even een variabel $ te kunnen droppen dan de gehele objRow erbij?
- exit() kan ik toch zo vervangen:
Gewijzigd op 31/07/2010 12:40:12 door PHP Scripter
PHP Scripter op 31/07/2010 12:39:45:
SanThe bedankt,
- De functie !empty kan toch prima werken? Of moet ik dat oplossen met mysql_num_rows?
- De functie !empty kan toch prima werken? Of moet ik dat oplossen met mysql_num_rows?
Hier een voorbeeld dat ik kant en klaar heb staan om wat standaard php dingetjes uit te leggen:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){
//geweldig, formuliertje verzonden, daar kunnen we wat mee
$query = "SELECT nickname, woonplaats FROM gebruikers";
if(isset($_GET['woonplaats'])){
//Er is een woonplaats gespecificeerd
//We willen alleen mensen die uit de ingevuld woonplaats komen
$query .= "WHERE woonplaats = '".mysql_real_escape_string($_GET['woonplaats'])."'";
}
if(!$result = mysql_query($query)){
trigger_error('Error in query. Tadaa: <br />'.mysql_error());
}
else{
//query gelukt
while($rows = mysql_fetch_assoc($result)){
echo 'Nickname: '.$rows['nickname'].', woonplaats: '.$rows['woonplaats'].'<br />';
}
}
}
else {
//Formulier laten zien
echo 'Ik ben een formulier!';
}
?>
if($_SERVER['REQUEST_METHOD'] == "POST"){
//geweldig, formuliertje verzonden, daar kunnen we wat mee
$query = "SELECT nickname, woonplaats FROM gebruikers";
if(isset($_GET['woonplaats'])){
//Er is een woonplaats gespecificeerd
//We willen alleen mensen die uit de ingevuld woonplaats komen
$query .= "WHERE woonplaats = '".mysql_real_escape_string($_GET['woonplaats'])."'";
}
if(!$result = mysql_query($query)){
trigger_error('Error in query. Tadaa: <br />'.mysql_error());
}
else{
//query gelukt
while($rows = mysql_fetch_assoc($result)){
echo 'Nickname: '.$rows['nickname'].', woonplaats: '.$rows['woonplaats'].'<br />';
}
}
}
else {
//Formulier laten zien
echo 'Ik ben een formulier!';
}
?>
Zeker geen perfect voorbeeld, maar het voldoet en is voor hobby-php'ers prima te begrijpen. Kijk goed naar het gedeelte waar de query wordt uitgevoerd. Ik heb het wat verkort, je kan het namelijk ook splitsen in 2 delen:
Maar het komt op hetzelfde neer. Wat je doet is query uitvoeren. Als die mislukt zal je $result variabele niet een mysql resource bevatten (niet echt uit te leggen (door mij) wat dat is), en dus evalueren als false in je if-gedeelte :)
Zoals je ziet gebruik ik daarna mysql_fetch_assoc($result) , waarna je gegevens kan aanspreken door $rows['kolomnaam'] .
Quote:
- Het is toch veel makkelijker om overal even een variabel $ te kunnen droppen dan de gehele objRow erbij?
Ik snap even niet helemaal wat je probeert te bereiken. Waarom wil je variabelen dropppen, nergens voor nodig. Daar zal je geheugengebruik heus niet van uit de spuigaten lopen.
Quote:
Kijk, nu word het interessant! Je wilt nooit je script zomaar helemaal afkappen (in ieder geval sowieso niet op een normale website, spreek hier niet over een API o.i.d. ) . Een bijzonder mooie tutorial over foutafhandeling staat hier:
Foutafhandeling in PHP (Error Handling)
Daar word langzaam naar de ideale foutafhandeling toegewerkt: exceptions. Lees dat eens goed door, dan zul je zien dat exceptions awesome zijn :) Je hoeft zeker je hele site niet OOP (object geörienteerd) te programmeren om goed gebruik te maken van exceptions, máár de exceptions zelf zijn wel objecten. Dát is waar je naartoe wilt werken. Je zult echter in de tutorial zien dat er tussen het barbaarse die/exit en exceptions nog een stap zit, trigger_error, wat ik in mijn voorbeeld hierboven ook gebruikt heb.
Succes ermee.
Dank!